El comando PowerShell por lotes de Windows dentro del bucle FOR no funciona

El comando PowerShell por lotes de Windows dentro del bucle FOR no funciona

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

información relacionada