Powershell изтеглете файл от http. Как да изтеглите файл на вашия компютър с помощта на PowerShell? Как да изтеглите файл чрез HTTP с помощта на PowerShell

Нека поговорим отново за прекрасния инструмент PowerShell. Този интерфейсЩе прегледам на Windows 10. За тези, които не знаят, ето го.

И така, PowerShell може да реализира много различни функции и в много отношения превъзхожда обикновения команден ред. със сигурност този инструментможе също така да извършва, например, деинсталиране на приложения, както с командна линия. Но със използвайки PowerShellможем да изтеглим файл от интернет където пожелаем, например в Dropbox. Ако се интересувате как да изтеглите файл на вашия компютър с помощта на PowerShell, продължете да четете.

Как да изтеглите файл на вашия компютър с помощта на PowerShell?

IN в този пример, имаме нужда от тази команда:

Както можете да видите, всичко е просто. Вместо "Линк за изтегляне"предоставяме връзка към необходим файл, който трябва да се копира. Не забравяйте, че командата трябва да бъде точно такава, не пропускайте необходимите кавички и скоби. IN „Пътят до файла“посочваме къде ще запазим нашия файл, не забравяйте да добавите името на файла и неговото разширение в края.

Така получаваме следната команда като пример:

Ако искате да качите файл в Dropbox или друга подобна услуга, тогава, разбира се, ще трябва да влезете в тази услуга за това, ние ще вмъкнем друга между вече дадените команди:

Уверете се, че имате директна връзка към изтегления файл, в противен случай може да не успеете. И това е всичко, беше, така да се каже, кратка екскурзиявъзможности Помощни програми на PowerShell, ще имаме много повече статии за този инструмент.

Актуализирано: 27 ноември 2017 г Публикувана: 05/06/2017

За да изтеглите файлове от интернет, Powershell предоставя метода DownloadFile, който трябва да предаде два аргумента – какво изтегляме и откъде.

Изтегляне чрез HTTP или HTTPS

Свали файл

Примерен скрипт:

$download_url = "http://download_ahyware/file1.zip"

* в този пример ще изтеглим файла http://download_ahyware/file1.zipи го поставете на компютъра си по пътя C:\Изтегляния\file1.zip.

Invoke-WebRequest

Тази команда е предназначена да зарежда съдържанието на html документ. Можете също да го използвате за изтегляне на файлове:

Invoke-WebRequest -URI https://www..zip -outfile c:\temp\winsetupfromusb.zip

* Където URI— изходен път (какво изтегляме); outfile— дестинационен път (където изтегляме).

За удобство можете да използвате командата wget - по същество това е псевдоним на Invoke-WebRequest.

Изтеглете от FTP

Принципът на изтегляне на файлове от FTP сървър е същият, с изключение на това, че първо се изисква разрешение.

Примерен скрипт:

$download_url = "ftp://download_ahyware/file1.zip"
$local_path = "C:\Downloads\file1.zip"
$user = "myFtpUser"
$pass = "myPassword123"

$WebClient = Нов обект System.Net.WebClient
$WebClient.Credentials = Нов обект System.Net.NetworkCredential($user, $pass)
$WebClient.DownloadFile($download_url, $local_path)

Разопаковане на архива

Най-често файловете в интернет се съхраняват в компресиран вид. Следователно, след като изтеглите файла, има нужда да го разопаковате. За да направите това, можете да използвате следната команда в Powershell:

Expand-Archive $archive_file.zip -DestinationPath C:\Unzip\

Въпреки това, не всички версии на Powershell поддържат cmdlet Expand-Archive. В този случай можете да се обадите приложение на трета страна, например 7-цип. Примерен скрипт:

set-alias sz "$env:ProgramFiles\7-Zip\7z.exe"
sz x -r C:\Downloads\file1.zip -oC:\Разархивирайте\

Възможни грешки

Изключение при извикване на файл за изтегляне с 2 аргумента изключение по време на заявка от уеб клиент

Причина: като правило пътят за изтегляне е посочен неправилно или няма права върху папката, в която трябва да отиде изтеглянето.

Решение: проверете пътя или опитайте да посочите друг.

