Necesito procesar una copia de trabajo SVN en un script PS, pero tengo problemas para pasar argumentos a las funciones. Esto es lo que tengo:
function foo($arg1, $arg2)
{
echo $arg1
echo $arg2.FullName
}
echo "0: $($args[0])"
echo "1: $($args[1])"
$items = get-childitem $args[1]
$items | foreach-object -process {foo $args[0] $_}
Quiero pasar $arg[0]
como $arg1
a foo
, y $arg[1]
como $arg2
. Sin embargo, no funciona, por alguna razón $arg1
siempre está vacío:
PS C:\Users\sbi> .\test.ps1 blah .\Dropbox
0: blah
1: .\Dropbox
C:\Users\sbi\Dropbox\Photos
C:\Users\sbi\Dropbox\Public
C:\Users\sbi\Dropbox\sbi
PS C:\Users\sbi>
Nota: El "blah"
parámetro no se pasa como $arg1
.
Estoy absolutamente seguro de que esto es algo hilarantemente simple (recién comencé a hacer PS y todavía me siento muy torpe), pero me he golpeado la cabeza contra esto durante más de una hora y no puedo encontrar nada.
powershell
sbi
fuente
fuente
La razón por la que $ args [0] no está devolviendo nada en el objeto foreach es que $ args es una variable automática que toma parámetros sin nombre y no coincidentes a un comando y el objeto foreach es un comando nuevo. No hay parámetros no coincidentes para el bloque de proceso, por lo que $ args [0] es nulo.
Una cosa que puede ayudar es que sus scripts pueden tener parámetros, al igual que las funciones.
A medida que comience a querer más funcionalidad de sus parámetros, puede consultar una publicación de blog que escribí sobre la progresión de parámetros desde $ args a los parámetros avanzados actuales que podemos usar ahora.
fuente
Intenta algo como esto:
fuente
foreach
.