2017-10-10 103 views
2

所以我對Powershell非常陌生,我幾乎可以確定我所做的並不是最有效的方法。但我真的很想明白爲什麼我在做什麼不起作用。Invoke-WmiMethod -ArgumentList不接受變量?

我試圖觸發使用PowerShell通過運行下面的代碼Configuration Manager客戶端操作:

Invoke-Command -ComputerName $ComputerName -ScriptBlock { 
    Invoke-WmiMethod -Namespace "Root\CCM" -Class SMS_Client -Name 
    TriggerSchedule -ArgumentList "{00000000-0000-0000-0000-000000000042}" 
    } 

這運行正常。但我希望能夠調用一個變量,或者所有這些長代碼都不需要在每次我想更改客戶端操作時都放入這些代碼。所以這裏是我開始玩的地方,無法獲得任何工作。

$ApplicationDeployment = '"{00000000-0000-0000-0000000000000042}"' 

    Invoke-Command -ComputerName $ComputerName -ScriptBlock { 
    Invoke-WmiMethod -Namespace "Root\CCM" -Class SMS_Client -Name 
    TriggerSchedule -ArgumentList $ApplicationDeployment 
    } 

這給了我一個錯誤。我也試過如下:

$hash = @{"ApplicationDeployment" = "{00000000-0000-0000-0000-000000000042}"} 

    Invoke-Command -ComputerName $ComputerName -ScriptBlock { 
    Invoke-WmiMethod -Namespace "Root\CCM" -Class SMS_Client -Name 
    TriggerSchedule -ArgumentList $hash.'ApplicationDeployment' 
    } 

最後

$Object = @{ApplicationDeployment = '{00000000-0000-0000-0000-000000000042}'} 

    Invoke-Command -ComputerName $ComputerName -ScriptBlock { 
    Invoke-WmiMethod -Namespace "Root\CCM" -Class SMS_Client -Name 
    TriggerSchedule -ArgumentList $Object.ApplicationDeployment 
    } 

我也曾嘗試

$($ApplicationDeployment).ArgumentList 

但這給出了同樣的錯誤一切。

我真的很感激一個解釋,爲什麼這不起作用......先謝謝了。

回答

2

你的問題是遠程機器沒有你的變量在本地初始化。執行腳本時需要將它傳遞給遠程機器。 Object.ApplicationDeployment如下代碼: 要做到這一點,用$使用替換$ Object.ApplicationDeployment

$Object = @{ApplicationDeployment = '{00000000-0000-0000-0000-000000000042}'} 

Invoke-Command -ComputerName $ComputerName -ScriptBlock { 
    Invoke-WmiMethod -Namespace "Root\CCM" -Class SMS_Client -Name TriggerSchedule -ArgumentList $Using:Object.ApplicationDeployment 
} 
+0

謝謝你的解釋。 – Ben