Powershell 如何在BITS下载完成时运行脚本
我正在尝试自动下载和安装一个数百MB到几GB大小的大型应用程序。我正在研究使用BITS和powershell异步下载应用程序,然后启动安装程序 使用不推荐使用的Powershell 如何在BITS下载完成时运行脚本,powershell,microsoft-bits,bits-service,Powershell,Microsoft Bits,Bits Service,我正在尝试自动下载和安装一个数百MB到几GB大小的大型应用程序。我正在研究使用BITS和powershell异步下载应用程序,然后启动安装程序 使用不推荐使用的bitsadmin命令,有一个/SETNOTIFYCMDLINE选项,允许我在下载完成后链接安装程序的执行。如何使用powershell执行此操作 这将是我的第一个powershell脚本,因此,如果您有任何指向示例的链接,那将非常棒。谢谢我建议使用BitsTransfer模块,因为它公开了用于处理BITS作业的本机PowerShell方
bitsadmin
命令,有一个/SETNOTIFYCMDLINE
选项,允许我在下载完成后链接安装程序的执行。如何使用powershell执行此操作
这将是我的第一个powershell脚本,因此,如果您有任何指向示例的链接,那将非常棒。谢谢我建议使用BitsTransfer模块,因为它公开了用于处理BITS作业的本机PowerShell方法。要开始,只需指示PowerShell加载BITS模块:
Import-Module BitsTransfer
运行查看添加了哪些新的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
您最有可能感兴趣的是:
cmdlet将在屏幕上显示进度条,并等待下载完成-在下载完成之前,脚本中的下一个命令不会执行
对于异步任务,可以将-Asynchronous
参数添加到Start-BitsTransfer cmdlet,该cmdlet将对下载进行排队,并让下载在后台运行。您可以使用和cmdlet管理这些下载
我希望下载是异步的,因此允许用户注销并在他们重新登录下载时继续。在这种情况下,脚本将不会运行。当我使用-Asynchronous参数时,是否有方法通知我的下载已完成?我启动下载的脚本不起作用(感谢您提供的示例),因此我现在只能尝试启动我的完成脚本。如果您想在完成时执行某些操作,为什么不让它同步运行呢?如果需要执行其他脚本任务,则始终可以启动PowerShell的另一个副本。。。还要注意的是,-Source和-Destination参数采用字符串数组,因此,如果需要,您可以轻松地将多个文件排队。我不希望同步运行它,因为下载可能比我们的客户在线进行单个会话所需的时间要长。我想在下载完成后使用BITS功能进行通知。这看起来好像BITSransfer模块的通知选项非常有限。值得注意的是,任何异步启动的传输都将在后台继续传输,即使用户退出PowerShell。在保持BitsTransfer模块的本地状态时,最好定期轮询作业状态(登录时、排队后等),并在作业完成时采取措施。
Start-BitsTransfer -Source http://localhost/BigInstaller.msi
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