Функция, содержащая процесс, возвращает искаженное значение - PullRequest
1 голос
/ 14 января 2012

Я потратил все утро, пытаясь найти, где возвращалось мое возвращаемое значение.Теперь, когда я наконец нашел, где, я до сих пор не знаю, почему.Функция выглядит следующим образом:

function Run-RemoteCommand {
param(...) # params are $Remote (host) $Command $Credentials $Quiet (optional switch)

    if($Quiet) {
       $Process = New-Object System.Diagnostics.Process
       $Process.StartInfo.UseShellExecute=$false
       $Process.StartInfo.Domain=$Credentials.GetNetworkCredential().Domain
       $Process.StartInfo.UserName=$Credentials.GetNetworkCredential().UserName
       $Process.StartInfo.Password=$Credentials.Password
       $Process.StartInfo.WindowStyle="Hidden"
       $Process.StartInfo.FileName=$PSExec
       $Process.StartInfo.Arguments=@("/acceptEULA",$Remote,"-s",$Command)
       $Process.Start()
       $Process.WaitForExit()
       $result = $Process.ExitCode
       return $result
    } else { 
       ... 
    }
 }

Странно то, что я могу пройти через это в отладчике и посмотреть, как все работает нормально.Команда запускается, $ result заполняется кодом возврата, но вызывающая функция получает True, добавленный к коду возврата (например, True0 в случае успеха).Я даже попытался переопределить возвращаемое значение и просто сказать

 return "false"

Вызывающая функция получает "Truefalse".Все, что я могу сказать, это то, что он связан с $ Process.Если я закомментирую $ Process.Start (), код возврата функционирует нормально.Кто-нибудь, пожалуйста, спаси мое здравомыслие.

1 Ответ

3 голосов
/ 14 января 2012

$ Process.Start () возвращает логическое значение, равное True, если оно выполнено успешно.Помните, что функции в PowerShell ведут себя иначе, чем стандартные языки программирования.Функции PowerShell «возвращают» или, более точно, технически корректно «выводят» любой вывод команды, который не был захвачен переменной или перенаправлен в файл или Out-Null.В этом случае измените Стартовую строку на:

[void]$Process.Start()

или

$Process.Start() | Out-Null

Ознакомьтесь с этой записью в блоге для более подробного объяснения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...