Ich muss eine SVN-Arbeitskopie in einem PS-Skript verarbeiten, habe jedoch Probleme, Argumente an Funktionen zu übergeben. Folgendes habe ich:
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] $_}
Ich möchte weitergeben , $arg[0]
wie $arg1
zu foo
, und $arg[1]
wie $arg2
. Es funktioniert jedoch nicht, aus irgendeinem Grund $arg1
ist es immer leer:
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>
Hinweis: Der "blah"
Parameter wird nicht als übergeben $arg1
.
Ich bin mir absolut sicher, dass dies etwas unglaublich Einfaches ist (ich habe gerade erst mit PS angefangen und fühle mich immer noch sehr ungeschickt), aber ich habe jetzt seit mehr als einer Stunde meinen Kopf dagegen geschlagen und kann nichts finden.
powershell
sbi
quelle
quelle
Der Grund, warum $ args [0] nichts im foreach-Objekt zurückgibt, ist, dass $ args eine automatische Variable ist, die unbenannte, nicht übereinstimmende Parameter zu einem Befehl nimmt, und das foreach-Objekt ein neuer Befehl ist. Es gibt keine nicht übereinstimmenden Parameter für den Prozessblock, daher ist $ args [0] null.
Eine Sache, die helfen kann, ist, dass Ihre Skripte Parameter haben können, genau wie Funktionen.
Wenn Sie mehr Funktionalität für Ihre Parameter wünschen, sollten Sie sich einen Blog-Beitrag ansehen, den ich über den Fortschritt der Parameter von $ args zu den aktuellen erweiterten Parametern geschrieben habe, die wir jetzt verwenden können.
quelle
Versuchen Sie so etwas:
quelle
foreach
.