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 cuandoInvoke-Command
realmente se dirige a una máquina remota .
-
Tenga en cuenta que
-
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
.