Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 如何在BITS下载完成时运行脚本_Powershell_Microsoft Bits_Bits Service - Fatal编程技术网

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

Powershell 如何在BITS下载完成时运行脚本,powershell,microsoft-bits,bits-service,Powershell,Microsoft Bits,Bits Service,我正在尝试自动下载和安装一个数百MB到几GB大小的大型应用程序。我正在研究使用BITS和powershell异步下载应用程序,然后启动安装程序 使用不推荐使用的bitsadmin命令,有一个/SETNOTIFYCMDLINE选项,允许我在下载完成后链接安装程序的执行。如何使用powershell执行此操作 这将是我的第一个powershell脚本,因此,如果您有任何指向示例的链接,那将非常棒。谢谢我建议使用BitsTransfer模块,因为它公开了用于处理BITS作业的本机PowerShell方

我正在尝试自动下载和安装一个数百MB到几GB大小的大型应用程序。我正在研究使用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