2016-02-18 6 views
6

Ich versuche, den Filehash einer Datei, die sich auf dem Remote-Server befindet, unter Verwendung von Invoke-Command abzurufen. Ich bin mit meiner Skripte auf Powershell-Version 4. Es funktioniert gut, wenn ich den vollständigen Pfad geben, wie unten:Wie kann ich eine lokale Variable an einen Skriptblock übergeben, der auf einem entfernten Rechner mit Invoke-Command ausgeführt wird?

Invoke-Command -ComputerName winserver -ScriptBlock { 
    Get-FileHash E:\test\testfile.zip -Algorithm SHA1 
} 

Der obigen Befehl funktioniert. Aber ich muss den Dateinamen über eine Variable wie folgt übergeben:

Invoke-Command -ComputerName winserver -ScriptBlock { 
    Get-FileHash E:\test\$dest.zip -Algorithm SHA1 
} 

Ich bin neu in Skripting und Powershell. Bitte hilf mir bei der Lösung!

Antwort

9

In Powershell 4 (3+ tatsächlich) der einfachste Weg ist es, den Using Umfang Modifikator zu verwenden:

Invoke-Command -ComputerName winserver -ScriptBlock { 
    Get-FileHash E:\test\$Using:dest.zip -Algorithm SHA1 
} 

Für eine Lösung, die mit allen Versionen funktioniert:

Invoke-Command -ComputerName winserver -ScriptBlock { param($myDest) 
    Get-FileHash E:\test\$myDest.zip -Algorithm SHA1 
} -ArgumentList $dest 
4

Um Ergänzungbriantist's helpful answer:

Der Skriptblock, der an Invoke-Command übergeben wird, ist (wie vorgesehen) ausführbar Ted auf der Remote- Maschine, mit der Remote Maschine Variablen standardmäßig.

So um einen lokalen Variable (Wert) zu verwenden, sind zusätzliche Schritte erforderlich (anders gesagt: Innerhalb eines Remote-Skript ausgeführt Block, können Sie nicht auf lokale Variablen beziehen sie nur wie gewohnt, wie mit $dest):

  • PS v3 + bietet die using: für direkt innerhalb des Skriptblocks Verwendung Umfang Modifikator einer lokalen variablen - siehe Briantists erstes Kommando.

    • Beachten Sie, dass using: funktioniert nur, wenn Invoke-Command tatsächlich zielt auf eine Fern Maschine.
  • Die einzige Option, die auch in früheren Versionen funktioniert, ist zu den lokalen Variable als Parameter an den Script-Block übergeben. - siehe Briantists zweiter Befehl.

Weitere Informationen finden Sie unter Get-Help about_Remote_Variables oder docs online.

+1

Danke, ich würde normalerweise dieses Zeug hinzufügen und hatte keine Zeit; +1 – briantist

Verwandte Themen