如何搜索在 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-Process。 Get-Process
的输出将是一个包含 Path
属性 的 Process
对象。根据进程 Path
,可能为空也可能不为空。
Select-Object 和 -ExpandProperty
将 return 扩展 属性 用于集合中管道的每个元素。
我正在尝试编写一个脚本来查看哪些进程正在建立连接,如果它出现超过 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-Process。 Get-Process
的输出将是一个包含 Path
属性 的 Process
对象。根据进程 Path
,可能为空也可能不为空。
Select-Object 和 -ExpandProperty
将 return 扩展 属性 用于集合中管道的每个元素。