Start-Command PowerShell v3.0, ничего не делает - PullRequest
1 голос
/ 08 апреля 2020

Я пытаюсь установить программное обеспечение (исполняемый файл) на несколько серверов с различными версиями PowerShell. Обычно приведенный ниже код работает без проблем на PS4 и выше. На PS3 он ничего не устанавливает и не выдает никаких ошибок на сервере просмотра событий удаления сервера. Он считался успешным, печатая «... - установка прошла успешно» и завершается. Я погуглил и прочитал, что, возможно, Start-Process является виновником PS3.

Begin {
    $uncpath="\\remoteserveruncpath\"                                                      #"

    $exe_parameter1 = "centralserver.com"
    $creds = Get-Credential -Message "Password: " -Username "$($env:userdnsdomain)\$($env:username)"

}
Process {
    $dnshostname = "server1","server2","server3"

    ForEach ($server in $dnshostname) {
        Invoke-Command -ComputerName $server -ScriptBlock {
            param($server_int,$exe_parameter1_int,$uncpath_int,$creds_int)

            (New-Object -ComObject WScript.Network).MapNetworkDrive('Z:',"$($uncpath_int)", $false, "$($creds_int.Username)", "$($creds_int.GetNetworkCredential().Password)")

            $arguments = "/param_1=$exe_parameter1_int /param_2=$($server_int.ToLower()) /start-program=1 /S"

            If((Start-Process "Z:\installer.exe" -ArgumentList $arguments -Wait -Verb RunAs).ExitCode -ne 0) {
                Write-Host "$server_int -- installation succeeded"
            } else {
                Write-Error "$server_int -- installation failed"
            }
          } -ArgumentList $server,$exe_parameter1,$uncpath,$creds;
     }    
}

Любой совет? Большое спасибо!

1 Ответ

1 голос
/ 08 апреля 2020

Без -PassThru, Start-Process производит нет вывода, поэтому при доступе к .ExitCode фактически возвращается $null, всегда.

И так как $null -ne 0 всегда $true, ваш код всегда указывает на успех.

Чтобы получить истинный код завершения команды установщика, вам необходимо использовать следующее (обратите внимание на добавление -PassThru):

if ((Start-Process -PassThru 'Z:\installer.exe' -ArgumentList $arguments -Wait -Verb RunAs).ExitCode -ne 0) { ... }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...