Preciso processar uma cópia de trabalho SVN em um script PS, mas tenho problemas para passar argumentos para funções. Aqui está o que eu tenho:
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] $_}
Eu quero passar $arg[0]
como $arg1
para foo
, e $arg[1]
como $arg2
. No entanto, ele não funciona, por algum motivo, $arg1
está sempre vazio:
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: O "blah"
parâmetro não é passado como $arg1
.
Estou absolutamente certo de que isso é algo hilariante simples (eu apenas comecei a fazer PS e ainda me sinto muito desajeitado), mas bati minha cabeça contra isso há mais de uma hora e não consigo encontrar nada.
powershell
sbi
fonte
fonte
O motivo pelo qual $ args [0] não está retornando nada no objeto foreach é que $ args é uma variável automática que leva parâmetros sem nome e sem correspondência para um comando e o objeto foreach é um novo comando. Não existem parâmetros incomparáveis para o bloco do processo, portanto $ args [0] é nulo.
Uma coisa que pode ajudar é que seus scripts podem ter parâmetros, assim como funções.
À medida que você começa a desejar mais funcionalidade de seus parâmetros, consulte uma postagem de blog que escrevi sobre a progressão de parâmetros de $ args para os parâmetros avançados atuais que podemos usar agora.
fonte
Tente algo como isto:
fonte
foreach
.