(#9056) Pass ruby block to capture stdout when determining PS version

Prior to this commit, the function used to determine the version of
Powershell would loop forever inside the Subprocess.execute function
because the process would never exit. This commit fixes that by passing
in a ruby block to capture the version from stdout instead of trying to
capture it from the returned process when it exits.
This commit is contained in:
Brian Cain 2018-02-14 08:45:34 -08:00
parent c2405ced3f
commit 3844a8e9f9
No known key found for this signature in database
GPG Key ID: 43D51080D357A001
1 changed files with 9 additions and 2 deletions

View File

@ -11,6 +11,7 @@ module Vagrant
class PowerShell
# NOTE: Version checks are only on Major
MINIMUM_REQUIRED_VERSION = 3
LOGGER = Log4r::Logger.new("vagrant::util::powershell")
# @return [Boolean] powershell executable available on PATH
def self.available?
@ -85,8 +86,14 @@ module Vagrant
"Write-Output $PSVersionTable.PSVersion.Major"
].flatten
r = Subprocess.execute(*command)
@_powershell_version = r.exit_code != 0 ? nil : r.stdout.chomp
version = nil
begin
r = Subprocess.execute(*command, notify: [:stdout, :stderr], timeout: 10) {|io_name,data| version = data}
rescue Vagrant::Util::Subprocess::TimeoutExceeded
LOGGER.debug("Timeout exceeded while attempting to determine version of Powershell.")
end
@_powershell_version = version
end
@_powershell_version
end