我有一个带有 Windows 2003、2008 和 2008r2 服务器的网络。我有一个 powershell 脚本,我编写它来使用“Microsoft.Update”com 对象修补本地机器。(类似于 Windows 更新 PowerShell 远程处理。)我的脚本在本地运行良好,但我想远程使用它的功能,因为我有相当数量的服务器需要管理。在这种情况下,它会掉下来(类似于没有解决的其他帖子)。
然而,我能够将失败缩小到特定类的两种方法。
(New-Object -ComObject "Microsoft.Update.Session").CreateUpdateDownloader()
(New-Object -ComObject "Microsoft.Update.Session").CreateUpdateInstaller()
Run Code Online (Sandbox Code Playgroud)
如果您以管理员身份在本地的 powershell 中运行这些,则不会有任何问题。如果您尝试使用 invoke-command(或 enter-session 或 winrs),您将收到以下错误。(这是使用 localhost 进行测试,但任何主机都可以。我还尝试了不同的身份验证方法,例如 credssp 和 kerberos。);
PS C:\> Invoke-Command -ComputerName localhost -ScriptBlock { (New-Object -ComObject "microsoft.update.session").createUpdateDownloader()}
Exception calling "CreateUpdateDownloader" with "0" argument(s): "Access is denied. (Exception from HRESULT: 0x80070005
(E_ACCESSDENIED))"
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation
Run Code Online (Sandbox Code Playgroud)
我在博客上看到这是一个错误,但没有备份该声明。存在两种解决方法,但都不让我高兴。
我对在主机上远程运行更新的其他方法持开放态度,因为这似乎是很多人都遇到的问题。
我找到了 …
powershell windows-server-2003 windows-server-2008 windows-update winrm