![在 powershell 中使用 wusa.exe “invoke-command” - 不会安装 msu](https://linux22.com/image/1445303/%E5%9C%A8%20powershell%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20wusa.exe%20%E2%80%9Cinvoke-command%E2%80%9D%20-%20%E4%B8%8D%E4%BC%9A%E5%AE%89%E8%A3%85%20msu.png)
我正在尝试使用 PowerShell v3 将 Windows 修补程序推送到我们网络上的多台计算机。我已经下载了相应的.msu
文件,并且能够使用以下命令从本地计算机在命令行上成功安装它:
wusa c:\temp\hotfixname.msu /quiet /norestart
当我尝试从 powershell 运行它时,问题就出现了。我们可以假设 msu 已经在每个人的机器上,c:\temp\hotfixname.msu
并且 PSRemoting 已经启用。以下是我或多或少有的:
import-module ActiveDirectory
$AllPCs = Get-ADComputer -SearchBase "Appropriate OU Here" -filter *
$AllPCs | Foreach {
Invoke-Command -ComputerName "$($_.name)" -AsJob -ScriptBlock {
if (!(Get-HotFix -id hotfixkb)) { CMD /C "wusa.exe c:\temp\hotfixname.msu /quiet /norestart" }
}
}
当我从自己的管理框中以管理员身份运行 powershell 时,本地计算机会打开一个wusa.exe
进程一秒钟左右,然后消失。什么都没有安装。
我可以运行CMD /C "wusa.exe /?
,它确实打开了进程(它挂起了,但仅仅是因为wusa
在 GUI 中打开了它的帮助)。
我没什么主意了——有人对此有什么建议吗?我是否遗漏了什么?
答案1
由于 PSRemoting 使用 WinRM,并且根据这它看起来不像您可以wusa.exe
与 WinRM 或 WinRS 一起使用,它看起来也不可能与您所列出的代码一起使用。
不过,有一个解决方法:
使用以下命令通过 WUSA 的 Windows 远程 Shell 提取 .msu 文件:
winrs.exe -r:%计算机名称% wusa.exe %kb-update% /extract:%目标%
完成后,使用 dism.exe 或包管理器安装 .cab 包。要使用 dism.exe,请使用以下命令:
winrs.exe -r:%计算机名称% dism.exe /online /add-package /PackagePath:%Path_To_Package%\KBnnnnnnn.cab
答案2
通过 WinRM 接口和 Ansible 服务器远程更新 powershell 从 3 -> 5.1 (windows7) - PSH update-psh.ps1 脚本 (对我有用):
# install POWERSHELL update
# descr. wusa: https://support.microsoft.com/en-us/help/934307/description-of-the-windows-update-standalone-installer-in-windows
# descr. dism: https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/dism-operating-system-package-servicing-command-line-options
Start-Process -FilePath 'wusa.exe' -ArgumentList "C:\workit\updatePSH\Win7AndW2K8R2-KB3191566-x64.msu /extract:C:\workit\updatePSH" -Verb RunAs -Wait -Passthru
Start-Sleep -Seconds 5
Start-Process -FilePath 'dism.exe' -ArgumentList "/online /add-package /PackagePath:C:\workit\updatePSH\WSUSSCAN.cab /PackagePath:C:\workit\updatePSH\Windows6.1-KB2809215-x64.cab /PackagePath:C:\workit\updatePSH\Windows6.1-KB2872035-x64.cab /PackagePath:C:\workit\updatePSH\Windows6.1-KB2872047-x64.cab /PackagePath:C:\workit\updatePSH\Windows6.1-KB3033929-x64.cab /PackagePath:C:\workit\updatePSH\Windows6.1-KB3191566-x64.cab /IgnoreCheck /quiet" -Verb RunAs -Wait -PassThru