Я потратил все утро, пытаясь найти, где возвращалось мое возвращаемое значение.Теперь, когда я наконец нашел, где, я до сих пор не знаю, почему.Функция выглядит следующим образом:
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 (), код возврата функционирует нормально.Кто-нибудь, пожалуйста, спаси мое здравомыслие.