方案1
定义IP地址和端口列表
$ips = @(
"192.168.1.75",
"192.168.1.76",
)
$ports = @(1433,80)
$timeout = 500 # 毫秒
创建结果数组
$results = @()
foreach (ip in ips) {
foreach (port in ports) {
try {
$client = New-Object System.Net.Sockets.TcpClient
connect = client.BeginConnect(ip, port, null, null)
wait = connect.AsyncWaitHandle.WaitOne($timeout) # 等待连接,超时为500毫秒
if ($wait) {
client.EndConnect(connect) # 完成连接
$status = "Open"
} else {
$status = "Timeout" # 超时视为关闭或不可达
}
$client.Close() # 关闭客户端连接
$results += [PSCustomObject]@{
IP = $ip
Port = $port
Status = $status
}
} catch {
$results += [PSCustomObject]@{
IP = $ip
Port = $port
Status = "Error"
ErrorMessage = $_.Exception.Message
}
}
}
}
输出结果
$results | Format-Table -AutoSize
方案2
$computers = "192.168.1.75 # 要测试的计算机列表
$ports = "1433" # 要测试的端口列表
foreach (computer in computers) {
foreach (port in ports) {
result = Test-NetConnection -ComputerName computer -Port $port -InformationLevel Quiet
if (result -eq true) {
Write-Host "computer : Port port is open" -ForegroundColor Green
} else {
Write-Host "computer : Port port is closed" -ForegroundColor Red
}
}
}