Estoy escribiendo un script de PowerShell que ejecutará comandos en un host remoto usando Invoke-Command y su parámetro -ScriptBlock
. Por ejemplo,Usando Invoke-Command -ScriptBlock en una función con argumentos
function Foo {
...
return "foo"
}
$rv = Invoke-Command --Credential $c --ComputerName $fqdn -ScriptBlock ${function:Foo}
Esto funciona bien. Lo que me gustaría hacer ahora es lo mismo, pero llame a una función con argumentos locales. Por ejemplo,
function Bar {
param([String] $a, [Int] $b)
...
return "foo"
}
[String] $x = "abc"
[Int] $y = 123
$rv = Invoke-Command --Credential $c --ComputerName $fqdn -ScriptBlock ${function:Foo($x,$y)}
Pero esto no funciona:
Invoke-Command: No se puede validar el argumento del parámetro 'ScriptBlock'. El argumento es nulo. Proporcione un argumento no nulo y pruebe el comando nuevamente.
¿Cómo puedo usar Invoke-Command con un -ScriptBlock
que es una función local con argumentos?
Me doy cuenta de que puedo envolver toda la función y los parámetros en un gran bloque de código, pero esa no es una forma limpia de hacerlo, en mi opinión.
gracias hombre, funciona a la perfección! Estaba jugando con combos de param() + -Argumentos sin suerte. –
me llevó varias horas encontrar esta solución ;-) Mucho mejor que exportar/importar sesiones ¡Gracias! – icnivad
Creo que el formato correcto debería ser '-ScriptBlock {$ función: Foo}' (nota '$' posición) – Mourndark