Erstellen Sie einen Prozess unter Verwendung von Plink in der PowerShell und dem schicken von Befehlen an es

Ich muss in der Lage sein, erstellen Sie einen Prozess auf einem remote-Gerät aus und senden Befehle kommen, um es mit einem PowerShell-Skript. Ich muss es tun, weil diese Art bekomme ich aufgefordert, wenn ich mit einem Befehl. Ich habe versucht, um herauszufinden, wie dies zu tun ist durch die Verwendung von Google-Suche und den folgenden link: http://tartarus.org/~simon/Kitt-snapshots/htmldoc/Chapter7.html#plink. Von diesem link habe ich realisiert, das eine Datei mit einer Liste von Befehlen, die in Plink funktioniert nicht aus folgenden Gründen (kopiert aus diesem link):

Alle nicht-interaktiven Befehl, Sie könnte sinnvollerweise auf dem server ausgeführt
Befehlszeile, die Sie ausführen können in eine batch-Datei mit Plink auf diese Weise.

Heißt es "non-interactive-command", das ist, was ich verwende. Ich habe auch versucht, mit einer Datei mit einer Liste von Befehlen, die sowieso, aber es hat nicht mein problem zu lösen, weil ich im Grunde muss einen Befehl geben, warten, und dann geben Sie ein weiteres, wenn es fordert mich. Dies ist, was ich in der PuTTY-FAQ und im Grunde, was ich gerne ausprobieren würde:

Wahrscheinlich Ihre beste Wette ist die Verwendung von Plink, die command-line-Verbindung
tool. Wenn Sie können, starten Sie Plink als eine zweite Windows-Prozess, und vereinbaren Sie
für Ihren primären Prozess, um in der Lage sein, Daten zu senden, um das Plink-Prozess,
und empfangen von Daten aus es durch Rohre, dann sollten Sie in der Lage sein zu
make-SSH-verbindungen aus Ihrem Programm. Dies ist, was die CVS für Windows, zum Beispiel.

EDIT: auf der Grundlage der Antwort von user2460798, habe ich ausprobiert, die Lösung unten. Ich bin der Hoffnung, verwenden Sie PuTTY und in der Lage sein, um Befehle zu senden, um es auf diese Weise. Mein problem ist jetzt, dass ich nicht weiß, wie das senden von Befehlen an die PuTTY-Sitzung wird eröffnet. Also im Grunde ist dieser code öffnet eine PuTTY Sitzung und versucht, schreiben, die "ls" - Befehl, um es, aber es passiert nichts. Ich habe keine Ahnung, wo die "ls" - text geht.

$procInfo = New-Object Diagnostics.ProcessStartInfo
$procInfo.RedirectStandardOutput=$true
$procInfo.RedirectStandardInput=$true
$procInfo.RedirectStandardError=$true
$procInfo.FileName="putty.exe"
$procInfo.Arguments="-ssh -pw <password> <username>@<device>"
$procInfo.UseShellExecute=$false
$p=[diagnostics.process]::start($procInfo)
sleep -Milliseconds 3000
$p.StandardInput.WriteLine("ls")
  • Zeig bitte deinen code und die Fehlermeldung(en) Sie erhalten haben.
  • Ok, habe ich.
  • plink nicht von STDIN Lesen. Sie müssen den Befehl ausführen, entweder mit einem Befehl string (plink user@host "foo; bar; baz" oder mit einer Kommando-Datei plink user@host -m commands.sh.
  • Eigentlich plink liest von stdin und senden Sie es an den stdin des Prozesses in der SSH-Sitzung. Und es leitet auch stdout aus dem remote-system zu plink stdout. Ebenso für stderr. Dies ist eine Zeile aus einem Skript habe ich in der Produktion für ein paar Jahre: ` $received = $textToSign| plink $fwSupportAcct@$signingHost -pw $fwsupport_password 2>&1 `
  • im code-snippet in Ihrem Beitrag <Passwort>, <username> und <device> alle müssen eingereicht werden mit Ihren Werten.
  • Sie nach Links aus einen großen Teil des Skripts, dass ich Sie geworben. Insbesondere $p.StandardOutput.read( $outBuf, 0, 4096) ist, wo das Lesen der Ausgabe von SSH-Sitzung Auftritt. Aber der rest des Skripts, die Sie Links ist auch wichtig, wenn Sie möchten, dass Ihre PS-Skript in der Lage sein, um die Interaktion mit dem remote-Gerät.
  • Ich stehe korrigiert.
  • Ich habe einen Fehler gemacht in dem, was ich oben sagte. Während stdin, stdout und stderr werden alle umgeleitet plink, die Sie noch haben, um ihm etwas zu führen. In meinem Kommentar oben habe ich vergessen, die hatte ich ein python-script ausgeführt .bashrc, die Eingaben akzeptiert, wenn fwSupportAcct anmeldet - also in diesem Fall ich didn ' T brauchen, um einen Befehl anzugeben. Aber im Normalfall, Sie würde. Aber Sie können dies tun, zum Beispiel: "echo test 1 2 3; ls /bin`n"|plink $fwSupportAcct@$signingHost -pw $fwsupport_password sh 2>&1 Dann sh akzeptieren stdin aus, was geleitet, in plink.

InformationsquelleAutor Programmer_D | 2013-11-24
Schreibe einen Kommentar