Я бы предложил использовать модуль 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
командлет покажет индикатор на экране и ждать до окончания загрузки - следующая команда в йо Урок не будет выполняться до завершения загрузки.
Для задач async вы можете добавить параметр -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
Я бы хотел, чтобы загрузка была асинхронной, поэтому разрешающая пользователю выйти из системы и вернуться в режим загрузки. Учитывая это, скрипт не будет запущен. –
Есть ли способ получить уведомление о том, что моя загрузка завершена, когда я использую параметр -Asynchronous? Мой сценарий, который инициирует загрузку, не работает (спасибо за примеры), поэтому теперь я остаюсь, пытаясь запустить мой скрипт завершения. –
Если вы хотите выполнить что-то по завершении, почему бы просто не запустить его синхронно? Вы всегда можете запустить еще одну копию PowerShell, если вам нужно выполнить дополнительные задачи сценариев ... также обратите внимание, что параметры -Source и -Destination принимают строковые массивы, поэтому вы можете легко разместить несколько файлов, если вам нужно. – Goyuix