我正在尝试自动下载和安装一个大小为数百 MB 到几 GB 的大型应用程序。我正在研究使用 BITS 和 powershell 来异步下载应用程序,然后启动设置。
使用不推荐使用的bitsadmin
命令,有一个/SETNOTIFYCMDLINE
选项可以让我在下载完成后链接安装程序的执行。如何使用 powershell 执行此操作?
这将是我的第一个 powershell 脚本,所以如果您有任何示例链接,那就太好了。谢谢
我正在尝试自动下载和安装一个大小为数百 MB 到几 GB 的大型应用程序。我正在研究使用 BITS 和 powershell 来异步下载应用程序,然后启动设置。
使用不推荐使用的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