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

Использование BITS в PowerShell для управления передачей файлов

6 min read Инфраструктура Обновлено 12 Dec 2025
BITS в PowerShell: управление передачей файлов
BITS в PowerShell: управление передачей файлов

Логотип PowerShell

Быстрые ссылки

  • Getting Started with BITS
  • Additional BITS Capabilities
  • Conclusion

Введение

Background Intelligent Transfer Service (BITS) — это служба Windows, предназначенная для надёжной фоновой передачи файлов между клиентами и серверами по протоколам HTTP и SMB. Основные преимущества BITS:

  • Устойчивость к сетевым прерываниям
  • Поддержка приёма/возобновления передачи, в том числе после перезагрузки системы
  • Учет стоимости сети и ограничений пропускной способности

В этой статье показано, как использовать BITS через PowerShell для создания, контроля и завершения заданий передачи. Примеры ориентированы на Windows и PowerShell, так как BITS — Windows-специфичный сервис.

Основные понятия

  • Задание BITS: объект, который хранит список файлов и метаданные трансфера
  • TransferPolicy: политика передачи (например, “Capped” для ограничения трафика)
  • Priority: приоритет задания (Foreground, High, Normal, Low)

Краткие определения даны для быстрого понимания терминов, используемых далее.

Начало работы с BITS в PowerShell

BITS cmdlet уже встроены в PowerShell. Список команд можно получить командой:

Get-Command | Where-Object Source -EQ 'BitsTransfer'

Список cmdlet BITS в PowerShell

Важно: даже если вы используете PowerShell 7 на других ОС, функциональность BITS доступна только в Windows, потому что она опирается на системную службу Windows.

Создание задания Start-BitsTransfer

Чтобы создать новое задание BITS и сразу передать файлы между двумя локациями, используйте Start-BitsTransfer со свойствами Source и Destination:

$Params = @{  
"Source"      = '\\Server01\C$\TestFile.txt'  
"Destination" = '\\Server02\C$\TestFile.txt'  
}  
  
Start-BitsTransfer @Params  

Рекомендуется задавать DisplayName, чтобы в дальнейшем легко ссылаться на задание:

Start-BitsTransfer @Params -DisplayName 'TestTransfer'  

По умолчанию приоритет задания — Foreground (наивысшая скорость). Возможные приоритеты:

  • Foreground — максимальная приоритетность и конкуренция за сеть с другими приложениями
  • High — выше нормального, использует незанятую полосу клиента
  • Normal — обычный приоритет
  • Low — минимальный приоритет, минимально мешает пользователю

Пример задания с нормальным приоритетом:

Start-BitsTransfer @Params -DisplayName 'TestTransfer' -Priority 'Normal'

Чтобы учесть стоимость сетевого трафика (например, платные сети или лимитированные каналы), используйте TransferPolicy:

$Params = @{  
"Source"         = '\\Server01\C$\TestFile.txt'  
"Destination"    = '\\Server02\C$\TestFile.txt'  
"DisplayName"    = 'TestTransfer'  
"Priority"       = 'Normal'  
"TransferPolicy" = 'Capped'  
}  
  
Start-BitsTransfer @Params  

Значение Capped означает, что есть верхняя граница трафика, которой следует придерживаться.

Чтобы запустить задание в фоновом режиме и получить обратно консоль, используйте флаг Asynchronous:

Start-BitsTransfer @Params -Asynchronous  

Просмотр заданий Get-BitsTransfer

Список всех активных заданий выводит Get-BitsTransfer. Если вы задали DisplayName, например TestTransfer, его легко найти:

Get-BitsTransfer
Get-BitsTransfer -Name 'TestTransfer'

Добавление файлов в задание Add-BitsFile

Вы можете добавлять дополнительные файлы в уже созданное задание:

$Job = Get-BitsTransfer -Name 'TestTransfer'  
  
$Params = @{  
"Source"      = '\\Server01\C$\TestFile2.txt'  
"Destination" = '\\Server02\C$\TestFile2.txt'  
}  
  
