我目前正在编写一个 Powershell 脚本,以便在我管理的几台 Windows Server 2008 R2 服务器上远程运行一些 Microsoft Hotfix 安装程序。基本上,该脚本将所有适当的文件复制到服务器,然后通过 Invoke-Command 运行安装程序,如下所示:
function InstallCU {
Write-Host "Installing June 2013 CU..."
Invoke-Command -ComputerName $ServerName -ScriptBlock {
Start-Process "c:\aaa\prjcusp2\ubersrvprj2010-kb2817530-fullfile-x64-glb.exe" -ArgumentList "/passive"
}
}
如果我在服务器上本地运行“Start-Process”命令,安装程序会正常运行。但是,当我尝试远程运行它时,什么也没有发生(实际上,我可以在任务管理器中看到安装程序启动,但它会在几秒钟后关闭并且不会运行)。
我尝试过提供 Invoke-Command -Credentials,关闭服务器上的 UAC,并确保我的 WinRM 设置(运行“winrm quickconfig”并将 TrustedHosts 设置为 *)正确。我还尝试过让 Invoke-Command 脚本运行本地 Powershell 脚本来运行安装程序,并将参数从“/passive”更改为“quiet”(以防它无法远程启动具有 UI 的东西),但同样,没有成功。
还有什么我可以尝试的吗,或者我根本无法做到这一点?
答案1
好吧,我感到有点惭愧,但我弄清楚了我做错了什么。基本上,我需要将 -Wait 参数添加到 Start-Process cmdlet。最终代码如下所示:
function InstallCU {
Write-Host "Installing June 2013 CU..."
Invoke-Command -ComputerName $ServerName -ScriptBlock {
Start-Process "c:\aaa\prjcusp2\ubersrvprj2010-kb2817530-fullfile-x64-glb.exe" -ArgumentList "/passive" -Wait
}
}