Гид по технологиям

Как скачать файл с помощью PowerShell

4 min read PowerShell Обновлено 21 Nov 2025
Скачать файл через PowerShell быстро
Скачать файл через PowerShell быстро

PowerShell на экране компьютера: консоль и команды для автоматизации задач

Введение

PowerShell — бесплатный инструмент автоматизации от Microsoft. Он позволяет управлять системой и автоматизировать задачи в Windows и (в более новых версиях) кросс-платформенно. Одна из частых задач — автоматическая загрузка файлов из интернета. Ниже приведён понятный и практичный набор приёмов для этого.

Важно: в примерах использованы общие URL и локальные пути. Замените их на свои значения.

Базовый синтаксис: Invoke-WebRequest

Самая распространённая команда для загрузки файла — Invoke-WebRequest с параметром -OutFile.

$source = 'https://www.majorgeeks.com/files/details/4diskclean_free.html/4dskcln.exe'
$destination = 'C:\programfiles\newfolder\4dskcln.exe'
Invoke-WebRequest -Uri $source -OutFile $destination

Пояснения:

  • $source — адрес (URI) файла в сети.
  • $destination — полный путь и имя файла на диске.
  • Invoke-WebRequest загружает по HTTP/HTTPS и сохраняет содержимое в указанный файл.

Если сервер требует аутентификацию, создайте учётные данные и передайте их в командлет:

$credential = Get-Credential
Invoke-WebRequest -Uri $source -OutFile $destination -Credential $credential

Get-Credential откроет стандартное окно ввода логина и пароля и вернёт объект PSCredential.

Альтернативы и когда их использовать

  • Start-BitsTransfer — полезен для фоновой и надёжной передачи, автоматически восстанавливает прерванные загрузки. Доступен преимущественно в Windows:
Start-BitsTransfer -Source $source -Destination $destination
  • System.Net.WebClient — устаревающий, но простой метод, работает в многих средах PowerShell:
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($source, 'C:\programfiles\newfolder\4dskcln.exe')
$wc.Dispose()
  • PowerShell 7+ (PowerShell Core) — Invoke-WebRequest присутствует, но поведение парсинга HTML и некоторые опции отличаются от Windows PowerShell.

Когда простой Invoke-WebRequest может не сработать

  • URL возвращает HTML-страницу с перенаправлением или кнопкой загрузки (нужна имитация клика или анализ HTML).
  • Требуется OAuth, токены или нестандартная аутентификация (нужна предварительная обработка заголовков).
  • HTTPS с самоподписанным сертификатом — соединение может быть заблокировано.
  • Система блокирует исходящий трафик (фаервол, прокси) или доступ запрещён по политике компании.

Важно: если сервер возвращает не «сырой» файл, а страницу с JavaScript, Invoke-WebRequest не выполнит скрипт — нужно использовать альтернативы (инструмент автоматизации браузера или API).

Практическая шпаргалка (cheat sheet)

  • Быстрая загрузка:
Invoke-WebRequest -Uri $url -OutFile $path
  • С учётными данными:
$cred = Get-Credential
Invoke-WebRequest -Uri $url -OutFile $path -Credential $cred
  • Фоновые/устойчивые загрузки:
Start-BitsTransfer -Source $url -Destination $path
  • Проверка результата:
if (Test-Path $path) { Write-Host 'Загрузка прошла успешно' } else { Write-Host 'Ошибка загрузки' }

Критерии приёмки

  • Файл появился по ожидаемому пути и имеет ненулевой размер.
  • Контрольная сумма совпадает с ожидаемой (если доступна).
  • Установлены корректные права доступа (если требуется).

Пример проверки SHA256:

$expected = 'ваша_ожидаемая_хеш_строка'
$actual = (Get-FileHash -Path $destination -Algorithm SHA256).Hash
if ($actual -eq $expected) { Write-Host 'Хеш совпадает' } else { Write-Host 'Несоответствие хеша' }

Политика безопасности и хардэннинг

  • Всегда загружайте файлы из доверенных источников.
  • Не запускайте скачанные исполняемые файлы без проверки подписи и хеша.
  • Используйте HTTPS и проверяйте сертификаты.
  • Для критичных сценариев проверяйте подпись Authenticode или подпись пакета.
  • Не храните пароли в явном виде — используйте Get-Credential или защищённые хранилища (Credential Manager, Azure Key Vault).

Роли и чек-лист (Admin vs обычный пользователь)

  • Администратор:

    • Убедиться, что порт/политики позволяют исходящие HTTP/HTTPS.
    • Настроить папку назначения и права доступа.
    • Автоматизировать проверку хешей и подписи.
  • Обычный пользователь:

    • Указать корректный путь сохранения и имя файла.
    • Не запускать исполняемый файл без разрешения администратора.

Советы по совместимости и миграции

  • Start-BitsTransfer: работает в Windows PowerShell; в кросс-платформенном PowerShell Core эта команда может быть недоступна.
  • Invoke-WebRequest: присутствует и в PowerShell Core, но поведение парсинга HTML могло измениться; тестируйте скрипты при переходе на PowerShell 7+.
  • WebClient: пригоден для простых сценариев, но в новых проектах лучше использовать Invoke-WebRequest или HttpClient.

Тестовые сценарии (основные)

  • Успешная загрузка маленького файла (HTTP/HTTPS).
  • Загрузка большого файла и возобновление при прерывании (Start-BitsTransfer).
  • Попытка загрузки с неверными учётными данными — ожидается ошибка 401/403.
  • Загрузка с перенаправлением — убедиться, что конечный файл получен.

Быстрые примеры: полные скрипты

Пример 1 — простая загрузка:

$source = 'https://www.majorgeeks.com/files/details/4diskclean_free.html/4dskcln.exe'
$destination = 'C:\programfiles\newfolder\4dskcln.exe'
Invoke-WebRequest -Uri $source -OutFile $destination

Пример 2 — загрузка с проверкой хеша:

$source = 'https://example.com/file.zip'
$destination = 'C:\temp\file.zip'
Invoke-WebRequest -Uri $source -OutFile $destination
$hash = (Get-FileHash -Path $destination -Algorithm SHA256).Hash
if ($hash -ne 'ожидаемый_хеш') { throw 'Хеш не совпадает' }

Краткое резюме

PowerShell предлагает несколько способов скачать файл: Invoke-WebRequest — простой и универсальный, Start-BitsTransfer — для устойчивых фоновых загрузок, а WebClient — для совместимости. Выбор зависит от требований к надёжности, совместимости и безопасности.

Заметки:

  • Проверьте различия между версиями PowerShell при переносе скриптов.
  • Всегда проверяйте целостность и источник скачанных файлов.

Спасибо за внимание — попробуйте варианты в тестовой среде и добавьте проверку хешей в ваши сценарии автоматизации.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Загрузочный USB‑диск с Windows — инструкция
Инструкции

Загрузочный USB‑диск с Windows — инструкция

Как отключить безопасный режим в Tumblr
Инструкции

Как отключить безопасный режим в Tumblr

Копирование пользовательских представлений Outlook
Outlook

Копирование пользовательских представлений Outlook

Очистка Docker-образов и освобождение места
DevOps

Очистка Docker-образов и освобождение места

Обновить Cube WP10 до Anniversary Update
Мобильные устройства

Обновить Cube WP10 до Anniversary Update

Как проверить, запущен ли Docker daemon
DevOps

Как проверить, запущен ли Docker daemon