Muszę przetworzyć kopię roboczą SVN w skrypcie PS, ale mam problemy z przekazywaniem argumentów do funkcji. Oto co mam:
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] $_}
Chcę przekazać $arg[0]
co $arg1
do foo
i $arg[1]
jak $arg2
. Jednak to nie działa, z jakiegoś powodu $arg1
jest zawsze puste:
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>
Uwaga:"blah"
parametr nie jest przekazywana jako $arg1
.
Jestem absolutnie pewien, że jest to zabawnie proste (dopiero zacząłem robić PS i nadal czuję się bardzo niezdarny), ale uderzyłem się w to głową przez ponad godzinę i nie mogę nic znaleźć.
powershell
sbi
źródło
źródło
Powodem, dla którego $ args [0] nie zwraca niczego w obiekcie foreach, jest to, że $ args jest zmienną automatyczną, która przyjmuje polecenie bez nazwy i niedopasowane parametry do polecenia, a obiekt foreach jest nowym poleceniem. Nie ma żadnych niepasujących parametrów dla bloku procesu, więc $ args [0] ma wartość null.
Jedną rzeczą, która może pomóc, jest to, że twoje skrypty mogą mieć parametry, podobnie jak funkcje.
Gdy zaczniesz chcieć więcej funkcji od swoich parametrów, możesz sprawdzić post na blogu, który napisałem o postępie parametrów od $ args do aktualnych parametrów zaawansowanych, których możemy teraz używać.
źródło
Wypróbuj coś takiego:
źródło
foreach
.