$Job | Add-BitsFile @Params  

Приостановка и возобновление заданий

Чтобы приостановить текущее задание (например, для перезагрузки или освобождения полосы), используйте:

$Job | Suspend-BitsTransfer  

Для возобновления:

$Job | Resume-BitsTransfer  

Обновление задания Set-BitsTransfer

Если задание ещё активно, можно изменить его параметры, например приоритет:

$Job | Set-BitsTransfer -Priority 'Foreground'  

Завершение задания Complete-BitsTransfer

Когда передача завершена и вы хотите пометить задание как завершённое, выполните:

Get-BitsTransfer | Complete-BitsTransfer  

Удаление задания Remove-BitsTransfer

Чтобы удалить задание независимо от его состояния, используйте:

Get-BitsTransfer -Name "JobToBeRemoved" | Remove-BitsTransfer -Confirm:$False  

Флаг -Confirm:$False отключает запрос подтверждения.

Дополнительные возможности BITS

BITS умеет не только скачивать — он поддерживает и загрузку на HTTP-серверы, включая варианты с аутентификацией.

Пример загрузки (Upload):

$Params = @{  
"Source"       = '\\Server01\C$\TestFile.txt'  
"Destination"  = ''  
"TransferType" = 'Upload'  
}  
  
Start-BitsTransfer @Params  

Особенности загрузок:

  • По умолчанию BITS автоматически группирует несколько файлов для скачивания, но с загрузками это не происходит автоматически. Чтобы отправить несколько файлов, можно пропайпить их в Start-BitsTransfer.
  • Для доступа к защищённым ресурсам указывают Authentication (Basic, Digest, NTLM, Negotiate, Passport) и передают Credential как PSCredential объект.

Пример передачи с указанием учётных данных:

$cred = Get-Credential
$Params = @{  
"Source"       = '\\Server01\C$\TestFile.txt'  
"Destination"  = 'http://server02/uploaddir/testfile.txt'  
"TransferType" = 'Upload'  
"Authentication" = 'NTLM'  
"Credential" = $cred
}
Start-BitsTransfer @Params

Когда BITS может не подойти

(Контрпримеры)

  • Не работает на Linux/macOS: BITS — Windows-only.
  • Не подходит для потоковой передачи или низкой задержки (естественная латентность фоновых заданий и механизмы восстановления).
  • Если нужна детальная синхронизация больших директорий с множеством атрибутов и метаданных, Robocopy или специализированные синхронизаторы могут быть предпочтительнее.
  • Для одноразовой простой загрузки/скачивания небольшого файла проще использовать Invoke-WebRequest или curl.

Альтернативные подходы

  • Robocopy — лучше для зеркалирования директорий и сохранения атрибутов файлов; часто быстрее для больших каталогов при локальных сетях.
  • BITS — лучше, если важна устойчивость к разрывам сети, фоновые задания и учёт стоимости трафика.
  • AzCopy, rclone — для облачных хранилищ и кроссплатформенных задач.

Модель принятия решений (упрощённая)

flowchart TD
    A[Нужно передавать файлы] --> B{Требуется ли фоновая передача с возобновлением?}
    B -- Да --> C{Рабочая ОС — Windows?}
    B -- Нет --> D[Invoke-WebRequest / curl / Robocopy]
    C -- Да --> E[Использовать BITS через PowerShell]
    C -- Нет --> F[Использовать rclone/azcopy/robocopy на подходящей ОС]

Шпаргалка по cmdlet (cheat sheet)

  • Start-BitsTransfer — создать и/или запустить задание
  • Get-BitsTransfer — перечислить задания
  • Add-BitsFile — добавить файл в задание
  • Suspend-BitsTransfer — приостановить задание
  • Resume-BitsTransfer — возобновить задание
  • Set-BitsTransfer — изменить параметры задания
  • Complete-BitsTransfer — пометить задание как завершённое
  • Remove-BitsTransfer — удалить задание

Ролевые чек-листы

