簡體   English   中英

使用 Invoke-CimMethod 觸發安裝 SCCM 更新時出錯

[英]Error when triggering installation of SCCM updates with Invoke-CimMethod

我正在嘗試通過調用 Powershell 中的 CIM 方法來觸發將 SCCM 通告的更新安裝到某些特定計算機上 7. 不管該命令觸發了所需的操作,我仍然總是收到錯誤消息。

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 session 而不是 CIM session 並實際在本地運行命令。

$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)"
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM