Командлет Invoke-WebRequest можно использовать для обращения к HTTP/HTTPS/FTP ресурсам прямо из консоли PowerShell. С помощью этой команды вы можете отправить HTTP запросы, скачивать файлы с любых веб-сайтов, парсить HTML веб-страницы, заполнять и отправлять веб-формы. В этой статье мы рассмотрим несколько базовых примеров использования командлета Invoke-WebRequest для работы с веб-сервисами.
Командлет Invoke-WebRequest доступен в Windows начиная с версии PowerShell 3.0. Командлет Invoke-WebRequest позволяет отправить HTTP запрос с методом GET к указанной веб странице и получить ответ от севера.
iwk
и wget
. Выполните следующую команду:
Invoke-WebRequest -Uri "https://remontka.com"
Команда загрузила страницу и отобразила ее содержимое в консоли PowerShell. Возвращенный ответ представляет собой не просто HTML код страницы. Командлет Invoke-WebRequest возвращает объект типа HtmlWebResponseObjec t . Такой объект представляет собой набор коллекции форм, ссылок, изображений и других важных элементов HTML документа. Посмотрим все свойства данного объекта:
$WebResponseObj = Invoke-WebRequest -Uri "https://remontka.com"
$WebResponseObj| Get-Member
Чтобы получить сырой HTML код веб страницы, который содержится в данном объекте, выполните:
$WebResponseObj.content
Вы можете вывести HTML код страницы вместе с HTTP заголовками, которые вернул веб сервер:
$WebResponseObj.rawcontent
Можно получить только код ответа веб-сервера и HTTP заголовки HTML страницы:
$WebResponseObj.StatusCode
$WebResponseObj.Headers
Как вы видите, веб сервер вернул ответ 200 , т.е. запрос выполнен успешно и веб сервер доступен и работает корректно.
Key Value_x000D_--- -----_x000D_Transfer-Encoding chunked_x000D_Connection keep-alive_x000D_Vary Accept-Encoding,Cookie_x000D_Strict-Transport-Security max-age=31536000;_x000D_Cache-Control max-age=3, must-revalidate_x000D_Content-Type text/html; charset=UTF-8_x000D_Date Mon, 11 Jul 2022 08:18:05 GMT_x000D_Server nginx/1.20.2_x000D_X-Powered-By PHP/5.6.40
Чтобы получить время последней модификации веб-страницы:
$WebResponseObj.ParsedHtml | Select lastModified
Вы можете указать строку User Agent при подключении к веб-ресурсу. В PowerShell есть набор встроенных строк User Agent:
invoke-webRequest -Uri $uri -userAgent ([Microsoft.PowerShell.Commands.PSUserAgent]::Chrome)
Список доступных агентов можно вывести так:
[Microsoft.PowerShell.Commands.PSUserAgent].GetProperties() | Select-Object Name, @{n='UserAgent';e={ [Microsoft.PowerShell.Commands.PSUserAgent]::$($_.Name) }}
Либо вы можете задать собственную строку:
Invoke-WebRequest -Uri $uri -UserAgent 'MyApplication/1.1'
Для доступа к некоторым веб ресурсам нужно выполнить аутентификацию. Вы можете использовать различные типы аутентификации совмести с командлетом Invoke-WebRequest (базовую, NTLM, Kerberos или аутентификацию по сертификату).
Для выполнения базовой аутентификации (Basic auth, аутентификация по имени и паролю зашифрованным в base64) сначала нужно получить имя пользователя и пароль:
$cred = Get-Credential
wget -Uri 'https://site.com' -Credential $cred
Для использования текущих учетных данных пользователя Windows для выполнения NTLM или Kerberos аутентификации, используйте параметр UseDefaultCredentials:
Invoke-WebRequest 'http://site.com' -UseDefaultCredentials
Для аутентификации по сертификату, нужно указать его отпечаток:
Invoke-WebRequest 'http://site.com' -CertificateThumbprint xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Вы можете использовать современную Bearer/OAuth аутентификацию с помощью токена в ваших PowerShell скриптах.
$Token = "123123123123123123123123123123123" | ConvertTo-SecureString -AsPlainText –Force
$Params = @{
Uri = "https://yoursite.com"
Authentication = "Bearer"
Token = $Token }
Invoke-RestMethod @Params
Командлет Invoke-WebRequest позволяет довольно быстро и удобно парсить содержимое любых веб-страниц. При обработке HTML страницы из ее содержимого формируются коллекции ссылок (links), веб-форм (forms), изображений (images), скриптов (scripts) и т.д.
Рассмотрим, как обратиться к конкретным объектам на веб-странице. Например, мы хотим получить список всех исходящих ссылок (объекты HREF) на полученной веб-странице:
$SiteAdress = "http://remontka.com"
$HttpContent = Invoke-WebRequest -URI $SiteAdress
$HttpContent.Links | Foreach {$_.href }
Чтобы получить и сам текст ссылки (содержится в элементе InnerText), можно воспользоваться такой конструкцией:
$HttpContent.Links | fl innerText, href
Можно выбрать только ссылки с определенным CSS классом:
$HttpContent.Links | Where-Object {$_.class -eq "page-numbers"} | fl innerText, href
Или определенным текстом в url:
$HttpContent.Links | Where-Object {$_.href -like "*exchange*"} | fl innerText,href
Теперь рассмотрим, как получить все изображения на данной странице:
$Img.Images
Сформируем коллекцию из полных url путей к используемым изображениям:
$images = $Img.Images | select src
Инициализируем новый экземпляр класса WebClient:
$wc = New-Object System.Net.WebClient
И скачаем все изображения со страницы (с оригинальными именами) в каталог c:tools:
$images | foreach { $wc.DownloadFile( $_.src, ("c:tools"+[io.path]::GetFileName($_.src) ) ) }
Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…
В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…
Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…
Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…
Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…
В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…