【问题标题】:Invoke-WMIMethod convert to Invoke-CimMethod with ciminstance as Argument errorInvoke-WMIMethod 转换为 Invoke-CimMethod 与 ciminstance 作为参数错误
【发布时间】:2020-08-27 07:50:01
【问题描述】:

因此,尝试使用 Invoke-CimMethod 而不是 Invoke-WMIMethod 在 SCCM 中触发软件更新。

WMIMethod 的工作原理:

$UpdateID = 'Site_1EED8E47-D4D8-4823-883C-4FFE753FA233/SUM_0af47e05-17cb-4756-8610-09ce486df1ba'
$FeatureUpdate = Get-WmiObject -Namespace Root\CCM\ClientSDK -Class CCM_SoftwareUpdate -Filter "UpdateID like '$UpdateID'"
Invoke-WmiMethod -Namespace Root\ccm\clientSDK -Class CCM_SoftwareUpdatesManager -Name InstallUpdates -ArgumentList $FeatureUpdate

请注意,$FeatureUpdate 是更新的一个实例:

$FeatureUpdate.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     ManagementObject                         System.Management.ManagementBaseObject

现在使用 Invoke-CimMethod:

$Instance=Get-CimInstance -Namespace Root\CCM\ClientSDK -Class CCM_SoftwareUpdate -Filter "UpdateID like '$UpdateID'"
Invoke-CimMethod -Namespace Root\ccm\clientSDK -Class CCM_SoftwareUpdatesManager -MethodeName InstallUpdates -Arguments @{CCMUpdates = $Instance}

Invoke-CimMethod : Type mismatch for parameter "CCMUpdates"
At line:1 char:1
+ Invoke-CimMethod -ClassName CCM_SoftwareUpdatesManager -Namespace Roo ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidType: (Root\CCM\Client...eUpdatesManager:String) [Invoke-CimMethod], CimException
    + FullyQualifiedErrorId : HRESULT 0x80041005,Microsoft.Management.Infrastructure.CimCmdlets.InvokeCimMethodCommand

注意实例:

$instance.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     CimInstance                              System.Object

我在使用参数触发安装时是否遗漏了什么?不确定这是否有帮助..

(((Get-CimClass -Namespace ROOT\ccm\ClientSDK -Class CCM_SoftwareUpdatesManager).CimClassMethods)|where {$_.name
 -like 'InstallUpdates'}).parameters

Name             CimType Qualifiers                 ReferenceClassName
----             ------- ----------                 ------------------
CCMUpdates InstanceArray {EmbeddedInstance, ID, in}


(((Get-CimClass -Namespace ROOT\ccm\ClientSDK -Class CCM_SoftwareUpdatesManager).CimClassMethods)|where {$_.name
 -like 'InstallUpdates'}).parameters.Qualifiers

Name             Value              CimType                       Flags
----             -----              -------                       -----
EmbeddedInstance CCM_SoftwareUpdate  String  EnableOverride, ToSubclass
ID               0                   SInt32 DisableOverride, ToSubclass
in               True               Boolean DisableOverride, ToSubclass

【问题讨论】:

标签: powershell wmi sccm


【解决方案1】:

让它坐了一天后才弄清楚。发现一些帖子可以引导我走向正确的方向。

决赛:

$UpdateID = 'Site_1EED8E47-D4D8-4823-883C-4FFE753FA233/SUM_0af47e05-17cb-4756-8610-09ce486df1ba'
$Instance = @(Get-CimInstance -Namespace ROOT\ccm\ClientSDK -ClassName CCM_SoftwareUpdate -Filter "UpdateID like '$UpdateID'")
Invoke-CimMethod -Namespace ROOT\ccm\ClientSDK -ClassName CCM_SoftwareUpdatesManager -MethodName InstallUpdates -Arguments @{CCMUpdates = [ciminstance[]]$Instance}

返回并安装更新:

ReturnValue PSComputerName
----------- --------------
          0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-21
    • 2020-10-14
    • 2015-03-17
    • 2018-02-02
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 2020-03-17
    相关资源
    最近更新 更多