Comment puis-je passer une variable locale à une distance "Invoke-Command"?
Je suis en train de récupérer le hash d'un fichier situé sur un serveur distant en utilisant Invoke-Command
. Il fonctionne très bien quand je donne le chemin d'accès complet comme ci-dessous:
Invoke-Command -ComputerName winserver -ScriptBlock {
Get-FileHash -Path E:\test\testfile.zip -Algorithm SHA1
}
Mais j'ai besoin de passer le nom du fichier via une variable comme ci-dessous:
Invoke-Command -ComputerName winserver -ScriptBlock {
Get-FileHash -Path "E:\test$dest.zip" -Algorithm SHA1
}
Comment puis-je accéder à cette variable dans le scriptblock
d'une session à distance?
Vous devez vous connecter pour publier un commentaire.
Dans PowerShell 4 (3+ en fait) le plus simple est d'utiliser le
à l'Aide de
modificateur de portée:Pour une solution qui fonctionne avec toutes les versions:
À compléter briantist de réponse utile:
Le bloc de script transmis à
Invoke-Command
est (comme prévu) exécutées sur la distance de la machine, à l'aide de la distance machine de variables par défaut.Ainsi, à l'utilisation de l' local variable (valeur), des étapes supplémentaires sont nécessaires (pour le dire autrement: à l'intérieur d'un bloc de script exécuté à distance, vous ne pouvez pas simplement référence à des variables locales comme vous le feriez normalement, comme avec
$dest
):PS v3+ offre la
using:
portée modificateur pour de l'utilisation directe d'une variable locale à l'intérieur du bloc de script - voir briantist de la première commande.using:
ne fonctionne que lorsqueInvoke-Command
cible réellement un distance machine.La seule option qui fonctionne également dans les versions antérieures est à passer la variable locale comme un paramètre pour le bloc de script. - voir briantist deuxième commande.
Pour plus d'informations, reportez-vous à
Get-Help about_Remote_Variables
ou la docs en ligne.