使用 Invoke-CimMethod 触发安装 SCCM 更新时出错
Error when triggering installation of SCCM updates with Invoke-CimMethod
我试图通过从 Powershell 7 调用 CIM 方法来触发将 SCCM 通告的更新安装到某些特定计算机。
不管命令是否触发了所需的操作,我仍然总是收到错误消息。
Invoke-CimMethod: Es wurde keine Instanz mit den Eigenschaftswerten gefunden.
或翻译成英文:
Invoke-CimMethod : No instance found with given property values.
这是代码:
$COMPUTERNAME = 'RemoteComputer01'
$CIMSession = New-CimSession -ComputerName $COMPUTERNAME
$GetCimInstanceParams = @{
NameSpace = 'ROOT\ccm\ClientSDK'
ClassName = 'CCM_SoftwareUpdate'
Filter = 'ComplianceState = 0'
CimSession = $CIMSession
ErrorAction = 'Stop'
}
$InvokeCimMethodParams = @{
Namespace = 'ROOT\ccm\ClientSDK'
ClassName = 'CCM_SoftwareUpdatesManager'
MethodName = 'InstallUpdates'
Arguments = @{ CCMUpdates = [ciminstance[]](Get-CimInstance @GetCimInstanceParams) }
CimSession = $CIMSession
ErrorAction = 'Stop'
}
Invoke-CimMethod @InvokeCimMethodParams
无论我如何尝试调用 CIM 方法 - 展开或在一行中 - 我总是收到错误。
Invoke-CimMethod -Namespace 'root/ccm/ClientSDK' -ClassName 'CCM_SoftwareUpdatesManager' -ComputerName $ComputerName -Arguments @{ CCMUpdates = [ciminstance[]] (Get-CimInstance -Namespace 'root/ccm/ClientSDK' -ClassName 'CCM_SoftwareUpdate' -ComputerName $ComputerName) } -MethodName 'InstallUpdates'
怎么了?如何消除错误并获得 return 值?
万一以后有人对它感兴趣... ;-)
最终至少找到了一个我可以接受的解决方法。
我现在使用的是 PS 会话,而不是 CIM 会话,运行 命令实际上是本地的。
$COMPUTERNAME = 'RemoteComputer01'
$PSSession = New-PSSession -ComputerName $COMPUTERNAME
Invoke-Command -Session $PSSession -ScriptBlock {
$GetCimInstanceParams = @{
NameSpace = 'ROOT\ccm\ClientSDK'
ClassName = 'CCM_SoftwareUpdate'
Filter = 'ComplianceState = 0'
ErrorAction = 'Stop'
}
$InvokeCimMethodParams = @{
Namespace = 'ROOT\ccm\ClientSDK'
ClassName = 'CCM_SoftwareUpdatesManager'
MethodName = 'InstallUpdates'
Arguments = @{ CCMUpdates = [ciminstance[]](Get-CimInstance @GetCimInstanceParams ) }
ErrorAction = 'Stop'
}
Invoke-CimMethod @InvokeCimMethodParams
}
这为我提供了正确的 return 代码。
PowerShell 5 也有同样的问题,我更新了我的代码以忽略错误
[ciminstance[]]$Application = (Get-CIMinstance -CIMSession $CIMsession -Namespace "root\ccm\clientSDK" -Class CCM_SoftwareUpdate | Where-Object { $_.EvaluationState -like "*$($AppEvalState0)*" -or $_.EvaluationState -like "*$($AppEvalState1)*"})
Invoke-CimMethod -Namespace root\ccm\clientsdk -ClassName CCM_SoftwareUpdatesManager -MethodName 'InstallUpdates' -Arguments @{CCMUpdates = $Application} -CimSession $CIMsession -ErrorAction SilentlyContinue |out-null
if($error[0] -notlike "*no instance found*"){
Write-log "Error found $($error)"
}
我试图通过从 Powershell 7 调用 CIM 方法来触发将 SCCM 通告的更新安装到某些特定计算机。 不管命令是否触发了所需的操作,我仍然总是收到错误消息。
Invoke-CimMethod: Es wurde keine Instanz mit den Eigenschaftswerten gefunden.
或翻译成英文:
Invoke-CimMethod : No instance found with given property values.
这是代码:
$COMPUTERNAME = 'RemoteComputer01'
$CIMSession = New-CimSession -ComputerName $COMPUTERNAME
$GetCimInstanceParams = @{
NameSpace = 'ROOT\ccm\ClientSDK'
ClassName = 'CCM_SoftwareUpdate'
Filter = 'ComplianceState = 0'
CimSession = $CIMSession
ErrorAction = 'Stop'
}
$InvokeCimMethodParams = @{
Namespace = 'ROOT\ccm\ClientSDK'
ClassName = 'CCM_SoftwareUpdatesManager'
MethodName = 'InstallUpdates'
Arguments = @{ CCMUpdates = [ciminstance[]](Get-CimInstance @GetCimInstanceParams) }
CimSession = $CIMSession
ErrorAction = 'Stop'
}
Invoke-CimMethod @InvokeCimMethodParams
无论我如何尝试调用 CIM 方法 - 展开或在一行中 - 我总是收到错误。
Invoke-CimMethod -Namespace 'root/ccm/ClientSDK' -ClassName 'CCM_SoftwareUpdatesManager' -ComputerName $ComputerName -Arguments @{ CCMUpdates = [ciminstance[]] (Get-CimInstance -Namespace 'root/ccm/ClientSDK' -ClassName 'CCM_SoftwareUpdate' -ComputerName $ComputerName) } -MethodName 'InstallUpdates'
怎么了?如何消除错误并获得 return 值?
万一以后有人对它感兴趣... ;-)
最终至少找到了一个我可以接受的解决方法。
我现在使用的是 PS 会话,而不是 CIM 会话,运行 命令实际上是本地的。
$COMPUTERNAME = 'RemoteComputer01'
$PSSession = New-PSSession -ComputerName $COMPUTERNAME
Invoke-Command -Session $PSSession -ScriptBlock {
$GetCimInstanceParams = @{
NameSpace = 'ROOT\ccm\ClientSDK'
ClassName = 'CCM_SoftwareUpdate'
Filter = 'ComplianceState = 0'
ErrorAction = 'Stop'
}
$InvokeCimMethodParams = @{
Namespace = 'ROOT\ccm\ClientSDK'
ClassName = 'CCM_SoftwareUpdatesManager'
MethodName = 'InstallUpdates'
Arguments = @{ CCMUpdates = [ciminstance[]](Get-CimInstance @GetCimInstanceParams ) }
ErrorAction = 'Stop'
}
Invoke-CimMethod @InvokeCimMethodParams
}
这为我提供了正确的 return 代码。
PowerShell 5 也有同样的问题,我更新了我的代码以忽略错误
[ciminstance[]]$Application = (Get-CIMinstance -CIMSession $CIMsession -Namespace "root\ccm\clientSDK" -Class CCM_SoftwareUpdate | Where-Object { $_.EvaluationState -like "*$($AppEvalState0)*" -or $_.EvaluationState -like "*$($AppEvalState1)*"})
Invoke-CimMethod -Namespace root\ccm\clientsdk -ClassName CCM_SoftwareUpdatesManager -MethodName 'InstallUpdates' -Arguments @{CCMUpdates = $Application} -CimSession $CIMsession -ErrorAction SilentlyContinue |out-null
if($error[0] -notlike "*no instance found*"){
Write-log "Error found $($error)"
}