PowerShell версия 3.0 въведе възможност за директен достъп и работа с HTML уеб страницив интернета. За тази цел е разработен специален cmdlet. Invoke-WebRequest. Тази кратка команда ви позволява да реализирате много сценарии: от възможността да изтеглите/качите файл от/към всеки уебсайт чрез HTTP/HTTPS/FTP до възможностите HTML разборстраници, следене на състоянието на уеб сървъри, попълване и изпращане на уеб формуляри. Като цяло новият cmdlet предоставя всички необходими методи за навигация в DOM дървото HTML документ. В тази статия ще разгледаме основни примери за работа с cmdlet PowerShell Invoke-WebRequest.

съвет. Кратката команда Invoke-WebRequest е достъпна в Windows PowerShell 3.0, така че преди да започнете, уверете се, че използвате това или повече последна версия. Ако имате инсталирани няколко версии на Posh на вашия компютър, можете да превключвате между тях.

Използване на кратката команда Invoke-WebRequest

Cmdlet Извикване-WebRequest(псевдоним wget) може да изпраща и получава HTTP, HTTPS и FTP заявки и да обработва отговора, върнат от сървъра. Полученият отговор е колекция от формуляри, връзки, изображения и други важни HTML елементидокумент.

Нека опитаме следната команда:

Invoke-WebRequest -Uri "http://site"

Както можете да видите, върнатият отговор не е просто обикновен HTML код на страница. Виждате различни свойства на уеб документа. Кратката команда Invoke-WebRequest, подобно на повечето други кратки команди на PowerShell, работи с обекти. Invoke-WebRequest връща обект от тип HtmlWebResponseObject. Нека да разгледаме всички свойства на този обект:

$WebResponseObj = Invoke-WebRequest -Uri "http://site"
$WebResponseObj| Get-Member

За да получите необработения HTML код на уеб страница, която се съдържа в този обект, направете:

$WebResponseObj.content

Можете да върнете HTML кода заедно с HTTP заглавките, върнати от уеб сървъра:

$WebResponseObj.rawcontent

Можете да проверите само кода за отговор на уеб сървъра и HTTP заглавките HTML страници:

$WebResponseObj.Headers

Както можете да видите, уеб сървърът върна отговора 200 , т.е. заявката беше завършена успешно и уеб сървърът е достъпен и работи правилно.

Вземете списък с всички HTML връзки на страницата

Нека се обърнем към главната страница на нашия сайт и да получим списък с връзки, налични на него:
$SiteAdress = "http://сайт"

$HttpContent.Връзки | Foreach($_.href)

$HttpContent.Връзки | fl вътрешен текст, href

$HttpContent.Връзки | Where-Object($_.class -eq "номера на страници") | fl вътрешен текст, href

Или с конкретен текст в URL адреса:

$HttpContent.Връзки | Where-Object ($_.href -като "*обмен*") | fl вътрешен текст,href

Разбор на HTML страници с помощта на Powershell

Командлетът Invoke-WebRequest ви позволява бързо и удобно да анализирате съдържанието на всякакви уеб страници. При HTML обработкастраници, от съдържанието му се формират колекции от връзки, уеб формуляри, изображения, скриптове и др.

Използвайки Powershell, вземете съдържанието начална страницанашия уебсайт:

$Img = Invoke-WebRequest "http://site/"

След това ще изброим всички изображения на тази страница:

Нека създадем колекция от пълни URL пътища към използваните изображения:

$images = $Img.Images | изберете src

Инициализирайте нов екземпляр на класа WebClient:

$wc = Нов обект System.Net.WebClient

И изтеглете всички изображения от страницата (с оригинални имена) в директорията c:\tools\:

