Passando vários argumentos para um script do PowerShell via script em lote
Você pode usar algo como o método abaixo, já que consegui fazer o script em lote passar argumentos para o script PS usando essa sintaxe.
Ele precisa construir um script PS dinâmico superior (A rotina :DynamicPSScriptBuild
) e ele o excluirá se já existir e também o excluirá assim que terminar de processar todas as execuções.
Eu tive que usar o PS -file
em vez do -iex
(a razão pela qual o arquivo PS1 precisa existir e a construção dinâmica dele), mas funciona como esperado quando testei e passou os argumentos aplicáveis para o script um por um com cada argumento sendo uma iteração de execução de script PS.
Eu não tinha certeza se você precisava de todos os argumentos passados para o script PS um após o outro ou sendo passado de uma só vez ou como a lógica do script PS lida com vários argumentos passados para ela durante a mesma execução, mas talvez isso forneça detalhes suficientes para ajustar de acordo.
A parte do script abaixo que tem FOR %%A IN ("Hello I'm PowerShell!", "Goodbye I'm Leaving", "Come with it and get some more"
será a parte que você coloca cada string para usar como um argumento a ser passado para o script PS, um após o outro, por iteração de execução, em que cada valor de string está entre aspas duplas e separados por vírgulas.
Exemplo de script
(convém ativar @ECHO OFF
e remover o comando pause
, pois usei esses para ajudar a mostrar tudo por iteração para confirmar todos funcionou como esperado)
<# :
@ECHO ON
SETLOCAL
:DynamicPSScriptBuild
SET PSScript=%~f0.ps1
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
ECHO param($a) >>"%PSScript%"
ECHO Write-Host "$a" >>"%PSScript%"
:SetPSScriptArguments
FOR %%A IN ( "Hello I'm PowerShell!",
"Goodbye I'm Leaving",
"Come with it and get some more"
) DO CALL :Powershell "%%~A"
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
GOTO :EOF
:PowerShell
PowerShell -NoProfile -ExecutionPolicy Bypass -file "%PSScript%" "%~1"
pause
GOTO :EOF