run remotely remote how computer powershell powershell-remoting powershell-v4.0 powershell-4.0

powershell - remotely - ¿Cómo paso una variable local a un `Invoke-Command` remoto?



windows remote powershell (2)

Estoy tratando de recuperar el hash de un archivo ubicado en el servidor remoto usando Invoke-Command . Funciona bien cuando doy la ruta completa de la siguiente manera:

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

Pero necesito pasar el nombre del archivo a través de una variable como se muestra a continuación:

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

¿Cómo scriptblock esta variable en el scriptblock de scriptblock de una sesión remota?


En PowerShell 4 (3+ en realidad), la forma más fácil es usar el modificador de alcance Using :

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

Para una solución que funciona con todas las versiones:

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


Para complementar :

El bloque de script pasado a Invoke-Command se ejecuta (según lo previsto) en la máquina remota , utilizando las variables de la máquina remota de forma predeterminada.

Por lo tanto, para usar una variable local (valor), se necesitan pasos adicionales (para decirlo de manera diferente: dentro de un bloque de script ejecutado de forma remota, no puede simplemente referirse a las variables locales como lo haría normalmente, como con $dest ):

  • PS v3 + ofrece el using: modificador de alcance para el uso directo de una variable local dentro del bloque de script : consulte el primer comando de briantist.

    • Tenga en cuenta que using: solo funciona cuando Invoke-Command realmente se dirige a una máquina remota .
  • La única opción que también funciona en versiones anteriores es pasar la variable local como parámetro al bloque de script. - Ver el segundo comando de briantist.

Para obtener más información, consulte Get-Help about_Remote_Variables o los documentos en línea .