首页 > 解决方案 > 使用 PowerShell 远程执行软件中心包

问题描述

我有一个特定的用例,我需要远程执行 Windows 10 版本 1809 操作系统升级包,该升级包发布在 Windows 10 v1709 PC 上的操作系统选项卡下的软件中心。我有一个 PowerShell one-liner,当 PC 使用管理员帐户(与 PC 登录的帐户相同)登录时,它将远程执行此操作,如下所示:

Invoke-Command -ComputerName Computer001 {(New-Object -ComObject "UIResource.UIResourceMgr").ExecuteProgram("*", "OS_UpGrade", $true)} 

当目标 PC 使用我用来运行 PowerShell 终端的相同帐户登录时,这非常有效。但是当 PC (Computer001) 注销时,我运行相同的命令,我得到这个错误:

"Error HRESULT E_FAIL has been returned from a call to a COM component.
+ CategoryInfo          : OperationStopped: (:) [], COMException
+ FullyQualifiedErrorId : System.Runtime.InteropServices.COMException
+ PSComputerName        : Computer001"

我猜想在 PC 注销时无法调用 ComObject,这是正确的吗?有什么办法可以解决吗?

任何指导将不胜感激。

标签: powershellinstallationsccm

解决方案


我在这里更深入地查看了文档。

问题特别是您正在调用的 COM 对象(如您所料)。

SCCM 的 SDK 特别提到这个 COM 对象是 CM 的 UI。UIResource.UIResourceMgr。它还在 SDK 中指出,此特定对象可能难以调用,因为它依赖于用户上下文。

恐怕您将不得不找到一个不依赖于调用 UI 资源的执行。

通过 PSExec 运行它可能比调用 SCCM 的 PowerShell 脚本更容易,因为我认为您不能使用 SCCM 本身来远程调用安装。


推荐阅读