$изображения | foreach ( $wc.DownloadFile($_.src, ("c:\tools\"+::GetFileName($_.src))) )

Като интересен примерИма начин да използвате кратката команда Invoke-WebRequest.

Как да изтеглите файл чрез HTTP с помощта на PowerShell

Invoke-WebRequest може да работи като аналог на Wget или cURL за Windows, което ви позволява да изтегляте от уеб страница или ftp сайт необходим файлили файлове. Да кажем, че трябва да изтеглим определен файл чрез HTTP с помощта на PowerShell (в нашия пример дистрибуцията Mozilla Firefox). Нека изпълним следната команда:

Invoke-WebRequest "https://download.mozilla.org/?product=firefox-32.0.3-SSL&os=win&lang=ru" -outfile “c:\tools\firefox setup 32.0.3.exe”

В резултат на изпълнението на cmdlet файлът ще бъде изтеглен от посочения URL адрес и ще бъде записан в директорията c:\tools\ под името firefox setup 32.0.3.exe. Ако трябва да изтеглите файл от FTP сайт, просто заменете http:// с ftp://.

По този начин можете лесно да намерите всички връзки на конкретна уеб страница, които попадат под определени критерии (клас на връзката, разделителна способност на име на файл, url адрес) и изтеглете файловете, като използвате получените връзки. Например, има определен сайт с куп връзки към PDF документи. Вашата задача е да изтеглите всички тези файлове на вашия компютър. Гръбнак PowerShell скриптза групово изтегляне на файлове може да изглежда така:

$OutDir="C:\Downloads\docs\PDF"
$SiteAdress = "https://www.site.ru/free-pdf-books/"
$HttpContent = Invoke-WebRequest -URI $SiteAdress
$HttpContent.Връзки | Where-Object ($_.href -като "*.pdf") | %(Invoke-WebRequest -Uri $_.href -OutFile ($OutDir + $(Get-Random 100000)+".pdf"))

В резултат на изпълнението на скрипта в целевата директория всички pdf файловеот страницата. Всеки файл се записва под произволно име.

В PowerShell 6.1 кратката команда Invoke-WebRequest поддържа режим на възобновяване. По този начин, използвайки параметъра Invoke-WebRequest -Uri $Uri -OutFile $OutFile -Продължиможете да възобновите изтеглянето на файл, ако каналът или сървърът отпадне.

Попълване и изпращане на уеб формуляри с Powershell

Много уеб услуги изискват въвеждане на различни данни в HTML формуляри, за да работят. Като се използва Извикване-WebRequestможете да получите достъп до всеки HTML формуляр, да попълните задължителните полета и да изпратите попълнения формуляр обратно на сървъра. В този пример ще покажем как да влезете с помощта на Powershell. пощенска кутияпопулярен Руски сервиз mail.ru чрез стандартната му уеб форма.

Като се използва следния дизайнНека запазим информацията за бисквитките за връзка в отделна променлива на сесията:

$mailru = Invoke-WebRequest https://e.mail.ru/login -SessionVariable сесия

Следната команда ще покаже списък с полета за попълване HTML формаавторизация (формата се нарича LoginExternal):

$mailru.Forms["LoginExternal"].Полета

Нека присвоим необходимите стойности на всички полета:

$mailru.Forms["LoginExternal"].Fields["Login"] = " [имейл защитен]"

$mailru.Forms["LoginExternal"].Fields["Password"] = "Str0NgP$$w0rd"

За да прехвърлите попълнения формуляр към уеб сървъра, извикайте атрибута action на HTML формуляра.

$Log = Invoke-WebRequest -method POST -URI ("https://e.mail.ru/login" + $mailru.Forms["LoginExternal"].Action) -Body $mailru.Forms["LoginExternal"]. Полета -WebSession $session

Недостатъци на cmdlet Invoke-WebRequest

Един от съществените недостатъци на кратката команда Invoke-WebRequest е, че е доста ниска скоростработа. Докато се зарежда HTTP файлцелият поток се буферира в паметта и едва след приключване пълно натоварванезаписан на диск. Така при изтегляне големи файловеМоже да попаднете на недостиг на памет.

Друг проблем е, че кратката команда Invoke-WebRequest е тясно свързана с Internet Explorer. Например в издания на Windows Сървърно ядро, където IE не е инсталиран, командата Invoke-WebRequest не може да се използва.

Ако HTTP сайтът използва, тогава кратката команда Invoke-WebRequest отказва да получава данни от него. Да игнорирате неправилно SSL сертификат, използвайте следния код:

Можете да игнорирате SSL сертификат по този начин:
тип добавяне @"
използване на System.Net;
използване на System.Security.Cryptography.X509Certificates;
публичен клас TrustAllCertsPolicy: ICertificatePolicy (
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate сертификат,
WebRequest заявка, int certificateProblem) (
връща вярно;
}
}
"@
::CertificatePolicy = New-Object TrustAllCertsPolicy
$result = Invoke-WebRequest -Uri "https://site.ru"