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 - Testing name resolution (equivalent to nslookup)
Powershell commands to test name resolution (equivalent to nslookup)Powershell - View and manage DNS configuration of network interfaces
Powershell commands to display and manage DNS configuration of network interfacesPowershell - Managing IP configuration of network interfaces
Powershell commands to view and modify the IP configuration of network interfacesPowershell - Managing the status and configuration of network interfaces
Powershell commands to view and modify the status and configuration of network interfaces (disable IPv6, enable/disable an interface)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 Powershell
Follow me on
Support me
Last content
Powershell - Testing name resolution (equivalent to nslookup)
Powershell - View and manage DNS configuration of network interfaces
Powershell - Managing IP configuration of network interfaces
Powershell - Managing the status and configuration of network interfaces
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