如何在BITS下载完成时运行脚本

时间:2012-07-20 18:46:51

标签: powershell microsoft-bits bits-service

我正在尝试自动下载和安装几百MB到几GB的大型应用程序。我正在研究使用BITS和powershell来异步下载应用程序,然后启动安装程序。

使用弃用的bitsadmin命令有一个/SETNOTIFYCMDLINE选项,允许我在下载完成后链接执行设置。如何使用PowerShell执行此操作?

这将是我的第一个powershell脚本,所以如果你有任何链接到很好的例子。感谢

1 个答案:

答案 0 :(得分:4)

我建议使用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,该cmdlet将排队下载并让它在后台运行。您可以使用Get-BitsTransferComplete-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