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

Командлеты PowerShell можно использовать для создания синхронных и асинхронных заданий передачи фоновой интеллектуальной службы передачи (BITS).

Все примеры в этом разделе используют командлет Start-BitsTransfer . Чтобы использовать командлет, сначала импортируйте модуль. Чтобы установить модуль, выполните следующую команду: Import-Module BitsTransfer. Дополнительные сведения введите get-Help Start-BitsTransfer в командной строке PowerShell.

Важно!

При использовании командлетов *-BitsTransfer из процесса, выполняющегося в неинтерактивном контексте, например в службе Windows, вы можете не добавлять файлы в задания BITS, что может привести к приостановке состояния. Для продолжения задания необходимо войти в систему удостоверение, которое использовалось для создания задания передачи. Например, при создании задания BITS в скрипте PowerShell, который был выполнен в качестве задания планировщика задач, передача BITS никогда не будет завершена, если только параметр задачи планировщика задач "Запуск только при входе пользователя" включен.

 

Создание синхронного задания передачи BITS

Start-BitsTransfer -Source https://Server01/serverdir/testfile1.txt `
-Destination C:\clientdir\testfile1.txt

Примечание.

Символ серьезного акцента (') используется для указания разрыва строки.

 

В предыдущем примере локальные и удаленные имена файла указываются в параметрах источника и назначения соответственно. По завершении передачи файла или при появлении состояния ошибки отображается командная строка.

Тип передачи по умолчанию — Download. При отправке файлов в расположение HTTP параметр TransferType должен быть задан как Upload.

Так как положение параметров применяется для командлета Start-BitsTransfer , имена параметров не нужно указывать для параметров источника и назначения. Таким образом, эта команда может быть упрощена следующим образом.

Start-BitsTransfer https://Server01/serverdir/testfile1.txt C:\clientdir\testfile1.txt

Создание синхронного задания передачи BITS с несколькими файлами

Start-BitsTransfer -Source C:\clientsourcedir\*.txt `
-Destination c:\clientdir\ -TransferType Download

В предыдущем примере команда Start-BitsTransfer создает новое задание передачи BITS. Все файлы добавляются в это задание и передаются последовательно клиенту.

Примечание.

Конечный путь не должен содержать подстановочные знаки. Путь назначения поддерживает относительные каталоги, корневые пути или неявные каталоги (то есть текущий каталог). Файлы назначения нельзя переименовать с помощью дикого карта символа. Кроме того, URL-адреса HTTP и HTTPS не работают с дикими карта. Wild карта допустимы только для путей UNC и локальных каталогов.

 

Создание синхронного задания передачи BITS и указание учетных данных для удаленного сервера

Start-BitsTransfer -DisplayName MyJob -Credential Username\Domain `
-Source https://server01/servertestdir/testfile1.txt -Destination c:\clienttestdir\testfile1.txt `
-ProxyUsage Override -ProxyList @(https://proxy1, 123.24.21.23, proxy3)

В предыдущем примере пользователь создает задание передачи BITS для скачивания файла с сервера, требующего проверки подлинности. Пользователь запрашивает учетные данные, а параметр Credential передает объект учетных данных командлету Start-BitsTransfer . Пользователь задает явный прокси-сервер, а задание передачи BITS использует только прокси-серверы, определенные параметром ProxyList . Параметр DisplayName предоставляет задание передачи BITS уникальное отображаемое имя.

Создание синхронного задания передачи BITS из CSV-файла

Import-CSV filelist.txt | Start-BitsTransfer -TransferType Upload

Примечание.

Символ "|" — это символ канала.

 

В предыдущем примере пользователь создает задание передачи BITS, которое отправляет несколько файлов из клиента. Командлет Import-CSV импортирует расположения исходного и целевого файлов и передает их команде Start-BitsTransfer . Команда Start-BitsTransfer создает новое задание передачи BITS для каждого файла, добавляет файлы в задание, а затем передает их последовательно на сервер.

Содержимое файла Filelist.txt должно быть в следующем формате:

Source, Destination
c:\clienttestdir\testfile1.txt, https://server01/servertestdir/testfile1.txt
c:\clienttestdir\testfile2.txt, https://server01/servertestdir/testfile2.txt
c:\clienttestdir\testfile3.txt, https://server01/servertestdir/testfile3.txt
c:\clienttestdir\testfile4.txt, https://server01/servertestdir/testfile4.txt

Создание асинхронного задания передачи BITS

$Job = Start-BitsTransfer -Source https://Server1.TrustedDomain.com/File1.zip `
       -Destination d:\temp\downloads\ -Asynchronous

while (($Job.JobState -eq "Transferring") -or ($Job.JobState -eq "Connecting")) `
       { sleep 5;} # Poll for status, sleep for 5 seconds, or perform an action.

Switch($Job.JobState)
{
    "Transferred" {Complete-BitsTransfer -BitsJob $Job}
    "Error" {$Job | Format-List } # List the errors.
    default {"Other action"} #  Perform corrective action.
}

В предыдущем примере задание передачи BITS было назначено переменной $Job. Файлы скачиваются последовательно. После завершения задания передачи файлы будут немедленно доступны. Если $Job.JobState возвращает значение "Передано", объект $Job отправляется командлету Complete-BitsTransfer .

Если $Job.JobState возвращает "Error", объект $Job отправляется командлету Format-List для перечисления ошибок.

Управление удаленными сеансами PowerShell

Начиная с Windows 10 версии 1607, можно запускать командлеты PowerShell, BITS Администратор или другие приложения, использующие интерфейсы BITS из удаленной командной строки PowerShell, подключенной к другому компьютеру (физическому или виртуальному). Эта возможность недоступна при использовании командной строки PowerShell Direct для виртуальной машины на той же физической машине и недоступна при использовании командлетов WinRM.

Задание BITS, созданное из удаленного сеанса PowerShell, выполняется в контексте учетной записи пользователя этого сеанса и будет выполняться только при наличии хотя бы одного активного локального сеанса входа в систему или удаленного сеанса PowerShell, связанного с этой учетной записью пользователя. Постоянные операции PSSessions PowerShell можно использовать для выполнения удаленных команд без необходимости открывать окно PowerShell для каждого задания для продолжения выполнения, как описано в разделе Администратор ister удаленных компьютеров с помощью Windows PowerShell.

  • New-PSSession создает постоянный удаленный сеанс PowerShell. После создания объекты PSSession сохраняются на удаленном компьютере до явного удаления. Все задания BITS, инициированные в активном сеансе, будут выполнять ход передачи данных, даже после отключения клиента от сеанса.
  • Отключение-PSSession отключает клиентский компьютер от удаленного сеанса PowerShell и состояние сеанса продолжает поддерживаться удаленным компьютером. Самое главное, процессы удаленного сеанса будут продолжать выполняться, и задания BITS будут продолжать выполняться. Клиентский компьютер может даже перезагружаться и (или) отключать после вызова off-PSSession.
  • Подключение-PSSession повторно подключает клиентский компьютер к активному сеансу Удаленной оболочки PowerShell.
  • Remove-PSSession удаляет удаленный сеанс PowerShell.

В приведенном ниже примере показано, как использовать PowerShell Remote для работы с асинхронными заданиями передачи BITS таким образом, чтобы задание продолжало выполняться, даже если вы не подключены к удаленному сеансу.

# Establish a PowerShell Remote session in Server01 with name 'MyRemoteSession'
New-PSSession -ComputerName Server01 -Name MyRemoteSession -Credential Domain01\User01

# Enter the previously-established session to execute commands
Enter-PSSession -Name MyRemoteSession

# Enumerate active BITS transfers on the remote machine
Get-BitsTransfer

# While running in the context of the PowerShell Remote session, start a new BITS transfer
Start-BitsTransfer -Source https://Server1.TrustedDomain.com/File1.zip -Destination c:\temp\downloads\ -Asynchronous

# Exit the PowerShell Remote session's context
Exit-PSSession

# Disconnect the 'MyRemoteSession' PowerShell Remote session from the current PowerShell window
# After this command, it is safe to close the current PowerShell window and turn off the local machine
Disconnect-PSSession -Name MyRemoteSession


# The commands below can be executed from a different PowerShell window, even after rebooting the local machine
# Connect the 'MyRemoteSession' PowerShell Remote session to the current PowerShell window
Connect-PSSession -ComputerName Server01 -Name MyRemoteSession

# Enter the previously-established session to execute commands
Enter-PSSession -Name MyRemoteSession

# Enumerate active BITS transfers on the remote machine
Get-BitsTransfer

# Manage BITS transfers on the remote machine via Complete-BitsTransfer, Remove-BitsTransfer, etc.

# Exit the PowerShell Remote session's context
Exit-PSSession

# Destroy the 'MyRemoteSession' PowerShell Remote session when no longer needed
Remove-PSSession -Name MyRemoteSession

Start-BitsTransfer

Complete-BitsTransfer