Получить свой внешний IP-адрес в PowerShell

Материал из Wikipedia PC-SUPP
Перейти к: навигация, поиск
Scr posh.png PowerShell. Получить свой внешний 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 - в эту переменную будет помещаться текущая дата и время. Помещена в цикл, дабы у нас отображалось текущее время. Если вынести данную переменную за цикл, то время не будет обновляться, и будет отображаться постоянно то время, которое было при запуске скрипта.

Далее все переменные помещаем в одну строчку. Тут стоит отметить несколько моментов:

  1. Ссылка в скобках указывает на страницу, на которой будет выводится наш внешний IP-адрес в виде строки.
  2. При выводе нашего IP-адреса, в конце строки мы получали перенос строки, что очень портило вид при добавлении переменной $text2. Параметр Trim() удаляет этот перенос, что приводит к очень красивому виду в итоге.

Start-Sleep -s 15 - задаем в секундах паузу перед очередным выполнением цикла. Желательно не указывать меньшее количество секунд, т.к. рискуем быть заблокированными на сайте.

Итог получаем такой (по понятным причинам IP адрес частично замазан):

Scr-getExtIP.png


Данный скрипт можно комбинировать.

Например можно запустить несколько окон с пингами за 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

В комментариях в данном скрипте всё описано.
И это только малая часть того, что можно сделать.