System › Storage Sense
Configure Storage Sense Cloud Content dehydration threshold
Supported on windows:SUPPORT_WINDOWS_10_0_RS6
What it does
When Storage Sense runs, it can dehydrate cloud-backed content that hasn’t been opened in a certain amount of days. If the group policy "Allow Storage Sense" is disabled, then this policy does not have any effect. Enabled: You must provide the minimum number of days a cloud-backed file can remain unopened before Storage Sense dehydrates it from the sync root. Supported values are: 0 - 365. If you set this value to zero, Storage Sense will not dehydrate any cloud-backed content. The default value is 0, or never dehydrating cloud-backed content. Disabled or Not Configured: By default, Storage Sense will not dehydrate any cloud-backed content. Users can configure this setting in Storage settings.
What it writes
- Hive
- HKEY_LOCAL_MACHINE
- Registry key
Software\Policies\Microsoft\Windows\StorageSense- Value name
ConfigStorageSenseCloudContentDehydrationThreshold
Why it needs changes for Intune
- Policy references a Windows supportedOn definition.
- ADMX-INTUNE-WINDOWS-SUPPORTEDON-REFERENCE
In Intune
Native Intune setting: Yes — Policy CSP
./Device/Vendor/MSFT/Policy/Config/Storage/ConfigStorageSenseCloudContentDehydrationThresholdStorage on Microsoft LearnWindows builds listed: 10.0.18362.
From Microsoft's Policy CSP DDF files (DDF v2 Files, February 2026), read 18 Oct 2026.
Options
| Option | Type | Registry value | Allowed values |
|---|---|---|---|
| Number of days since a cloud-backed file has been opened before Storage Sense will dehydrate it (0 is never dehydrating files)Default: 0 | Number | ConfigStorageSenseCloudContentDehydrationThreshold |
0 to 365 |
Configure and deploy
Choose a state and the option values; the output below is generated from the template for exactly that.
Enabled · Computer · template defaults
Registry file (.reg)
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\StorageSense]
"ConfigStorageSenseCloudContentDehydrationThreshold"=dword:00000000
PowerShell
$ErrorActionPreference = 'Stop'
function Set-RegistryValue {
param(
[Parameter(Mandatory = $true)][string] $Path,
[Parameter(Mandatory = $true)][string] $Name,
[Parameter(Mandatory = $true)][string] $PropertyType,
[Parameter(Mandatory = $true)][object] $Value
)
if (-not (Test-Path -LiteralPath $Path)) {
New-Item -Path $Path -Force | Out-Null
}
New-ItemProperty -LiteralPath $Path -Name $Name -PropertyType $PropertyType -Value $Value -Force | Out-Null
}
function Remove-RegistryValue {
param(
[Parameter(Mandatory = $true)][string] $Path,
[Parameter(Mandatory = $true)][string] $Name
)
if (Test-Path -LiteralPath $Path) {
Remove-ItemProperty -LiteralPath $Path -Name $Name -Force -ErrorAction SilentlyContinue
}
}
function Clear-RegistryKeyValues {
param(
[Parameter(Mandatory = $true)][string] $Path
)
if (-not (Test-Path -LiteralPath $Path)) {
return
}
foreach ($propertyName in (Get-Item -LiteralPath $Path).Property) {
Remove-ItemProperty -LiteralPath $Path -Name $propertyName -Force -ErrorAction SilentlyContinue
}
}
# Policy: Configure Storage Sense Cloud Content dehydration threshold
# Name: SS_ConfigStorageSenseCloudContentDehydrationThreshold
# Scope: Machine
# State: Enabled
# Source: StorageSense.admx
Set-RegistryValue -Path 'Registry::HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\StorageSense' -Name 'ConfigStorageSenseCloudContentDehydrationThreshold' -PropertyType 'DWord' -Value 0
These deployment candidates come from the ADMX template; they are separate from the native CSP mapping above.
- The OMA-URI is an inferred ADMX-backed Policy CSP candidate derived from the source ADMX file name and policy name.
- Some Microsoft policies use built-in Policy CSP pages whose area names don't match the ADMX file name, so verify the candidate against Microsoft Learn before deployment.
ADMX profile candidate (OMA-URI)
./Device/Vendor/MSFT/Policy/Config/ADMX_StorageSense/SS_ConfigStorageSenseCloudContentDehydrationThresholdADMX SyncML candidate
<SyncML xmlns="SYNCML:SYNCML1.2">
<SyncBody>
<Replace>
<CmdID>1</CmdID>
<Item>
<Meta>
<Format>chr</Format>
<Type>text/plain</Type>
</Meta>
<Target>
<LocURI>./Device/Vendor/MSFT/Policy/Config/ADMX_StorageSense/SS_ConfigStorageSenseCloudContentDehydrationThreshold</LocURI>
</Target>
<Data><enabled/>
<data id="StorageSenseCloudContentDehydrationThreshold" value="0"/></Data>
</Item>
</Replace>
<Final/>
</SyncBody>
</SyncML>Intune remediation scripts
Detection
$ErrorActionPreference = 'Stop'
$reasons = [System.Collections.Generic.List[string]]::new()
function Test-RegistryValueExists {
param(
[Parameter(Mandatory = $true)][string] $Path,
[Parameter(Mandatory = $true)][string] $Name
)
if (-not (Test-Path -LiteralPath $Path)) {
return $false
}
return $null -ne (Get-ItemProperty -LiteralPath $Path -Name $Name -ErrorAction SilentlyContinue)
}
function Test-RegistryValueEquals {
param(
[Parameter(Mandatory = $true)][string] $Path,
[Parameter(Mandatory = $true)][string] $Name,
[Parameter(Mandatory = $true)][string] $Kind,
[Parameter(Mandatory = $true)][object] $Expected
)
if (-not (Test-Path -LiteralPath $Path)) {
return $false
}
$valueObject = Get-ItemProperty -LiteralPath $Path -Name $Name -ErrorAction SilentlyContinue
if ($null -eq $valueObject) {
return $false
}
$actual = $valueObject.$Name
switch ($Kind) {
'String' { return [string]$actual -ceq [string]$Expected }
'ExpandString' { return [string]$actual -ceq [string]$Expected }
'DWord' { return [uint32]$actual -eq [uint32]$Expected }
'QWord' { return [uint64]$actual -eq [uint64]$Expected }
'MultiString' {
$actualArray = @($actual)
$expectedArray = @($Expected)
if ($actualArray.Count -ne $expectedArray.Count) { return $false }
for ($index = 0; $index -lt $actualArray.Count; $index++) {
if ([string]$actualArray[$index] -cne [string]$expectedArray[$index]) { return $false }
}
return $true
}
'Binary' {
$actualArray = [byte[]]$actual
$expectedArray = [byte[]]$Expected
if ($actualArray.Length -ne $expectedArray.Length) { return $false }
for ($index = 0; $index -lt $actualArray.Length; $index++) {
if ($actualArray[$index] -ne $expectedArray[$index]) { return $false }
}
return $true
}
default { return [string]$actual -ceq [string]$Expected }
}
}
# Policy: Configure Storage Sense Cloud Content dehydration threshold
# Name: SS_ConfigStorageSenseCloudContentDehydrationThreshold
# Scope: Machine
# State: Enabled
# Source: StorageSense.admx
$isMatch = Test-RegistryValueEquals -Path 'Registry::HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\StorageSense' -Name 'ConfigStorageSenseCloudContentDehydrationThreshold' -Kind 'DWord' -Expected 0
if (-not $isMatch) {
$reasons.Add('Value mismatch: HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\StorageSense\ConfigStorageSenseCloudContentDehydrationThreshold') | Out-Null
}
if ($reasons.Count -eq 0) {
Write-Output 'Compliant'
exit 0
}
$reasons | ForEach-Object { Write-Output $_ }
exit 1
Remediation
$ErrorActionPreference = 'Stop'
function Set-RegistryValue {
param(
[Parameter(Mandatory = $true)][string] $Path,
[Parameter(Mandatory = $true)][string] $Name,
[Parameter(Mandatory = $true)][string] $PropertyType,
[Parameter(Mandatory = $true)][object] $Value
)
if (-not (Test-Path -LiteralPath $Path)) {
New-Item -Path $Path -Force | Out-Null
}
New-ItemProperty -LiteralPath $Path -Name $Name -PropertyType $PropertyType -Value $Value -Force | Out-Null
}
function Remove-RegistryValue {
param(
[Parameter(Mandatory = $true)][string] $Path,
[Parameter(Mandatory = $true)][string] $Name
)
if (Test-Path -LiteralPath $Path) {
Remove-ItemProperty -LiteralPath $Path -Name $Name -Force -ErrorAction SilentlyContinue
}
}
function Clear-RegistryKeyValues {
param(
[Parameter(Mandatory = $true)][string] $Path
)
if (-not (Test-Path -LiteralPath $Path)) {
return
}
foreach ($propertyName in (Get-Item -LiteralPath $Path).Property) {
Remove-ItemProperty -LiteralPath $Path -Name $propertyName -Force -ErrorAction SilentlyContinue
}
}
# Policy: Configure Storage Sense Cloud Content dehydration threshold
# Name: SS_ConfigStorageSenseCloudContentDehydrationThreshold
# Scope: Machine
# State: Enabled
# Source: StorageSense.admx
Set-RegistryValue -Path 'Registry::HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\StorageSense' -Name 'ConfigStorageSenseCloudContentDehydrationThreshold' -PropertyType 'DWord' -Value 0
History 2 retained releases
- 22H2 · 1.015 Jul 2024
- Added in this release.
Template
- Internal name
SS_ConfigStorageSenseCloudContentDehydrationThreshold- Namespace
Microsoft.Policies.StorageSense- Template file
StorageSense.admx- Release
- Windows 10 22H2 · 1.0 · file set
bc15f6a5271783ee…
Definition, editor controls and support
Definition
<policy class="Machine" displayName="$(string.SS_ConfigStorageSenseCloudContentDehydrationThreshold)" explainText="$(string.SS_ConfigStorageSenseCloudContentDehydrationThreshold_Explain)" key="Software\Policies\Microsoft\Windows\StorageSense" name="SS_ConfigStorageSenseCloudContentDehydrationThreshold" presentation="$(presentation.SS_ConfigStorageSenseCloudContentDehydrationThreshold_Presentation)" valueName="ConfigStorageSenseCloudContentDehydrationThreshold" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<parentCategory ref="Microsoft.Policies.StorageSense:StorageSense" />
<supportedOn ref="Microsoft.Policies.Windows:SUPPORT_WINDOWS_10_0_RS6" />
<elements>
<decimal id="StorageSenseCloudContentDehydrationThreshold" maxValue="365" minValue="0" valueName="ConfigStorageSenseCloudContentDehydrationThreshold" />
</elements>
</policy>Editor controls
<presentation id="SS_ConfigStorageSenseCloudContentDehydrationThreshold_Presentation" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<decimalTextBox defaultValue="0" refId="StorageSenseCloudContentDehydrationThreshold">Number of days since a cloud-backed file has been opened before Storage Sense will dehydrate it (0 is never dehydrating files):</decimalTextBox>
</presentation>Supported platforms and category
Microsoft.Policies.StorageSense:category:StorageSense
<category displayName="$(string.StorageSense)" name="StorageSense" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<parentCategory ref="Microsoft.Policies.Windows:System" />
</category>
Microsoft.Policies.StorageSense:unresolved:Microsoft.Policies.Windows:SUPPORT_WINDOWS_10_0_RS6
<unresolved reference="Microsoft.Policies.Windows:SUPPORT_WINDOWS_10_0_RS6" />
Microsoft.Policies.Windows:category:System
<category displayName="$(string.System)" explainText="$(string.System_Help)" name="System" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions" />
Microsoft.Policies.StorageSense:category:StorageSense
<category displayName="$(string.StorageSense)" name="StorageSense" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<parentCategory ref="Microsoft.Policies.Windows:System" />
</category>
<strings><string id="Microsoft.Policies.StorageSense:StorageSense">Storage Sense</string></strings>
Microsoft.Policies.Windows:category:System
<category displayName="$(string.System)" explainText="$(string.System_Help)" name="System" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions" />
<strings><string id="Microsoft.Policies.Windows:System">System</string><string id="Microsoft.Policies.Windows:System_Help">Allows configuration of various system component settings.</string></strings>