Powershell 显示端口连接并仅过滤关闭的端口

Powershell show ports connection and filter only closed ports

我有这张小纸条。

$portnumbers=2000,2001,80,81,21,30300,30301,30302,30303,6000,6001,6002,600
$Ipaddress= "127.0.0.1"
foreach($p in $portnumbers ){
Test-OpenPort -Port $p | Select port,status | Format-Table
}

输出是:

Port Status
---- ------
2000  False

Port Status
---- ------
2001  False

Port Status
---- ------
  80   True

Port Status
---- ------
  81  False


Port Status
---- ------
  21  False


 Port Status
 ---- ------
30300  False

我想以不同的方式得到这个结果,当端口关闭时,所以我想接收一些消息端口“端口号”已关闭 - 红色 当它打开时,端口“portnumber”打开。

然后按摩说“这是关闭的端口:” 喜欢夏天.

你能帮帮我吗?

您可以将 Write-Host-ForegroundColor 参数一起使用:

Write-Host "Port 123 is closed!" -ForgroundColor Red

要select 基于Status 属性 值的不同背景颜色和消息,您可以在循环内使用一个简单的if 语句:

$portnumbers=2000,2001,80,81,21,30300,30301,30302,30303,6000,6001,6002,600
$Ipaddress= "127.0.0.1"
foreach($p in $portnumbers ){
    $portTestResult = Test-OpenPort -Port $p | Select Port,Status
    if($portTestResult.Status){
        Write-Host "Port $p is open" -ForegroundColor Green
    }
    else{
        Write-Host "Port $p is closed" -ForegroundColor Red
    }
}

Mathias 先于我,但如果您还想要关闭端口的摘要,请将循环的关闭结果捕获到一个变量中并随后显示。

类似

$closed = foreach($p in $portnumbers ){
    $result = Test-OpenPort -Port $p
    if ($result.Status) { Write-Host "Port $p is open" }
    else { Write-Host "Port $p is closed" -ForegroundColor Red ; $p}
}

# summary
"`r`nThese ports are closed:`r`n{0}" -f ($closed -join "`r`n")