Ich versuche ein Powershell-Skript zu erstellen, das ein Passwort aus dem Credential Manager in die Passworteingabe eines Python-Skripts eingibt. In this older post fand ich einige Informationen darüber, wie man einen Prozess mit PowerShell startet und dann etwas Text in die STDIN eingibt, aber aus irgendeinem Grund funktioniert diese Methode nicht für mich. Ich führe das Python-Skript aus und es wartet nur auf eine Passworteingabe im Powershell-Kommandozeilenfenster.Senden von Text an das Passwort STDIN des Python-Prozesses mit Powershell
Dies ist der Code und es führt das Python-Skript korrekt aus, das nach einem Passwort fragt, aber nichts passiert danach. Ich kann das Passwort manuell eingeben und auf Enter klicken, aber das ist natürlich nicht der Zweck. Dann kann ich das Python-Skript einfach selbst ausführen.
$executingScriptDirectory = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
. $executingScriptDirectory\CredMan.ps1
$launcherScript = Join-Path $executingScriptDirectory "launcher.py"
$credTarget = 'some-target-in-credential-manager'
Write-Host "Loading password from Windows credmgr entry '$credTarget' ..."
[object] $cred = Read-Creds $credTarget
if ($cred -eq $null)
{
Write-Host ("No such credential found: {0}" -f $credTarget)
Exit 2
}
# Found the credential; grab the password and boot up the launcher
[string] $password = $cred.CredentialBlob
Write-Host "Launching $launcherScript ..."
Write-Host "Password: '$password'"
$psi = New-Object System.Diagnostics.ProcessStartInfo;
$psi.Arguments = "$launcherScript "
$psi.FileName = "python.exe";
$psi.UseShellExecute = $false; # start the process from its own executable file
$psi.RedirectStandardInput = $true; # enable the process to read from stdin
$p = [System.Diagnostics.Process]::Start($psi);
Start-Sleep -s 2 # wait 2 seconds so that the process can be up and running
$p.StandardInput.WriteLine($password);
$p.WaitForExit()
Was könnte das Problem sein? Das Passwort wird im Python-Skript mit dieser Zeile abgefragt und verwendet das getpass-Modul.
password = getpass.getpass("Enter your password: ")
Vielen Dank für Ihre Hilfe.
Wenn Sie weitere Informationen benötigen, einfach anfordern :).
Wie lautet die Ausgabe des Write-Host-Aufrufs? Siehst du das Passwort, das du zu diesem Zeitpunkt erwartest? Ich bin überrascht, dass Sie CredentialBlob einfach als Zeichenfolge und das ist das Passwort. –