Timeout for inactive BITS jobs
Verified with Windows 11 25H2 — updated on July 30, 2026
Supported on: Windows XP or Windows Server 2003, or computers with BITS 1.5 installed.
Path in the GPO console
Computer Configuration\Administrative Templates\Network\Background Intelligent Transfer Service (BITS) Description
This policy setting specifies the number of days a pending BITS job can remain inactive before the job is considered abandoned. By default BITS will wait 90 days before considering an inactive job abandoned. After a job is determined to be abandoned, the job is deleted from BITS and any downloaded files for the job are deleted from the disk. Note: Any property changes to the job or any successful download action will reset this timeout. Consider increasing the timeout value if computers tend to stay offline for a long period of time and still have pending jobs. Consider decreasing this value if you are concerned about orphaned jobs occupying disk space. If you enable this policy setting, you can configure the inactive job timeout to specified number of days. If you disable or do not configure this policy setting, the default value of 90 (days) will be used for the inactive job timeout.
Registry
Software\Policies\Microsoft\Windows\BITS MDM / Intune (CSP)
./Device/Vendor/MSFT/Policy/Config/BITS/JobInactivityTimeout 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: Timeout for inactive BITS jobs
; State: Enabled
; Supported on: Windows XP or Windows Server 2003, or computers with BITS 1.5 installed.
[HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\BITS]
"JobInactivityTimeout"=dword:0000005a More formats (PowerShell, Intune, SCCM)
PowerShell
# Exported from gporais.com
# Policy: Timeout for inactive BITS jobs
# State: Enabled
# Supported on: Windows XP or Windows Server 2003, or computers with BITS 1.5 installed.
$path = 'HKLM:\Software\Policies\Microsoft\Windows\BITS'
New-Item -Path $path -Force | Out-Null
Set-ItemProperty -Path $path -Name 'JobInactivityTimeout' -Value 90 -Type DWord Intune XML
OMA-URI: ./Device/Vendor/MSFT/Policy/Config/BITS/JobInactivityTimeout
Data type: String
Value:
<enabled/>
<data id="BITS_Job_Timeout_Time" value="90"/> Intune Remediation
# === Detection script ===
# Exported from gporais.com
# Policy: Timeout for inactive BITS jobs
# State: Enabled
# Supported on: Windows XP or Windows Server 2003, or computers with BITS 1.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' -Name 'JobInactivityTimeout' -Expected 90 -Kind DWord)
)
if ($checks -notcontains $false) {
Write-Output 'Compliant'
exit 0
}
Write-Output 'Non-compliant'
exit 1
# === Remediation script ===
# Exported from gporais.com
# Policy: Timeout for inactive BITS jobs
# State: Enabled
# Supported on: Windows XP or Windows Server 2003, or computers with BITS 1.5 installed.
$path = 'HKLM:\Software\Policies\Microsoft\Windows\BITS'
New-Item -Path $path -Force | Out-Null
Set-ItemProperty -Path $path -Name 'JobInactivityTimeout' -Value 90 -Type DWord SCCM scripts
# Exported from gporais.com
# Policy: Timeout for inactive BITS jobs
# State: Enabled
# Supported on: Windows XP or Windows Server 2003, or computers with BITS 1.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: Timeout for inactive BITS jobs
# State: Enabled
# Supported on: Windows XP or Windows Server 2003, or computers with BITS 1.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' -Name 'JobInactivityTimeout' -Expected 90 -Kind DWord)
)
if ($checks -notcontains $false) {
Write-Output 'Compliant'
exit 0
}
Write-Output 'Non-compliant'
exit 1
# === Remediation script ===
# Exported from gporais.com
# Policy: Timeout for inactive BITS jobs
# State: Enabled
# Supported on: Windows XP or Windows Server 2003, or computers with BITS 1.5 installed.
$path = 'HKLM:\Software\Policies\Microsoft\Windows\BITS'
New-Item -Path $path -Force | Out-Null
Set-ItemProperty -Path $path -Name 'JobInactivityTimeout' -Value 90 -Type DWord Building a multi-setting collection? Add this setting and generate combined .reg / PowerShell / GPO scripts.