gpt4 book ai didi

powershell - 为什么Powershell在Windows 7上不返回ExitCode

转载 作者:行者123 更新时间:2023-12-03 00:00:22 25 4
gpt4 key购买 nike

我正在尝试编写脚本以在许多计算机上安装软件。问题是,必须按照特定的顺序安装它们,我需要知道第一次安装已成功,然后再运行第二次安装。

这是重要的代码:

[...]

# source_one
$Argumente = @("/i", $path_to_source, "/qb", "ADDLOCAL=ALL")
if (!$visWeb_upToDate) {
Write("VIS Web-Client Installation...")
$procWeb = Start-Process msiexec.exe -ArgumentList $Argumente -Verb runAs -PassThru
$procWeb.WaitForExit()
Write-Debug($procWeb.ExitCode)

if ($procWeb.ExitCode -eq 0){
Write("... erfolgreich.")
$visWeb_upToDate = $true;
}
else {
Write-Error("... nicht erfolgreich.")
Write-Error("Bitte Clients manuell installieren.")
}
}

# source_two
if ($visWeb_upToDate -and !$vis64_upToDate){
Write("VIS 64-Bit Client Installation...")
$Argumente[1] = $path_to_another_source
$procWeb64 = Start-Process msiexec.exe -ArgumentList $Argumente -Verb runAs -PassThru
$procWeb64.WaitForExit()
Write-Debug($procWeb64.ExitCode)

if ($procWeb64.ExitCode -eq 0){
Write("... erfolgreich.")
$vis64_upToDate = $true
}
else {
Write-Error("... nicht erfolgreich.")
Write-Error("Bitte 64-Bit Client manuell installieren.")
}
}

[...]

我在Windows7 Powershell上没有 $procWeb.ExitCode。在Win8上,它可以正常工作,并且仅在第一个成功时安装 source_onesource_two

有人知道如何解决此问题,或
还有什么其他方法可以为两个系统设置 $visWeb_upToDate = $true吗?

提前谢谢了。

最佳答案

您的问题被标识为Powershell中的错误。

您可以获取退出代码,但仅在调用该流程的.HasExited属性并使用奇怪的语法后才能获得。

因此,作为示例,将代码更改为:

if ($procWeb.HasExited -and ($procWeb.GetType().GetField("exitCode", "NonPublic,Instance").GetValue($procWeb)) -eq 0){
Write("... erfolgreich.")
$visWeb_upToDate = $true;
}
else {
Write-Error("... nicht erfolgreich.")
Write-Error("Bitte Clients manuell installieren.")
}
}

查找有关错误 here的详细信息

关于powershell - 为什么Powershell在Windows 7上不返回ExitCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31748882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com