Создайте переменную из IP-адреса ответа удаленного пинга - PullRequest
0 голосов
/ 27 мая 2019

Мне нужно иметь возможность пинговать диапазон IP-адресов, а когда я получаю ответ на один из них, затем перехватить этот IP-адрес, чтобы вставить переменную, которую я могу использовать для обновления файла хоста локальных компьютеров.

Цель этого сценария - использовать его для VPN-службы Azure точка-сайт. Удаленный сервер подключается как клиент и получает второй IP-адрес, который изменяется при каждом подключении. Другой сервер может взаимодействовать только с удаленным сервером по этому IP-адресу, но приложение, которое он использует, использует только DNS-имена, поэтому мне нужно будет обновлять файл hosts с 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 Sweep и выводит успех / неудачу каждого IP. Мне нужно захватить IP-адрес успеха и поместить его в переменную

Ответы [ 2 ]

0 голосов
/ 27 мая 2019
$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
    }

}
0 голосов
/ 27 мая 2019

Я предполагаю, что вам нужен только 1-й отвечающий IP-адрес, а не все адреса в диапазоне.[ ухмылка ] вы можете довольно легко превратить это в функцию.Вы также можете отключить подробный вывод, закомментировав 2-ю строку.

$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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...