从远程Ping响应IP地址创建变量

时间:2019-05-27 03:51:58

标签: powershell

我需要能够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并将其放入变量

2 个答案:

答案 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
    }

}