Я знаю, что могу загрузить и установить вышеупомянутую библиотеку (wget для Windows), но у меня такой вопрос:
В Windows PowerShell есть собственная альтернатива wget
?
Мне нужно wget
просто получить файл с данного URL с помощью HTTP GET. Например:
wget http://www.google.com/
Ответы:
Вот простой PS 3.0 и более поздний однострочный, который работает и не требует большого количества PS barf:
Обратите внимание, что:
wget
это псевдоним дляInvoke-WebRequest
При установке Windows Server Core вам нужно записать это как
До 20 сентября 2014 года я предложил
как ответ. Однако это работает не во всех случаях, так как
>
оператор (который является псевдонимомOut-File
) преобразует ввод в Unicode.Если вы используете Windows 7, вам необходимо установить версию 4 или более новую платформу Windows Management Framework.
Возможно, вы обнаружите, что выполнение команды
$ProgressPreference = "silentlyContinue"
beforeInvoke-WebRequest
значительно улучшит скорость загрузки больших файлов; эта переменная контролирует, отображается ли пользовательский интерфейс прогресса.источник
Если вам просто нужно получить файл, вы можете использовать метод DownloadFile объекта WebClient :
Где
$url
строка, представляющая URL-адрес файла и$path
представляющая локальный путь, в который будет сохранен файл.Обратите внимание, что
$path
должно включать имя файла; это не может быть просто каталог.источник
(new-object System.Net.WebClient).DownloadFile( '$url, $path)
это лучшее соответствие, котороеwget
я видел до сих пор. Спасибо!$client.DownloadFile( "http://blog.stackexchange.com/", "c:/temp2/_Download.html")
(new-object System.Net.WebClient).DownloadData($url) | Out-Null
В
Invoke-WebRequest
следующей версии PowerShell 3:источник
dd
...-Outfile
параметр кажется посторонним, когда вы можете просто использовать>
(перезаписать) или>>
(добавить) в файл.wget
делает :)wget
и по умолчаниюcurl
псевдонимInvoke-WebRequest
(iwr
): DЭто немного грязно, но есть этот пост в блоге, который дает вам инструкции для загрузки файлов.
В качестве альтернативы (и это я бы порекомендовал) вы можете использовать биты:
Он покажет прогресс и загрузит файл в текущий каталог.
источник
Start-BitsTransfer : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
. Я озадачен: |PowerShell V4 One-liner:
или же
Это в основном Уоррен (удивительный) однострочный V3 (спасибо за это!) - с небольшим изменением, чтобы заставить его работать в PowerShell V4.
Однострочник Уоррена - который просто использует,
wget
а неiwr
- должен по-прежнему работать для V3 (по крайней мере, я думаю, хотя и не проверял его). Так или иначе. Но при попытке выполнить его в PowerShell V4 (как я пытался) вы увидите, что PowerShell не удается преобразоватьwget
в действительный командлет / программу.Для тех, кто заинтересован, это - как я понял из комментария Боба в ответ на принятый ответ (спасибо, мужик!) - потому что
wget
curl
Invoke-WebRequest
iwr
начиная с PowerShell V4 и для которого назначены псевдонимы , установлено по умолчанию . Таким образом,wget
не может быть решена (а такжеcurl
не может работать здесь) .источник
Вот функция PowerShell, которая разрешает короткие URL-адреса перед загрузкой файла
Используйте это так, чтобы загрузить файл в текущую папку:
Или загрузить файл в указанную папку:
источник
Следующая функция получит URL.
Некоторые комментарии:
(New-Object Net.WebClient).DownloadFile($url, $path)
работает нормально.if (!$path) {...}
разделе рассматривается простой случай, когда вы просто хотите загрузить файл в текущий каталог, используя имя, указанное в URL.источник
Используйте оболочку Windows 10 bash, которая включает wget после настройки Windows.
Как установить оболочку Ubuntu Bash на Windows:
YouTube: запуск Bash в Ubuntu под Windows!
Документация по подсистеме Windows для Linux
источник
Если ваша Windows достаточно новая (например, версия 1809 или новее), есть «настоящий» локоть. curl имеет параметр командной строки "-O" (заглавная буква O; строчная буква не будет делать то же самое!) Опция "-O", альтернатива "--remote-name" сообщает curl, что сохраненный файл получает то же имя, что и часть имени файла в URL.
Нужно запустить это как "curl.exe", чтобы отличить его от псевдонима "curl" для "Invoke-WebRequest". Кстати, он работает в cmd.exe без изменений.
Используя тот же пример, что и в другом ответе здесь
(Сайт не позволит мне добавить это в качестве комментария, так как мне, очевидно, нужно больше «репутации» для этого - поэтому он получает новый ответ)
источник
Invoke-WebRequest с параметром -outfile ожидает строку, поэтому, если ваше имя файла начинается с цифры и не заключено в кавычки, выходной файл не создается.
например.
Invoke-WebRequest -Uri "http://www.google.com/" -outfile "2.pdf"
Это не влияет на имена файлов, начинающиеся с буквы.
источник
wget
является псевдонимомInvoke-WebRequest
и аналогичен приведенному выше)Это должно работать для вас, чтобы обойти браузер без инициализации вещи. Обратите внимание на параметр -UseBasicParsing.
источник
-UseBasicParsing
.