2017-10-10 1 views
2

Also ich bin sehr neu in Powershell und ich bin mir fast sicher, dass das, was ich tue, nicht der effizienteste Weg ist. Aber ich möchte wirklich verstehen, warum das, was ich mache, nicht funktioniert.Invoke-WmiMethod -ArgumentList akzeptiert keine Variablen?

Ich versuche, indem Sie den folgenden Code Configuration Manager Client-Aktionen mit Powershell auslösen:

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

Dieses feine läuft. Aber ich wollte in der Lage sein, eine Variable oder etwas, wo alle diese langen Codes sind, aufzurufen, anstatt sie in jedes Mal einfügen zu müssen, wenn ich die Client-Aktion ändern möchte. Also hier habe ich angefangen herumzuspielen und konnte nichts zur Arbeit bringen.

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

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

Das gibt mir einen Fehler. Ich habe auch versucht die folgenden:

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

und schließlich

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

ich auch

versucht haben
$($ApplicationDeployment).ArgumentList 

Aber das gibt den gleichen Fehler wie alles andere.

Ich würde wirklich eine Erklärung dafür, warum das nicht funktioniert ... Vielen Dank im Voraus.

Antwort

2

Ihr Problem ist, dass Remote-Maschine Ihre Variable nicht lokal initialisiert hat. Sie müssen es beim Ausführen des Skripts an den Remote-Computer übergeben. Um dies zu tun, ersetzen $ Object.ApplicationDeployment mit $ verwenden: Object.ApplicationDeployment wie in Code unten:

$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

Sie für die Erklärung danken. – Ben

Verwandte Themen