Получить свой внешний IP-адрес в PowerShell
Общее
Начнём данную инструкция с приведения примера самого скрипта.
$text1 = ' | IP = ' $webClient = New-Object -TypeName System.Net.WebClient While (1 -ne 0) { $text2 = ' дополнительная информация которую можно не указывать, но здесь она нужна для примера' $timestamp = Get-Date -Format('yyyy-MM-dd HH:mm:ss') $timestamp + $text1 + $webClient.DownloadString('http://myexternalip.com/raw').Trim() + $text2 Start-Sleep -s 15 }
Разбор
Теперь разберём всё в подробностях.
Первая переменная $text1 в которой задаём текст для более красивого отображения нашего IP при выводе на экран
Следующая переменная $webClient - в данном случае даёт команду powershell, подключиться к указанному сайту и получить с него необходимые нам данные
While (1 -ne 0) задаёт цикл. Интерпретировать можно так: "Пока 1 не станет 0, то выполнять {то что идёт дальше}", а единица, в нашем случае, ни когда не станет нолем.
Далее идёт цикл, который будет выполняться бесконечно исходя из вышеприведённого условия.
Переменная $text2 - в ней задаём любой текст, если нужен. В моём случае, я задал текст в виде IP адреса как эталон, чтобы мне было легче понимать, переключился ли канал связи на резервный, у которого соответственно другой IP-адрес, или же я подключен к основному каналу связи.
$timestamp - в эту переменную будет помещаться текущая дата и время. Помещена в цикл, дабы у нас отображалось текущее время. Если вынести данную переменную за цикл, то время не будет обновляться, и будет отображаться постоянно то время, которое было при запуске скрипта.
Далее все переменные помещаем в одну строчку. Тут стоит отметить несколько моментов:
- Ссылка в скобках указывает на страницу, на которой будет выводится наш внешний IP-адрес в виде строки.
- При выводе нашего IP-адреса, в конце строки мы получали перенос строки, что очень портило вид при добавлении переменной $text2. Параметр Trim() удаляет этот перенос, что приводит к очень красивому виду в итоге.
Start-Sleep -s 15 - задаем в секундах паузу перед очередным выполнением цикла. Желательно не указывать меньшее количество секунд, т.к. рискуем быть заблокированными на сайте.
Итог получаем такой (по понятным причинам IP адрес частично замазан):
Данный скрипт можно комбинировать.
Например можно запустить несколько окон с пингами за 1 раз (ну мало ли для каких целей это нужно):
$Ping1 = '/c ping -t ya.ru' $Ping2 = '/c ping -t google.com' $Ping3 = '/c ping -t localhost' $TimeIP = { $webClient = New-Object -TypeName System.Net.WebClient While (1 -ne 0) { $text2 = ' | Sample = 000.000.30.253' $timestamp = Get-Date -Format('yyyy-MM-dd HH:mm:ss') $ip = $webClient.DownloadString('http://myexternalip.com/raw').Trim() + $text2 $timestamp + ' | IP = ' + $ip Start-Sleep -s 15}} #Запускаем пинг для каждого в новом окне консоли Start-Process powershell -ArgumentList $Ping1 Start-Process powershell -ArgumentList $Ping2 Start-Process powershell -ArgumentList $Ping3 #Запускаем вывод даты и внешнего IP в новом окне Start-Process PowerShell -ArgumentList $TimeIP
В комментариях в данном скрипте всё описано.
И это только малая часть того, что можно сделать.