Wie kann ich die Eingabe in Windows Power Shell an Wireshark übergeben?

790
Mohammed Noureldin

Ich versuche, den folgenden Befehl in Power Shell auszuführen:

C:\Users\mne\Desktop\plink.exe -ssh -pw abc root@myhost "tcpdump -w - -U -i vethf90673c 'port 5000'" | &"C:\Program Files\Wireshark\Wireshark.exe" -k -i - 

Wireshark startet jedoch nie, PowerShell druckt nur, dass tcpdump zuhört.

Wie kann ich es in Power Shell ausführen?

Ich muss erwähnen, dass der Befehl wie gezeigt in CMD funktioniert.

0
Die Antwort hier https://osqa-ask.wireshark.org/questions/23609/remote-capture-via-ssh-and-pipe verwendet kein `&` nach der Pipe, probieren Sie es aus. aber das ist wahrscheinlich cygwin style. Versuchen Sie Folgendes: `plink.exe -ssh -pw abc root @ myhost" tcpdump -w - -U -i vethf90673c 'port 5000' "*> & 1 | "C: \ Programme \ Wireshark \ Wireshark.exe" -k -i -` SimonS vor 6 Jahren 0
@ SimonS, nein, es funktioniert nicht. Mohammed Noureldin vor 6 Jahren 0
Sie versuchen, einen DOS-Befehl an einen anderen DOS-Befehl in der PowerShell-Pipeline weiterzuleiten. Das ist wirklich keine Sache, die Sie tun können. postanote vor 6 Jahren 0

2 Antworten auf die Frage

1
postanote

Sie versuchen, einen DOS-Befehl an einen anderen DOS-Befehl in der PowerShell-Pipeline weiterzuleiten. Das ist wirklich keine Sache, die Sie tun können. Die Pipe in CMD.exe stimmt nicht mit der Pipe in PowerShell überein.

Für die Verwendung einer externen .exe-Datei in PowerShell ist in den meisten Fällen eine besondere Überlegung und die Verwendung des Parameters -Arguments erforderlich, um alle Schalter zu behandeln.

Details finden Sie hier:

PowerShell: Ausführen von ausführbaren Dateien

Es gibt verschiedene Methoden zum Ausführen von ausführbaren Dateien sowie zum Aufrufen von Code. Woher wissen Sie, welche Sie für den Job verwenden sollen? Hier ist eine Übersicht der Methoden mit Beispielen und allgemeiner Verwendung.

https://social.technet.microsoft.com/wiki/contents/articles/7703.powershell-running-executables.aspx

http://edgylogic.com/blog/powershell-and-external-commands-done-right

Piping bedeutet, dass Sie ein anderes Cmdlet übergeben und ein anderes Objekt oder die Ergebnisse eines Cmdlets an ein anderes Cmdlet ablehnen. In der Pipeline können Sie nur nach Eigenschaft oder nach Wert abgleichen.

Noch genauer hier:

Zwei Möglichkeiten, Pipeline-Eingaben in PowerShell zu akzeptieren

Eine Pipeline in PowerShell besteht aus einer Reihe von Werten, Ausdrücken, Befehlen oder Cmdlets, die mit dem Pipe-Operator (|) kombiniert werden, um die Ergebnisse eines Befehls oder Ausdrucks an den nächsten zu senden. Diese Ergebnisse werden als Objekte oder Objekteigenschaften durch die Pipeline gesendet, nicht nur als Text von der Windows-Befehlskonsole (cmd.exe) oder bestimmten anderen Nicht-PowerShell-Methoden. Wenn die Ergebnisse aus einem Array von Objekten bestehen, werden diese Objekte nacheinander durch die Pipeline gesendet.

https://blogs.technet.microsoft.com/askpfeplat/2016/11/21/two-ways-to-accept-pipeline-input-in-powershell

Was Sie hier haben, sind zwei völlig getrennte Befehle. Im PowerShell-Konsolen-Host würden Sie dies stattdessen tun ...

C:\Users\mne\Desktop\plink.exe -ssh -pw abc root@myhost "tcpdump -w - -U -i vethf90673c 'port 5000'" ; C:\Program Files\Wireshark\Wireshark.exe -k -i 

Dieses Semikolon teilt PowerShell mit, dass dies separate Befehle sind, die sich zufällig in derselben Zeile befinden. Führen Sie sie also so aus, als wären sie in separaten Zeilen. Dieser Semikolon wird häufig verwendet, wenn Leute im Powershell-Konsolen-Host oder in der Powershell_ise einen Liner ausklammern.

0
Modelmat

Ich würde sagen, dass das Entfernen des -Befehls von diesem Befehl helfen könnte - an beiden Stellen. Es scheint, als hätten Sie es irgendwo gelassen.

C:\Users\mne\Desktop\plink.exe -ssh -pw abc root@myhost "tcpdump -w - -U -i vethf90673c 'port 5000'" | "C:\Program Files\Wireshark\Wireshark.exe" -k -i -

Nein, es ist Teil der Befehlssyntax. Mohammed Noureldin vor 6 Jahren 0