Przez lata używałem cmd/DOS/Windows
powłoki i przekazywałem argumenty wiersza poleceń do plików wsadowych. Na przykład, mam pliku, zuzu.bat
aw nim, mam dostęp %1
, %2
itp Teraz chcę zrobić to samo, gdy nazywam PowerShell
skrypt when I am in a Cmd.exe shell
. Mam skrypt xuxu.ps1
(i dodałem PS1 do mojej zmiennej PATHEXT i powiązanych plików PS1 z PowerShell). Ale bez względu na to, co robię, wydaje mi się, że nie mogę nic uzyskać ze $args
zmiennej. Ma zawsze długość 0.
Jeśli jestem w PowerShell
powłoce, zamiast cmd.exe
tego działa (oczywiście). Ale nie czuję się jeszcze wystarczająco komfortowo, aby żyć w środowisku PowerShell w pełnym wymiarze godzin. Nie chcę pisać powershell.exe -command xuxu.ps1 p1 p2 p3 p4
. Chcę pisać xuxu p1 p2 p3 p4
.
Czy to możliwe, a jeśli tak, to w jaki sposób?
Przykład, którego nie mogę uruchomić, jest trywialny, foo.ps1:
Write-Host "Num Args:" $args.Length;
foreach ($arg in $args) {
Write-Host "Arg: $arg";
}
Wyniki są zawsze takie:
C:\temp> foo
Num Args: 0
C:\temp> foo a b c d
Num Args: 0
c:\temp>
xuxu p1 p2 p3 p4
”).