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

How to search for the file path of a a process that shows up in TCP Connections more than 4 times

我正在尝试编写一个脚本来查看哪些进程正在建立连接,如果它出现超过 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 clause",它会提供比需要更多的信息。

我会为此使用 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

解释:

Group-Object 组基于 属性 或值。输出是 GroupInfo 个对象的集合,这些对象具有 Name 属性,其中包含分组值。其中包含一个Count属性,统计匹配值的个数。将该对象输送到 Where-Object 允许基于 Count 属性 ($_.Count -gt 4).

的条件

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

Select-Object-ExpandProperty 将 return 扩展 属性 用于集合中管道的每个元素。