如何在 Windows Power Shell 中将输入传输到 Wireshark?

如何在 Windows Power Shell 中将输入传输到 Wireshark?

我正在尝试在 Power Shell 中运行以下命令:

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 从未启动,PowerShell 只是打印 tcpdump 正在监听。

如何在 Power Shell 中运行它?

我必须提到,所示的命令在 CMD 中有效。

答案1

您正在尝试通过 PowerShell 管道将一个 DOS 命令传输到另一个 DOS 命令。这实际上不是您可以做的事情。CMD.exe 中的管道与 PowerShell 中的管道不同。

要在 PowerShell 中使用外部 .exe,在大多数情况下,需要特殊考虑并使用 -Arguments 参数来处理任何开关。

详情请见此处:

PowerShell:运行可执行文件

运行可执行文件和调用代码有多种不同的方法。您如何知道该使用哪种方法?以下是方法的概述,并附有示例和一般用法。

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

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

管道意味着您将对象传递给另一个 cmdlet,或将一个 cmdlet 的结果传递给另一个 cmdlet。在管道上,您只能按属性或按值进行匹配。

更明确的详细说明如下:

在 PowerShell 中接受管道输入的两种方法

PowerShell 中的管道是一系列值、表达式、命令或 cmdlet,它们与管道运算符 (|) 组合,用于将一个命令或表达式的结果发送到下一个命令或表达式。这些结果通过管道作为对象或对象属性发送,而不仅仅是来自 Windows 命令控制台 (cmd.exe) 或某些其他非 PowerShell 方法的文本。如果结果由对象数组组成,则这些对象将通过管道逐个发送。

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

这里有两个完全独立的命令/exe。因此,在 PowerShell 控制台主机中,您可以改为执行此操作...

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 

分号告诉 PowerShell,这些是单独的命令,恰好在同一行,因此,请将它们当作在单独的行上执行。当人们在 powershell 控制台主机或 powershell_ise 中敲出一行代码时,您会看到这个分号被大量使用。

答案2

我想说-从这个命令中删除 可能会有帮助 - 在两个地方都是如此。看来你把它留在了某个地方。

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 -

相关内容