Powershell - Using BITS file transfer
To support me, you can subscribe to the channel, share and like the videos, disable your ad blocker or make a donation. Thank you!
Hello,
BITS (Background Intelligent Transfer Service) is a Windows service for performing data transfers. It allows you to: - Set a network bandwidth priority - Pause and resume a transfer - To transfer in synchronous or asynchronous mode. - Download or send data - Resume transfer after a restart
Perform a download with BITS.
$Params = @{ Source = ‘https://github.com/PowerShell/PowerShell/releases/download/v7.2.2/PowerShell-7.2.2-win-x64.msi’ Destination = ‘d:\PowerShell-7.2.2-win-x64.msi’ DisplayName = ‘Test Priority = ‘Normal } $job = Start-BitsTransfer @Params -Asynchronous
By default, the BITS transfer is performed in synchronous mode with high priority (foreground).
No wildcard for HTTP or HTTPS addresses
List transfers
Get-BitsTransfer
Display everyone’s BITS jobs
Get-BitsTransfer -AllUsers
Suspend a transfer
$job | Suspend-BitsTransfer
Resume a transfer
$job | Resume-BitsTransfer -Asynchronous
By default, the transfer is restarted in synchronous mode even if it was started asynchronously initially.
You can resume the transfer after a reboot
Complete completed transfers
Get-BitsTransfer | Where-Object Jobstate -eq Transferred | Complete-BitsTransfer
In asynchronous mode, a temporary file is created, Complete-BitsTranfer generates the final file.
If the final file is already present, it will not be overwritten and will remain in the temporary file state.
Recover a file from a share
$DriveParams = @{ name = ‘drive PSProvider = ‘FileSystem Root = ‘\10.0.0.253\iso’ cred = Get-Credential } New-PSDrive @DriveParams
It is necessary to create a drive otherwise a path not found error is returned
for the SMB path in Start-BitsTransfer
$Params = @{ Source = ‘drive:\en-en_windows_11_business_editions_x64_dvd_95aa5eee.iso’ Destination = ‘c:’ DisplayName = ‘Test2’ } Start-BitsTransfer @Params -Asynchronous
It is not necessary to specify the name of the destination file for UNC paths.
Add additional files to a job
$Params = @{ Source = ‘drive:\fr-fr_windows_server_2022_x64_dvd_9f7d1adb.iso’ Destination = ‘c:’ } Get-BitsTransfer -Name test2 | Add-BitsFile @Params Get-BitsTransfer -Name test2 | Select-Object displayname, filelist Get-BitsTransfer | Complete-BitsTransfer
Send a local file to a share
$Params = @{ Source = ‘C:\PowerShell-7.2.2-win-x64.msi’ Destination = ‘\10.0.0.253\iso’ DisplayName = ‘Test3’ } Start-BitsTransfer @Params -Asynchronous Get-BitsTransfer | Complete-BitsTransfer
Specify authentication parameters (Basic, Digest, NTLM, Negotiate or Passport)
Start-BitsTransfer -source http://10.0.0.1/fichier.iso -destination c:\temp\fichier.iso ` -asynchronous -Authentication NTLM -Credential (Get-Credential)
Modify a transfer in progress, the priority in this example :
$Job | Set-BitsTransfer -Priority Foreground
Delete the job
$Job | Remove-BitsTransfer
Delete all tasks for all users (whether in progress or not)
Get-BitsTransfer -Allusers | Remove-BitsTransfer -Confirm:$False
Transfer several HTTP(S) files from a CSV
Create a file (list.csv in the example) with the following contents:
Source,Destination https://serveur/fichier1.txt,c:\folderfile1.txt https://serveur/fichier2.txt,c:\dossier\file2.txt
Import-CSV list.csv | Start-BitsTransfer -Asynchronous Get-BitsTransfer | Select-Object displayname,filelist
Send several files to one share (or vice versa)
You can use wildcards with UNC paths
$Params = @{ Source = ‘C:\demo*’ Destination = ‘\10.0.0.253\iso’ DisplayName = ‘Test6’ } Start-BitsTransfer @Params -Asynchronous Get-BitsTransfer | Complete-BitsTransfer
Related links
Powershell and the Left Hand Side
An important concept in Powershell, the Left Hand SidePowershell - Managing disks, partitions and volumes
How to manage disks, partitions and volumes in PowershellPowershell - Managing System Restore Points in Windows
How to manage system restore points in WindowsPowershell - Playing with the Windows clipboard
“How to send and retrieve information from the Windows clipboard”Powershell - Changing the state of a computer (sleep, hibernate, shutdown, restart)
How to change the state of a computer (sleep, hibernate, shutdown, restart) in PowershellPowershell - Compress-Archive and Expand-Archive to create and extract ZIP archives
Powershell, through the Microsoft.PowerShell.Archive module, allows us to create, update and extract ZIP archives
Follow me on
Support me
Last content
Powershell and the Left Hand Side
Powershell - Managing disks, partitions and volumes
Powershell - Managing System Restore Points in Windows
Powershell - Playing with the Windows clipboard
Powershell - Changing the state of a computer (sleep, hibernate, shutdown, restart)
Powershell - Compress-Archive and Expand-Archive to create and extract ZIP archives
Powershell - Export-Csv versus Export-Clixml
Powershell - Overview of Where-Object basic syntax and its limitations
Powershell - Hyper-V - Give a custom name to a virtual network adapter