Как запустить скрипт на завершении загрузки BITS

Я пытаюсь автоматизировать загрузку и установку большого приложения размером от нескольких сотен МБ до нескольких ГБ. Я изучаю использование BITS и powershell для асинхронной загрузки приложения и запуска установки.

Использование не рекомендуется bitsadmin команда есть /SETNOTIFYCMDLINEопция, которая позволила бы мне выполнить цепочку выполнения установки после завершения загрузки. Как я могу выполнить это с PowerShell?

Это будет мой первый скрипт powershell, так что если у вас есть ссылки на примеры, это было бы здорово. Спасибо

1 ответ

Решение

Я бы предложил использовать модуль BitsTransfer, поскольку он предоставляет собственные методы PowerShell для работы с заданиями BITS. Чтобы начать, вы просто указываете PowerShell загрузить модуль BITS:

Import-Module BitsTransfer

Запуск команды Get-Command, чтобы увидеть, какие новые командлеты BITS были добавлены, показывает:

PS C:\> Get-Command  *-bits*

CommandType     Name
-----------     ----
Cmdlet          Add-BitsFile
Cmdlet          Complete-BitsTransfer
Cmdlet          Get-BitsTransfer
Cmdlet          Remove-BitsTransfer
Cmdlet          Resume-BitsTransfer
Cmdlet          Set-BitsTransfer
Cmdlet          Start-BitsTransfer
Cmdlet          Suspend-BitsTransfer

Скорее всего, вас заинтересует Start-BitsTransfer:

Start-BitsTransfer -Source http://localhost/BigInstaller.msi

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

Для асинхронных задач вы можете добавить -Asynchronous параметр командлета Start-BitsTransfer, который поставит очередь на загрузку и позволит запустить ее в фоновом режиме. Вы можете управлять этими загрузками с помощью командлетов Get-BitsTransfer и Complete-BitsTransfer.

PS C:\> Start-BitsTransfer -Source http://localhost/BigInstaller.msi -Async
JobId                   DisplayName    TransferType  JobState
-----                   -----------    ------------  --------
da7bab7f-fbfd-432d-8... BITS Transfer  Download      Connecting

PS C:\> Get-BitsTransfer
JobId                   DisplayName    TransferType  JobState
-----                   -----------    ------------  --------
da7bab7f-fbfd-432d-8... BITS Transfer  Download      Transferred

# finish and jobs that have transferred (e.g. write them to destination on disk)
PS C:\> Get-BitsTransfer | ? {$_.JobState -eq "Transferred"} | Complete-BitsTransfer
Другие вопросы по тегам