我想编写一个脚本来检查radom IP或主机名,看看端口是否打开。这是我到目前为止所拥有的。脚本名称是checkports。
foreach ($xhost in $computername){
Write-Host $xhost
foreach ($port in $ports) {
$Socket = New-Object System.Net.Sockets.TCPClient
$Connection = $Socket.BeginConnect($xhost,$port,$null,$null)
$Connection.AsyncWaitHandle.WaitOne(5000,$false) | out-null
if ($Connection -eq $true)
{ write-host = "$xhost port $port is open" }
else
{ write-host = "port $port is closed" }
$Socket.EndConnect($Connection)
$Socket.Close()
}
}
我想以下列方式输入值: 。\ checkport'192.186.1.5' 要么 '192.168.1.5','192.168.1.105',192.168.1.110'| checkport
它似乎没有读取IP地址或显示结果。
我想知道是否有人可以指出可以告诉我这个脚本我做错了什么?
答案 0 :(得分:1)
我已经能够使用Boe Prox的'Test-Port'功能进行类似的扫描/报告功能,代码可以在PoshCode上找到:
当我需要测试目录运行状况的端口时,我构建了一个带有'port'和'protocol'列的csv,然后为每个要检查的端口添加了端口号/协议。这在以下脚本中使用:
. .\test-port.ps1
$computersToCheck = get-content .\computers.txt
$portList = Import-CSV .\portList.csv
foreach($entry in $portList)
{
$testPortParams = @{
port = $($entry.port)
}
if( $($entry.protocol) -eq "tcp")
{ $testPortParams += @{ TCP = $true } }
else
{ $testPortParams += @{ UDP = $true } }
$outLog = "portTest-$($entry.port)-$($entry.protocol).txt"
$computersToCheck |
Test-Port @testPortParams |
Sort-Object -Property open,name -descending |
format-table -auto -outVariable status
Add-Content -path $outLog -value $status
}
您当然可以构建一个支线脚本来构建要扫描的IP地址和端口范围。