我正在嘗試自動下載和安裝大小爲幾百MB的大型應用程序。我正在研究使用BITS和PowerShell異步下載應用程序,然後啓動安裝程序。如何在BITS下載完成時運行腳本
使用已棄用的bitsadmin
命令有一個/SETNOTIFYCMDLINE
選項,它允許我在下載完成後鏈接安裝的執行。我如何使用PowerShell執行此操作?
這將是我的第一個PowerShell腳本,所以如果你有任何鏈接到很好的例子。謝謝
我正在嘗試自動下載和安裝大小爲幾百MB的大型應用程序。我正在研究使用BITS和PowerShell異步下載應用程序,然後啓動安裝程序。如何在BITS下載完成時運行腳本
使用已棄用的bitsadmin
命令有一個/SETNOTIFYCMDLINE
選項,它允許我在下載完成後鏈接安裝的執行。我如何使用PowerShell執行此操作?
這將是我的第一個PowerShell腳本,所以如果你有任何鏈接到很好的例子。謝謝
我會建議使用BitsTransfer模塊,因爲它公開使用BITS作業的本機PowerShell方法。要開始,你只需指示PowerShell來加載BITS模塊:
Import-Module BitsTransfer
運行Get-Command,看看有什麼新的BITS的cmdlet已添加顯示:
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
cmdlet將顯示在屏幕上的進度條,等待下載完成 - 喲下一個命令你的腳本在下載完成之前不會執行。
對於異步任務,您可以將-Asynchronous
參數添加到Start-BitsTransfer cmdlet中,該參數將排隊下載並讓它在後臺運行。您可以使用Get-BitsTransfer和Complete-BitsTransfer cmdlet管理這些下載。
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
我希望下載是異步的,因此允許用戶註銷並且在他們重新登錄時繼續下載。鑑於此,該腳本將不會運行。 – 2012-07-20 20:08:28
當我使用-Asynchronous參數時,是否有辦法通知我的下載已完成?我的腳本啓動下載也不工作(謝謝你的例子),所以我現在離開試圖啓動我的完成腳本。 – 2012-07-20 22:57:16
如果你想完成某些事情,爲什麼不讓它同步運行呢?如果您需要執行其他腳本任務,則始終可以啓動PowerShell的另一個副本......還要注意-Source和-Destination參數使用字符串數組 - 因此,如果需要,可以輕鬆地排隊多個文件。 – Goyuix 2012-07-21 20:32:55