J'ai besoin de traiter une copie de travail SVN dans un script PS, mais j'ai du mal à passer des arguments aux fonctions. Voici ce que j'ai:
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] $_}
Je veux passer $arg[0]
comme $arg1
à foo
, et $arg[1]
que $arg2
. Cependant, cela ne fonctionne pas, pour une raison quelconque, il $arg1
est toujours vide:
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>
Remarque: Le "blah"
paramètre n'est pas transmis en tant que $arg1
.
Je suis absolument sûr que c'est quelque chose de hilarante simple (je viens juste de commencer à faire du PS et je me sens toujours très maladroit), mais je me suis cogné la tête contre cela depuis plus d'une heure maintenant, et je ne trouve rien.
powershell
sbi
la source
la source
La raison pour laquelle $ args [0] ne renvoie rien dans foreach-object est que $ args est une variable automatique qui prend des paramètres sans nom et sans correspondance dans une commande et foreach-object est une nouvelle commande. Il n'y a aucun paramètre inégalé pour le bloc de processus, donc $ args [0] est nul.
Une chose qui peut vous aider est que vos scripts peuvent avoir des paramètres, tout comme les fonctions.
Alors que vous commencez à vouloir plus de fonctionnalités de vos paramètres, vous voudrez peut-être consulter un article de blog que j'ai écrit sur la progression des paramètres de $ args vers les paramètres avancés actuels que nous pouvons utiliser maintenant.
la source
Essayez quelque chose comme ceci:
la source
foreach
.