我们如何使用 powershell 检查给定主机是否有任何开放端口?
Test-NetConnection 可以循环使用,但是有没有更快、更实用的方法来检查大范围的端口?
Test-NetConnection ###.###.###.### -Port ##
Test-NetConnection
支持一次仅定位一台计算机和端口。
在PowerShell(核心)7+中,您可以使用
ForEach-Object
-Parallel
并行线程瞄准多个端口以加速操作;例如:
, 21 + 80..88 + 8080 |
ForEach-Object -ThrottleLimit 32 -Parallel {
Test-NetConnection 127.0.0.1 -Port $_
}
, 21 + 80..88 + 8080
是端口号的示例数组,并显示将单个数字与 range (..
) 端口号混合; ,
之前的21
对于确保单个数字包装在数组中是必要的,这确保+
执行数组串联。-ThrottleLimit
确定一次可以有多少个线程处于活动状态(默认为 5
);虽然通常不这样做是有道理的
超过可用 CPU 核心的数量,在network绑定操作中(例如当前的情况),该数量可能会更高,
32
是 remoting 操作中的默认设置(使用 Invoke-Command -ComputerName
时)。