Durante anos, usei o cmd/DOS/Windows
shell e passei argumentos de linha de comando para arquivos em lote. Por exemplo, eu tenho um arquivo, zuzu.bat
e nele, o acesso I %1
, %2
etc. Agora, eu quero fazer o mesmo quando eu chamar um PowerShell
roteiro when I am in a Cmd.exe shell
. Eu tenho um script xuxu.ps1
(e adicionei PS1 à minha variável PATHEXT e os arquivos PS1 associados ao PowerShell). Mas não importa o que eu faça, parece que não consigo obter nada da $args
variável. Sempre tem comprimento 0.
Se eu estiver em um PowerShell
shell, em vez de cmd.exe
, ele funciona (é claro). Mas ainda não estou confortável o suficiente para viver no ambiente do PowerShell em tempo integral. Eu não quero digitar powershell.exe -command xuxu.ps1 p1 p2 p3 p4
. Eu quero digitar xuxu p1 p2 p3 p4
.
Isso é possível e, em caso afirmativo, como?
O exemplo que não consigo fazer é trivial, foo.ps1:
Write-Host "Num Args:" $args.Length;
foreach ($arg in $args) {
Write-Host "Arg: $arg";
}
Os resultados são sempre assim:
C:\temp> foo
Num Args: 0
C:\temp> foo a b c d
Num Args: 0
c:\temp>
xuxu p1 p2 p3 p4
").