You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PowerShell批量检查389、53、135等多个端口的状态?

多端口开放状态检查的PowerShell脚本实现

问题描述

我之前用PowerShell写了单个端口的开放检查脚本,代码如下:

$Ipaddress= "xx.xx.xx.xx"
$Port= "389"

$t = New-Object Net.Sockets.TcpClient
$t.Connect($Ipaddress,$Port)
    if($t.Connected)
    {
        "Port $Port is operational"
    }
    else
    {
        "Port $Port is closed, You may need to contact your IT team to open it. "
    }

现在需要检查389、53、135等多个端口的状态,期望输出格式为:

Port 389 is operational;Port 53 is operational;Port 135 is operational

请问该如何实现?

解决方案

你可以通过定义端口数组循环遍历检查,最后拼接结果来实现需求,优化后的脚本如下:

$Ipaddress = "xx.xx.xx.xx"
# 定义待检查的端口集合,可根据需要增减端口
$Ports = @(389, 53, 135)
$checkResults = @()

foreach ($Port in $Ports) {
    $tcpClient = New-Object Net.Sockets.TcpClient
    try {
        # 设置1秒连接超时,避免脚本长时间阻塞
        $connectSuccess = $tcpClient.ConnectAsync($Ipaddress, $Port).Wait(1000)
        if ($tcpClient.Connected) {
            $checkResults += "Port $Port is operational"
        } else {
            $checkResults += "Port $Port is closed, You may need to contact your IT team to open it."
        }
    } catch {
        # 捕获连接异常,统一标记为端口关闭
        $checkResults += "Port $Port is closed, You may need to contact your IT team to open it."
    } finally {
        # 释放TcpClient资源,避免内存占用
        $tcpClient.Dispose()
    }
}

# 将所有检查结果用分号拼接后输出
$checkResults -join ";"

关键优化点:

  • 使用**数组$Ports**管理需要检查的端口,添加或移除端口只需修改数组内容
  • 改用ConnectAsync+Wait设置超时时间,避免单个端口连接超时导致脚本卡住
  • 增加try/catch/finally块:处理连接异常,同时确保每次检查后释放TcpClient资源
  • 最后通过-join ";"将所有结果拼接成你需要的格式输出

内容的提问来源于stack exchange,提问作者Arbelac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 19:00:08