command-line powershell nested arguments

command line - Pasando alrededor de la línea de comando $ args en powershell, de una función a otra



command-line nested (2)

En PowerShell V2 , es trivial con salpicaduras. bar se convierte en:

function bar { foo @args }

Splatting tratará a los miembros de la matriz como argumentos individuales en lugar de pasarlos como un único argumento de matriz.

En PowerShell V1 es complicado, hay una manera de hacerlo para los argumentos posicionales. Dada una función foo:

function foo { write-host args0 $args[0] args1 $args[1] args2 $args[2] }

Ahora llámelo desde la barra usando el método Invoke() en el bloque de script de la función foo

function bar { $OFS='',''; "bar args: $args"; $function:foo.Invoke($args) }

Que parece

PS (STA) (16) > bar 1 2 3 bar args: 1,2,3 args0 1 args1 2 args2 3

cuando lo usas

Este es un problema desagradable que estoy enfrentando. No se sorprenda si tiene una solución simple, solo que me está escapando.

Tengo 2 archivos por lotes que tengo que convertir a scripts de powershell.

file1.bat --------- echo %1 echo %2 echo %3 file2.bat %* file2.bat -------- echo %1 echo %2 echo %3

En la línea de comandos, invoco esto como C:> file1.bat uno dos tres La salida que veo es la esperada uno dos tres uno dos tres

(Este es un ejemplo de código crudo)

Cuando me convierto a Powershell, tengo

file1.ps1 --------- Write-Host "args[0] " $args[0] Write-Host "args[1] " $args[1] Write-Host "args[2] " $args[2] . ./file2.ps1 $args file2.ps1 --------- Write-Host "args[0] " $args[0] Write-Host "args[1] " $args[1] Write-Host "args[2] " $args[2] When I invoke this on powershell command line, I get $> & file1.ps1 one two three args[0] one args[1] two args[2] three args[0] one two three args[1] args[2]

Entiendo que esto se debe a que $ args utilizado en file1.ps es un objeto System.Object [] en lugar de 3 cadenas.

Necesito una forma de pasar los $ args recibidos por file1.ps1 a file2.ps1, de la misma manera que se logra con% * en los archivos .bat.

Me temo que la manera existente se romperá incluso si es una llamada de funciones cruzadas, de la misma manera que es una llamada de archivos cruzados en mi ejemplo.

He probado algunas combinaciones, pero nada funciona.

Por favor ayuda Se lo agradeceria mucho


# use the pipe, Luke! file1.ps1 --------- $args | write-host $args | ./file2.ps1 file2.ps1 --------- process { write-host $_ }