Od lat używam powłoki cmd/DOS/Windows
i przekazywałem argumenty wiersza polecenia do plików wsadowych. Na przykład mam plik, zuzu.bat
i mam do niego dostęp %1
, %2
itd. Teraz chcę zrobić to samo, gdy wywołuję skrypt PowerShell
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ę uzyskać niczego ze zmiennej $args
. Ma zawsze długość 0.Jak przekazywać argumenty wiersza polecenia do pliku PS1 PowerShell
Jeśli jestem w powłoce PowerShell
, zamiast cmd.exe
, działa (oczywiście). Ale nie jestem jeszcze wystarczająco wygodny, aby żyć w środowisku PowerShell w pełnym wymiarze godzin. Nie chcę pisać: powershell.exe -command xuxu.ps1 p1 p2 p3 p4
. Chcę wpisać xuxu p1 p2 p3 p4
.
Czy to możliwe, a jeśli tak, to w jaki sposób?
Próbka nie mogę dostać się do pracy jest trywialne, foo.ps1:
Write-Host "Num Args:" $args.Length;
foreach ($arg in $args) {
Write-Host "Arg: $arg";
}
Wyniki są zawsze tak:
C:\temp> foo
Num Args: 0
C:\temp> foo a b c d
Num Args: 0
c:\temp>
Myślę, że klucz jest w kroku 6, gdzie przechodzą w parametrach do PowerShell .exe. Daniel mówi, że skojarzył pliki PS1 z PowerShellem, ale to nie przekazuje argumentów bez dodatkowych specyfikacji% 1% *. Zwróć również uwagę, że parametr -File nie jest dostępny w wersji V1. To nowość w V2. –
Dobre złapanie w odniesieniu do parametru -file, o którym zapomniałem. – EBGreen
Muszę zainstalować V2, zanim będę mógł spróbować Twojej sugestii. Dzięki.Kiedy mówisz, że łamiesz podstawową funkcję zabezpieczeń, co to znaczy "to"? Wywołanie skryptu PowerShell z programu Cmd.exe tak, jakby był plikiem .com/.bat/.exe? Przekazywanie parametrów do skryptu? –