PowerShell: ** Lesen ** Eingabe über die Tastatur UND ** Umleiten der Ausgabe ** in eine Variable / Datei

748
Free Man

Entschuldigung, wenn meine Frage trivial ist. Ich bin ein Anfänger bei PowerShell.

Mein Programm (Plink) erwartet eine Antwort von der Tastatur und gibt etwas Ausgabe zurück. Kann die Ausgabe in eine Variable / Datei umgeleitet werden ?

Einzelheiten:

(Ich weise den Befehl selbst aus Gründen der Bequemlichkeit einer Variablen zu.)

Ohne Ausgabeumleitung - Konsolenausgabe ist in Ordnung:

PS C:\Users\user> $mycmd="plink -v -ssh -l $user $myserver vncserver -list" PS C:\Users\user> invoke-expression $mycmd user@server's password: TigerVNC server sessions: X DISPLAY # PROCESS ID :1 26788 PS C:\Users\user> 

Bei der Umleitung der Ausgabe in eine Variable gilt Folgendes:

PS C:\Users\user> $myoutput=invoke-expression "$mycmd"

... warte immer noch in diesem Zustand ==> Ich tippe blind mein passwd ein (passwd-Eingabeaufforderung wird in $ myoutput erfasst)

PS C: \ Benutzer \ Benutzer> $ myoutput

Benutzer @ Server Passwort:

TigerVNC-Server-Sitzungen:

X DISPLAY # PROCESS ID

PS C: \ Benutzer \ Server>

$ myoutput variable Inhalt ist OK Aber die Passwortabfrage wird auch in die Variable umgeleitet!

Mein pbm ist jetzt, wie man die Verwendung umfassend macht: Benutzer können nicht raten, wenn sie ihr passwd :( eingeben (dh wie mit der Passwortabfrage umzugehen ist?)

Remarqs : Verbose- Modus von plink (plink -v ...) wird immer noch an die Konsole ausgegeben, wenn er zu $ ​​myoutput umgeleitet wird

$ myoutput = Aufrufausdruck "$ mycmd"

Looking up host "server" Connecting to xxx.XXX.XXX.XXX port 22 We claim version: SSH-2.0-PuTTY_Release_0.66 Server version: SSH-2.0-OpenSSH_7.4 Using SSH protocol version 2 Doing Diffie-Hellman group exchange Doing Diffie-Hellman key exchange with hash SHA-256 Host key fingerprint is: ssh-rsa 2048 blabklablablablabla Initialised AES-256 SDCTR client->server encryption Initialised HMAC-SHA-256 client->server MAC algorithm Initialised AES-256 SDCTR server->client encryption Initialised HMAC-SHA-256 server->client MAC algorithm Using username "user". Using SSPI from SECUR32.DLL Attempting GSSAPI authentication GSSAPI authentication initialisation failed The target was not recognized. 

Ich gebe mein Passwort hier ein (im Dunkeln)

Sent password Access granted Opening session as main channel Opened main channel Started a shell/command Server sent command exit status 1 Disconnected: All channels closed 
0
(1) Zunächst sollten Sie wissen, dass die Passwortabfrage Teil der Ausgabe von "plink" ist. Sind Sie bereit, die erste Zeile von $ myoutput als Kennwortaufforderung zu behandeln? (2) Da die Kennwortaufforderung Teil der Ausgabe von "plink" ist, sollten Sie davon ausgehen, dass sie in "$ myoutput" *** und nicht in die Konsole geht. *** Wenn Sie "$ myoutput = invoke-expression" eingeben "$ mycmd" `, erhalten Sie eine andere PS-Eingabeaufforderung, oder scheint es nur zu hängen? Wenn es einfach zu hängen scheint, kann es sein, dass es das Kennwort von der Tastatur liest! Versuchen Sie, das Kennwort einzugeben. (Warnung: Es wird möglicherweise auf dem Konsolenbildschirm angezeigt.) G-Man vor 6 Jahren 0
Ich habe meine Anleitung als Antwort neu geschrieben. G-Man vor 6 Jahren 0
Danke G-Man, schöner Hinweis! Tatsächlich hängt es nicht, es wartet. :) PS C: \ Users \ user> $ myoutput = Aufruf-Ausdruck "$ mycmd" `..... wartet immer noch in diesem Status ==> Ich tippe passwd blind (Eingabeaufforderung passwd In $ myoutput erfasst) PS C: \ Users \ user> $ myoutput _user @ server's password: _ TigerVNC-Server-Sitzungen: X ANZEIGE # PROZESS-ID PS C: \ Users \ server` $ myoutput-Inhalt ist in Ordnung, aber mein PBM ist jetzt wie benutzerfreundlicher: Der Benutzer kann beim Eingeben seines Kennworts nicht raten :( Remarqs: Verbose-Modus von plink (plink -v) wird beim Umleiten zu $ ​​myoutput immer noch an die Konsole ausgegeben Free Man vor 6 Jahren 0

1 Antwort auf die Frage

0
G-Man

Die Kennwortabfrage ist Teil der Ausgabe von plink. Sie sollten also davon ausgehen, dass sie in $myoutput die Konsole geht und nicht.   Ich gehe davon aus, dass Sie beim Tippen $myoutput=invoke-expression "$mycmd"einfach hängen bleiben und Ihnen keine weitere PS-Eingabeaufforderung geben. Wahrscheinlich liest er das Passwort stumm von der Tastatur!   Wenn Sie einfach das Kennwort eingeben, funktioniert es. (Warnung: Das Kennwort wird möglicherweise auf dem Konsolenbildschirm angezeigt.)

Wie oben erwähnt, da die Passwortabfrage Teil der Ausgabe von ist plink, geht es in $myoutput. Sie müssen also darauf vorbereitet sein, die erste Zeile $myoutputder Kennwortabfrage zu behandeln.

Genau, das ist jetzt die Frage: Wie soll ich mit dieser ersten Zeile von $ myoutput umgehen, um die Passwort-Eingabeaufforderung anzuzeigen? Vielen Dank, G-Man, Sie machen meine Frage immer weiter Free Man vor 6 Jahren 0