rec*_*bot 11 powershell windows-server-2003 windows-server-2008 windows-update winrm
我有一个带有 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)
我在博客上看到这是一个错误,但没有备份该声明。存在两种解决方法,但都不让我高兴。
我对在主机上远程运行更新的其他方法持开放态度,因为这似乎是很多人都遇到的问题。
返回值 如果成功则返回 S_OK。否则,返回 COM 或 Windows 错误代码。
Run Code Online (Sandbox Code Playgroud)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.
它怎么知道我在远程计算机上?
小智 6
你只是不能这样做,因为 MS 不允许你通过 WUApi 做到这一点。
详细信息可以在这里找到:http : //msdn.microsoft.com/en-us/library/windows/desktop/aa387288(v=vs.85).aspx
您可以尝试使用计划任务来完成此操作。
这样的命令需要在远程计算机上以特权运行,因此需要以域管理员用户或远程计算机上的管理员身份运行。
如果你是第一种情况,我没有帮助,但你只是本地管理员,不是远程管理员,get-credential像这样使用。
$cred = get-credential
Invoke-Command -ComputerName localhost -credential $cred -scriptblock {}
Run Code Online (Sandbox Code Playgroud)
另一种更直接的形式是要求Invoke-Command提供凭据:
Invoke-Command -scriptblock {$ENV:username} -Credential ""
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9100 次 |
| 最近记录: |