Windows-Batch-PowerShell-Befehl in FOR-Schleife funktioniert nicht

Windows-Batch-PowerShell-Befehl in FOR-Schleife funktioniert nicht

Ich habe die folgende For-Schleife in der Batchdatei:

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

)

Und ich erhalte immer die folgende Fehlermeldung: [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)"" war zu diesem Zeitpunkt unerwartet.

Wenn ich den Befehl außerhalb der For-Schleife ausführe, funktioniert es.

Was ist falsch?

Antwort1

Das Problem besteht darin, dass die For-Schleife davon ausgeht, dass sich die Endklammer innerhalb des Powershell-Befehls befindet.

Die mögliche Lösung besteht darin, eine Funktion zu erstellen und sie aus der Schleife aufzurufen:

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

verwandte Informationen