Set up a maintenance schedule to limit the maximum network bandwidth used for BITS background transfers
Verified with Windows 11 25H2 — updated on July 30, 2026
Supported on: Windows 7 or computers with BITS 3.5 installed.
Path in the GPO console
Computer Configuration\Administrative Templates\Network\Background Intelligent Transfer Service (BITS) Description
This policy setting limits the network bandwidth that Background Intelligent Transfer Service (BITS) uses for background transfers during the maintenance days and hours. Maintenance schedules further limit the network bandwidth that is used for background transfers. If you enable this policy setting, you can define a separate set of network bandwidth limits and set up a schedule for the maintenance period. You can specify a limit to use for background jobs during a maintenance schedule. For example, if normal priority jobs are currently limited to 256 Kbps on a work schedule, you can further limit the network bandwidth of normal priority jobs to 0 Kbps from 8:00 A.M. to 10:00 A.M. on a maintenance schedule. If you disable or do not configure this policy setting, the limits defined for work or nonwork schedules will be used. Note: The bandwidth limits that are set for the maintenance period supersede any limits defined for work and other schedules.
Registry
Software\Policies\Microsoft\Windows\BITS\Throttling Value name: EnableMaintenanceLimits
MDM / Intune (CSP)
./Device/Vendor/MSFT/Policy/Config/ADMX_Bits/BITS_MaxBandwidthV2_Maintenance Microsoft Learn documentation Mapping data: Microsoft Learn (CC BY 4.0)
Export Builder
BETAConfigure the state, scope and options, then generate .reg, PowerShell, Intune and SCCM outputs — or add the setting to a multi-setting collection.
These exports write the registry — this is not a managed GPO. ⓘ
.reg file
Windows Registry Editor Version 5.00
; Exported from gporais.com
; Policy: Set up a maintenance schedule to limit the maximum network bandwidth used for BITS background transfers
; State: Enabled
; Supported on: Windows 7 or computers with BITS 3.5 installed.
[HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\BITS\Throttling]
"EnableMaintenanceLimits"=dword:00000001
"StartDay"=dword:00000001
"EndDay"=dword:00000005
"StartHour"=dword:00000014
"EndHour"=dword:00000016
"HighBandwidthLimit"=dword:00000000
"HighBandwidthType"=dword:00000003
"NormalBandwidthLimit"=dword:00000000
"NormalBandwidthType"=dword:00000003
"LowBandwidthLimit"=dword:00000000
"LowBandwidthType"=dword:00000003 More formats (PowerShell, Intune, SCCM)
PowerShell
# Exported from gporais.com
# Policy: Set up a maintenance schedule to limit the maximum network bandwidth used for BITS background transfers
# State: Enabled
# Supported on: Windows 7 or computers with BITS 3.5 installed.
$path = 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling'
New-Item -Path $path -Force | Out-Null
Set-ItemProperty -Path $path -Name 'EnableMaintenanceLimits' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name 'StartDay' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name 'EndDay' -Value 5 -Type DWord
Set-ItemProperty -Path $path -Name 'StartHour' -Value 20 -Type DWord
Set-ItemProperty -Path $path -Name 'EndHour' -Value 22 -Type DWord
Set-ItemProperty -Path $path -Name 'HighBandwidthLimit' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name 'HighBandwidthType' -Value 3 -Type DWord
Set-ItemProperty -Path $path -Name 'NormalBandwidthLimit' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name 'NormalBandwidthType' -Value 3 -Type DWord
Set-ItemProperty -Path $path -Name 'LowBandwidthLimit' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name 'LowBandwidthType' -Value 3 -Type DWord Intune XML
OMA-URI: ./Device/Vendor/MSFT/Policy/Config/ADMX_Bits/BITS_MaxBandwidthV2_Maintenance
Data type: String
Value:
<enabled/>
<data id="BITS_MaintenanceDaysFrom" value="1"/>
<data id="BITS_MaintenanceDaysTo" value="5"/>
<data id="BITS_MaintenanceHoursFrom" value="20"/>
<data id="BITS_MaintenanceHoursTo" value="22"/>
<data id="BITS_MaintenanceHighPriorityLimit" value="0"/>
<data id="BITS_MaintenanceHighPriorityUnit" value="3"/>
<data id="BITS_MaintenanceNormalPriorityLimit" value="0"/>
<data id="BITS_MaintenanceNormalPriorityUnit" value="3"/>
<data id="BITS_MaintenanceLowPriorityLimit" value="0"/>
<data id="BITS_MaintenanceLowPriorityUnit" value="3"/> Intune Remediation
# === Detection script ===
# Exported from gporais.com
# Policy: Set up a maintenance schedule to limit the maximum network bandwidth used for BITS background transfers
# State: Enabled
# Supported on: Windows 7 or computers with BITS 3.5 installed.
function Test-RegistryValue {
param(
[Parameter(Mandatory = $true)][string]$Path,
[Parameter(Mandatory = $true)][string]$Name,
[object]$Expected,
[ValidateSet('String', 'DWord', 'MultiString')][string]$Kind = 'String',
[switch]$Absent
)
try {
$item = Get-ItemProperty -LiteralPath $Path -Name $Name -ErrorAction Stop
} catch {
return $Absent.IsPresent
}
if ($Absent.IsPresent) { return $false }
$actual = $item.$Name
if ($Kind -eq 'DWord') { return ([int64]$actual) -eq ([int64]$Expected) }
if ($Kind -eq 'MultiString') {
$actualValues = @($actual)
$expectedValues = @($Expected)
if ($actualValues.Count -ne $expectedValues.Count) { return $false }
for ($i = 0; $i -lt $expectedValues.Count; $i++) {
if ([string]$actualValues[$i] -ne [string]$expectedValues[$i]) { return $false }
}
return $true
}
return [string]$actual -eq [string]$Expected
}
$checks = @(
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling' -Name 'EnableMaintenanceLimits' -Expected 1 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling' -Name 'StartDay' -Expected 1 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling' -Name 'EndDay' -Expected 5 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling' -Name 'StartHour' -Expected 20 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling' -Name 'EndHour' -Expected 22 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling' -Name 'HighBandwidthLimit' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling' -Name 'HighBandwidthType' -Expected 3 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling' -Name 'NormalBandwidthLimit' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling' -Name 'NormalBandwidthType' -Expected 3 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling' -Name 'LowBandwidthLimit' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling' -Name 'LowBandwidthType' -Expected 3 -Kind DWord)
)
if ($checks -notcontains $false) {
Write-Output 'Compliant'
exit 0
}
Write-Output 'Non-compliant'
exit 1
# === Remediation script ===
# Exported from gporais.com
# Policy: Set up a maintenance schedule to limit the maximum network bandwidth used for BITS background transfers
# State: Enabled
# Supported on: Windows 7 or computers with BITS 3.5 installed.
$path = 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling'
New-Item -Path $path -Force | Out-Null
Set-ItemProperty -Path $path -Name 'EnableMaintenanceLimits' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name 'StartDay' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name 'EndDay' -Value 5 -Type DWord
Set-ItemProperty -Path $path -Name 'StartHour' -Value 20 -Type DWord
Set-ItemProperty -Path $path -Name 'EndHour' -Value 22 -Type DWord
Set-ItemProperty -Path $path -Name 'HighBandwidthLimit' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name 'HighBandwidthType' -Value 3 -Type DWord
Set-ItemProperty -Path $path -Name 'NormalBandwidthLimit' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name 'NormalBandwidthType' -Value 3 -Type DWord
Set-ItemProperty -Path $path -Name 'LowBandwidthLimit' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name 'LowBandwidthType' -Value 3 -Type DWord SCCM scripts
# Exported from gporais.com
# Policy: Set up a maintenance schedule to limit the maximum network bandwidth used for BITS background transfers
# State: Enabled
# Supported on: Windows 7 or computers with BITS 3.5 installed.
# SCCM Configuration Item guidance:
# Create a Configuration Item of type "Setting: Script".
# Discovery script: use the Detection script below.
# Remediation script: use the Remediation script below.
# Compliance rule: the Discovery script output equals 'Compliant'.
# === Detection script ===
# Exported from gporais.com
# Policy: Set up a maintenance schedule to limit the maximum network bandwidth used for BITS background transfers
# State: Enabled
# Supported on: Windows 7 or computers with BITS 3.5 installed.
function Test-RegistryValue {
param(
[Parameter(Mandatory = $true)][string]$Path,
[Parameter(Mandatory = $true)][string]$Name,
[object]$Expected,
[ValidateSet('String', 'DWord', 'MultiString')][string]$Kind = 'String',
[switch]$Absent
)
try {
$item = Get-ItemProperty -LiteralPath $Path -Name $Name -ErrorAction Stop
} catch {
return $Absent.IsPresent
}
if ($Absent.IsPresent) { return $false }
$actual = $item.$Name
if ($Kind -eq 'DWord') { return ([int64]$actual) -eq ([int64]$Expected) }
if ($Kind -eq 'MultiString') {
$actualValues = @($actual)
$expectedValues = @($Expected)
if ($actualValues.Count -ne $expectedValues.Count) { return $false }
for ($i = 0; $i -lt $expectedValues.Count; $i++) {
if ([string]$actualValues[$i] -ne [string]$expectedValues[$i]) { return $false }
}
return $true
}
return [string]$actual -eq [string]$Expected
}
$checks = @(
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling' -Name 'EnableMaintenanceLimits' -Expected 1 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling' -Name 'StartDay' -Expected 1 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling' -Name 'EndDay' -Expected 5 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling' -Name 'StartHour' -Expected 20 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling' -Name 'EndHour' -Expected 22 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling' -Name 'HighBandwidthLimit' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling' -Name 'HighBandwidthType' -Expected 3 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling' -Name 'NormalBandwidthLimit' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling' -Name 'NormalBandwidthType' -Expected 3 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling' -Name 'LowBandwidthLimit' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling' -Name 'LowBandwidthType' -Expected 3 -Kind DWord)
)
if ($checks -notcontains $false) {
Write-Output 'Compliant'
exit 0
}
Write-Output 'Non-compliant'
exit 1
# === Remediation script ===
# Exported from gporais.com
# Policy: Set up a maintenance schedule to limit the maximum network bandwidth used for BITS background transfers
# State: Enabled
# Supported on: Windows 7 or computers with BITS 3.5 installed.
$path = 'HKLM:\Software\Policies\Microsoft\Windows\BITS\Throttling'
New-Item -Path $path -Force | Out-Null
Set-ItemProperty -Path $path -Name 'EnableMaintenanceLimits' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name 'StartDay' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name 'EndDay' -Value 5 -Type DWord
Set-ItemProperty -Path $path -Name 'StartHour' -Value 20 -Type DWord
Set-ItemProperty -Path $path -Name 'EndHour' -Value 22 -Type DWord
Set-ItemProperty -Path $path -Name 'HighBandwidthLimit' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name 'HighBandwidthType' -Value 3 -Type DWord
Set-ItemProperty -Path $path -Name 'NormalBandwidthLimit' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name 'NormalBandwidthType' -Value 3 -Type DWord
Set-ItemProperty -Path $path -Name 'LowBandwidthLimit' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name 'LowBandwidthType' -Value 3 -Type DWord Building a multi-setting collection? Add this setting and generate combined .reg / PowerShell / GPO scripts.