2017-10-10 6 views
2

Je suis donc très nouveau à Powershell et je suis presque certain que ce que je fais n'est pas le moyen le plus efficace de le faire. Mais je veux vraiment comprendre pourquoi ce que je fais ne fonctionne pas.Invoke-WmiMethod -ArgumentList n'accepte pas les variables?

Je suis en train de déclencher des actions du client Configuration Manager à l'aide Powershell en exécutant le code suivant:

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

Cela fonctionne très bien. Mais je voulais être capable d'appeler une variable ou quelque chose où tous ces longs codes sont au lieu d'avoir à les mettre à chaque fois que je veux changer l'action du client. Alors, voici où j'ai commencé à jouer et j'étais incapable de faire quoi que ce soit au travail.

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

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

Cela me donne une erreur. J'ai aussi essayé ce qui suit:

$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' 
    } 

et enfin

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

J'ai aussi essayé

$($ApplicationDeployment).ArgumentList 

Mais cela donne la même erreur que tout le reste.

J'apprécierais vraiment une explication quant à pourquoi ceci ne fonctionne pas ... Merci d'avance.

Répondre

2

Votre problème est que votre variable n'est pas initialisée localement sur votre machine. Vous devez le passer à la machine distante lors de l'exécution du script. Pour ce faire, remplacez Object.ApplicationDeployment $ par $ En utilisant: Object.ApplicationDeployment comme dans le code ci-dessous:

$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

Merci pour l'explication. – Ben