Администратор инфраструктуры:

  • Убедиться, что служба BITS запущена и доступна
  • Использовать DisplayName для отслеживания заданий
  • Настроить TransferPolicy для платных каналов
  • Логировать события и ошибки BITS через Event Viewer

Разработчик автоматизации:

  • Оборачивать Start-BitsTransfer в скрипты с обработкой ошибок
  • Хранить креденшалы в безопасном хранилище (Credential Manager, Key Vault)
  • Использовать -Asynchronous и проверять состояние задания через Get-BitsTransfer

Оператор поддержки:

  • Проверять статус заданий и сообщения ошибок в Get-BitsTransfer
  • Использовать Complete-BitsTransfer после успешной проверки целостности
  • Удалять неиспользуемые задания с Remove-BitsTransfer

Тест-кейсы и критерии приёмки

Примеры тестов для автоматизации передачи с помощью BITS:

  • Создание задания и успешная передача файла в нормальных сетевых условиях
  • Приостановка и возобновление после симулированного разрыва сети
  • Возобновление задания после перезагрузки системы
  • Передача с TransferPolicy=Capped минимизирует использование трафика в пик
  • Загрузка на защищённый HTTP-ресурс с разными типами Authentication

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

  • Файл доставлен в целевую директорию в целости
  • Скрипт корректно обрабатывает исключения и возвращает коды завершения
  • При возобновлении после разрыва передача продолжается с последнего смещения

Безопасность и конфиденциальность

  • Храните учётные данные как PSCredential, а не в открытом тексте скрипта.
  • Если используете Basic-аутентификацию, по возможности применяйте HTTPS.
  • Логируйте только необходимые метаданные заданий, не включайте чувствительные данные в логи.
  • Для соответствия требованиям локального законодательства (например, GDPR) проверьте, где хранятся и через какие каналы передаются персональные данные.

Советы и эвристики

  • Используйте DisplayName с префиксом среды (prod/test) для быстрой фильтрации.
  • Для массовых загрузок формируйте список файлов и пайпьте его в Start-BitsTransfer.
  • Если нужно зеркалировать каталоги с метаданными, рассматривайте Robocopy; если нужна устойчивость к разрывам и фоновая отправка — BITS.

Сравнение BITS и Robocopy (кратко)

  • Надёжность при разрывах: BITS — сильный, Robocopy — работает, но без фоновых политик
  • Поддержка фоновых приоритетов и учёта стоимости: только BITS
  • Сохранение метаданных и атрибутов NTFS: Robocopy лучше

Заключение

BITS — мощный инструмент Windows для управления передачей файлов, особенно когда важна устойчивость к ошибкам сети и возможность фоновой работы с учётом приоритета и стоимости. Интеграция BITS с PowerShell даёт гибкость автоматизации: от простых однофайловых переносов до сложных процессов загрузки с аутентификацией. Выбирайте BITS когда нужна надёжность и фоновые задания; выбирайте Robocopy или облачные утилиты для других сценариев.

Важно: BITS — Windows-специфичен, поэтому для кроссплатформенных решений следует подбирать альтернативы.

Краткая сводка:

  • Применяйте DisplayName и TransferPolicy
  • Защищайте креденшалы и используйте HTTPS
  • Тестируйте поведение при сетевых сбоях и перезагрузках
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

Kaspersky Password Manager: как исправить ошибки
Безопасность

Kaspersky Password Manager: как исправить ошибки

Как исправить ошибку Usbupdate.exe на Dell
Поддержка

Как исправить ошибку Usbupdate.exe на Dell

Включение командной панели в Firefox и Edge
Браузеры

Включение командной панели в Firefox и Edge

Резервное копирование в Windows 11 — настройка и советы
Windows

Резервное копирование в Windows 11 — настройка и советы

Postman — руководство по API-тестированию
API

Postman — руководство по API-тестированию

Конвертация ZIP в PDF — 4 быстрых способа
Инструменты

Конвертация ZIP в PDF — 4 быстрых способа