Tengo el siguiente bucle for dentro del archivo por lotes:
for /l %%x in (1, 1, %k%) do (
set "psCommand=powershell -Command "$pword = read-host 'Enter Password2' -AsSecureString ; $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword) ; [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /f "usebackq delims=" %%p in (`%psCommand%`) do set password=%%p
)
Y siempre me sale el siguiente error: [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)"" fue inesperado en este momento.
Cuando ejecuto el comando fuera del bucle for, funciona.
¿Lo que está mal?
Respuesta1
El problema es que el bucle for cree que el corchete final está dentro del comando de PowerShell.
La posible solución es crear una función y llamarla desde el bucle:
for /l %%x in (1, 1, %k%) do (
call :getPassword password
)
:getPassword
set "psCommand=powershell -Command "$pword = read-host 'Enter Password' -AsSecureString ; ^
$BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /f "usebackq delims=" %%p in (`%psCommand%`) do set password=%%p
EXIT /B 0