2012-07-20 4 views
2

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

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

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

ответ

3

Я бы предложил использовать модуль 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 
+0

Я бы хотел, чтобы загрузка была асинхронной, поэтому разрешающая пользователю выйти из системы и вернуться в режим загрузки. Учитывая это, скрипт не будет запущен. –

+0

Есть ли способ получить уведомление о том, что моя загрузка завершена, когда я использую параметр -Asynchronous? Мой сценарий, который инициирует загрузку, не работает (спасибо за примеры), поэтому теперь я остаюсь, пытаясь запустить мой скрипт завершения. –

+0

Если вы хотите выполнить что-то по завершении, почему бы просто не запустить его синхронно? Вы всегда можете запустить еще одну копию PowerShell, если вам нужно выполнить дополнительные задачи сценариев ... также обратите внимание, что параметры -Source и -Destination принимают строковые массивы, поэтому вы можете легко разместить несколько файлов, если вам нужно. – Goyuix

Смежные вопросы