我以管理员身份打开 PowerShell,并使用以下代码行运行 Windows 更新的脱机文件。效果很好
Start-Process 'wusa.exe' -ArgumentList 'C:\Temp\windows10.0-kb5032189-x64_0a3b690ba3fa6cd69a2b0f989f273cfeadba745f.msu' -verb runas
但现在我尝试以某种方式使用相同的代码在远程计算机上运行该文件。 Windows 更新文件在远程 PC 上具有相同的名称和确切位置
我想出了下面的代码,它首先获取管理员凭据并将其传递给调用命令。然后调用命令运行启动进程代码。
$Username = 'username123'
$Password = '84fWfghnsf&5Fh'
$pass = ConvertTo-SecureString -AsPlainText $Password -Force
$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$pass
Invoke-Command -ComputerName 8HPF31J7V6.domain.local -Credential $Cred -ScriptBlock {Start-Process 'wusa.exe' -ArgumentList 'C:\Temp\windows10.0-kb5032189-x64_0a3b690ba3fa6cd69a2b0f989f273cfeadba745f.msu' -verb runas}
问题是,当我执行此操作时,远程 PC 上没有任何反应
运行时我也没有收到任何错误
关于我做错了什么有什么想法,或者除此之外还有其他解决方案吗?
将
-Wait
添加到远程 Start-Process
调用,以确保 wusa.exe
在从远程 Invoke-Command
调用返回之前运行完成。
-ComputerName
参数隐式创建临时远程会话,当 Start-Process
调用返回时,Invoke-Command
启动的进程将自动终止。
通过 PowerShell 的 remoting 执行的代码在目标计算机上无形地运行,因此使用
-Verb RunAs
是没有意义的:
如果远程进程已经is提升,则它没有效果。请注意,如果运行远程命令的用户身份是目标计算机上的管理员,则远程进程将自动提升。
总是失败,因为无法显示 UAC 对话框。
# Note the use of -Wait, removal of -Verb RunAs
Invoke-Command -ComputerName 8HPF31J7V6.domain.local -Credential $Cred -ScriptBlock {
Start-Process -Wait wusa.exe -ArgumentList 'C:\Temp\windows10.0-kb5032189-x64_0a3b690ba3fa6cd69a2b0f989f273cfeadba745f.msu'
}