在 powershell 中使用 wusa.exe “invoke-command” - 不会安装 msu

在 powershell 中使用 wusa.exe “invoke-command” - 不会安装 msu

我正在尝试使用 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

相关内容