如何搜索在 TCP 连接中显示超过 4 次的进程的文件路径



我正在尝试编写一个脚本来查看哪些进程正在建立连接,如果它出现超过 4 次,则写出该项目可执行文件的文件路径。 理想情况下,我想排除Outlook,Chrome,SVC Host等内容。 到目前为止,我所拥有的是

$Processes=(Get-NetTCPConnection).owningProcess
$Array= @(
Foreach ($Process in $Processes | Where-Object ($_.Count -gt 4))
{
Get-Process | Select-Object -ExpandProperty Path 
}
)
$array

但这并没有放出任何东西。如果我删除"Where-object子句",它会提供比需要更多的信息。

我会为此使用Group-Object

$Processes = (Get-NetTCPConnection).OwningProcess | Group-Object |
Where-Object {$_.Count -gt 4}
$Array = $Processes | Foreach-Object {
Get-Process -Id $_.Name | Select-Object -ExpandProperty Path
}
$Array

解释:

组对象对属性或值进行分组。输出是具有Name属性的GroupInfo对象的集合,该属性包含分组值。它包含一个Count属性,该属性计算匹配值的数量。将该对象管道输送到Where-Object允许基于Count属性 ($_.Count -gt 4( 的条件。

GroupInfo集合中的每个Name值对应于一个进程 ID。可以使用-Id参数将这些进程 ID 通过管道传输到 Get-Process。Get-Process的输出将是包含Path属性的Process对象。根据进程的不同Path,可能是空的,也可能不是空的。

带有-ExpandProperty的 Select-Object 将返回集合中管道的每个元素的扩展属性。

最新更新