使用Winrm和Microsoft.Update.Session远程修补服务器的问题


10

我有一个装有Windows 2003、2008和2008r2服务器的网络。我有一个Powershell脚本,该脚本是使用“ Microsoft.Update” com对象编写的,用于修补本地计算机。(类似于 Windows Update PowerShell Remoting。)我的脚本在本地可以很好地运行,但是由于要管理的服务器数量很多,我想远程使用它的功能。在这种情况下,它会下降(类似于其他未解决的帖子)。

但是,我能够将失败范围缩小到特定类的两个方法。

(New-Object -ComObject "Microsoft.Update.Session").CreateUpdateDownloader()
(New-Object -ComObject "Microsoft.Update.Session").CreateUpdateInstaller()

如果您以管理员身份在本地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

我已经在博客上看到这是一个错误,但是对此说法没有任何支持。存在两种解决方法,但都不能使我满意。

  • 使用psexec以系统用户身份运行命令。我正在尝试不使用PSExec,因为事实证明它不可靠。我还想要一个纯Powershell解决方案。
  • 创建一个计划任务,并告诉您以系统用户身份运行脚本。(通过他的帖子)这不仅麻烦,而且我将没有更新结果。我必须登录到文件或更新数据库或其他内容。

我乐于接受其他方法来远程在主机上运行更新,因为这似乎是很多人都想解决的问题。

我找到一些解释消息的文档,但没有解释原因或解决方法。

返回值如果成功,则返回S_OK。否则,返回COM或Windows错误代码。

This method can also return the following error codes.
Return code   Description
E_INVALIDARGA parameter value is invalid. 
E_ACCESSDENIED    This method cannot be called from a remote computer.

怎么知道我在远程计算机上?


这似乎比站起WSUS实例并走那条路要复杂得多。你考虑过那条路线吗?
漂流农民2011年

您无法确切控制何时购买服务器,并确保仅通过WSUS即可恢复服务器。我们确实利用它来进行更新。如果您可以触发它来执行按需操作,我会很感兴趣。
reconbot 2011年

我在Server 2012上使用PowerShell Web Access时遇到了同样的问题,在后台它也使用PowerShell远程处理。同样的错误。
彼得·汉道夫

1
这里可能的答案serverfault.com/a/474031/23300
Nic

@reconbot我知道它的老问题,但我也面临问题。您有任何解决方法或替代方法吗?
计算机

Answers:



0

这种命令需要在远程计算机上以特权运行,因此需要以域管理员用户或远程计算机上的管理员身份运行。

如果您是第一种情况,我没有帮助,但您只是本地管理员,而不是远程管理员,请按以下方式使用get-credential

$cred = get-credential

Invoke-Command -ComputerName localhost -credential $cred -scriptblock {}

另一种更直接的形式是Invoke-Command要求提供凭据:

Invoke-Command -scriptblock {$ENV:username} -Credential ""

我使用管理员帐户的凭据运行,错误指定“无法从远程计算机调用此方法”。
reconbot 2012年

0

通过在远程服务器上设置JEA端点以作为本地虚拟帐户运行,我能够使它正常工作。

https://docs.microsoft.com/zh-cn/powershell/jea/session-configurations中

本地虚拟帐户

如果此JEA端点支持的角色全部用于管理本地计算机,并且本地管理员帐户足以成功运行命令,则应将JEA配置为使用本地虚拟帐户。虚拟帐户是特定用户唯一的临时帐户,并且仅在其PowerShell会话期间有效。在成员服务器或工作站上,虚拟帐户属于本地计算机的Administrators组,并且有权访问大多数系统资源。在Active Directory域控制器上,虚拟帐户属于域的Domain Admins组。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.