2016-06-14 25 views
1

Ich habe diese kurze Skript und zu überwachen, falls erforderlich, starten Sie den Drucker-Spooler auf einigen ServernWarum meine Variable leer erscheinen in Invoke-Command

$c = Get-Credential 
$servers = 'FQDN1', 'FQDN2', 'FQDN3' 
foreach ($s in $servers){ 
    Invoke-Command -ComputerName $s -Credential $c {$j = (Get-PrintJob -PrinterName 'Test Printer').count 
     Write-Host "On computer $s there are $j print jobs" 
     If ($j -gt 5){ 
      Write-Host "About to restart the printer spooler on $s" 
      Restart-Service 'Spooler' 
     } 
    } # end of invoke-command 
} # end of foreach 

Was ich nicht verstehe, ist, warum die Write-Host tut Schreiben Sie nicht den Servernamen(), sondern schreibt stattdessen die Anzahl der Jobs ($j).

Ich denke, es hat etwas damit zu tun, dass die Variable in der Remote-Sitzung ist, aber nicht in der lokalen Sitzung. Aber ich kann nicht wirklich verstehen, was genau das Problem ist.

Antwort

1

Sie haben Recht, Sie müssen die Variable an den Skriptblock übergeben, um darauf zuzugreifen.

, das zu tun, haben Sie einen Param() Abschnitt zu Beginn Ihrer Skript zu definieren und das Argument (Server) mit den -ArgumentList Parametern übergeben:

$c = Get-Credential 
$servers = 'FQDN1', 'FQDN2', 'FQDN3' 
foreach ($s in $servers){ 
    Invoke-Command -ComputerName $s -Credential $c -ScriptBlock { 
     Param($s) 
     $j = (Get-PrintJob -PrinterName 'Test Printer').count 
     Write-Host "On computer $s there are $j print jobs" 
     If ($j -gt 5){ 
      Write-Host "About to restart the printer spooler on $s" 
      Restart-Service 'Spooler' 
     } 
    } -ArgumentList $s # end of invoke-command 
} # end of foreach 
+0

Wunderbar. Vielen Dank für die Erklärung. Ich bin sehr dankbar. – Micael

2

Ab Powershell 3.0, die Sie eine verweisen lokale Variable in einem Remote-Sitzung mit dem Skript $using: Präfix:

foreach ($s in $servers){ 
    Invoke-Command -ComputerName $s -Credential $c { 
     Write-Host "On computer $using:s now" 
    } # end of invoke-command 
} # end of foreach 

die about_Remote_Variables helpfile weitere Informationen finden Sie

+0

netter, wusste nicht, dass +1 –

+0

Noch besser. Vielen Dank. – Micael