我需要能够ping通IP地址范围,当我收到一个IP地址答复时,然后捕获该IP地址以放入一个变量,该变量可用于更新本地计算机主机文件。
此脚本的目的是用于点对点Azure VPN服务。远程服务器作为客户端进行连接,并获得了第二个IP地址,该地址在每次连接时都会更改。另一台服务器只能使用此IP地址与远程服务器通信,但是它使用的应用程序仅使用DNS名称,因此每次拨入时,我都需要使用连接服务器IP更新主机文件。
$subnet = "172.16.201.0"
$start = 1
$end = 10
$ping = 1
while ($start -le $end) {
$IP = "172.16.201.$start"
Write-Host "Pinging $IP" -ForegroundColor Cyan
Test-Connection -ComputerName $IP -count 1 -Quiet
$start++
}
到目前为止,以上代码仅进行IP扫描,并输出每个IP的成功/失败。我需要捕获成功IP并将其放入变量
答案 0 :(得分:0)
我假设您只需要第一个响应IP地址,而不是该范围内的所有地址。 [ grin ],您可以轻松地将其转换为功能。您也可以通过注释掉第二行来关闭详细输出。
$Old_VPref = $VerbosePreference
$VerbosePreference = 'Continue'
$Subnet = '192.168.1'
$RangeStart = 60
$RangeEnd = 69
$1stRespondingIPv4 = foreach ($Octet in $RangeStart..$RangeEnd)
{
$IP = $Subnet, $Octet -join '.'
$WV_Msg = 'Testing {0} ...' -f $IP
Write-Verbose -Message $WV_Msg
$Pingable = Test-Connection -ComputerName $IP -Count 1 -Quiet
if ($Pingable)
{
$IP
# the next line stops the foreach loop
break
}
}
''
$1stRespondingIPv4
$VerbosePreference = $Old_VPref
输出...
VERBOSE: Testing 192.168.1.60 ...
VERBOSE: Testing 192.168.1.61 ...
VERBOSE: Testing 192.168.1.62 ...
VERBOSE: Testing 192.168.1.63 ...
VERBOSE: Testing 192.168.1.64 ...
192.168.1.64
答案 1 :(得分:0)
$dns = "domain.com"
$ipAddresses = @(
"172.16.201.0"
"172.16.201.1"
"172.16.201.2"
"172.16.201.3"
"172.16.201.4"
"172.16.201.5"
"172.16.201.6"
"172.16.201.7"
"172.16.201.8"
"172.16.201.9"
"172.16.201.10"
)
foreach($ip in $ipAddresses) {
Write-Host "Pinging $ip" -ForegroundColor Cyan
$ping = Test-Connection -ComputerName "$ip" -count 1 -Quiet
if ($ping) {
Add-Content -Path "C:\Windows\System32\drivers\etc\hosts" -Value "$ip $dns"
Write-Host "The host file was updated with the successful IP and hostname: $ip $dns" -ForegroundColor Cyan
}
}