问题描述
我正在尝试通过从 Powershell 7 调用 CIM 方法来触发将 SCCM 通告的更新安装到某些特定计算机。 不管命令触发了所需的操作,我仍然总是收到错误消息。
Invoke-CimMethod:Es wurde keine Instanz mit den Eigenschaftswerten gefunden。
或翻译成英文:
Invoke-CimMethod :没有找到具有给定属性值的实例。
这是代码:
$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 方法 - splatted 或在一行中 - 我总是得到错误。
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'
怎么了?如何摆脱错误并获得返回值?
解决方法
如果将来有人对它感兴趣... ;-)
最终找到了至少一个我可以接受的解决方法。
我现在使用 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
}
这为我提供了正确的返回码。
,与 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)"
}