What it does
Configures password parameters Password complexity: which characters are used when generating a new password Default: Large letters + small letters + numbers + special characters Password length Minimum: 8 characters Maximum: 64 characters Default: 14 characters Password age in days Minimum: 1 day (7 days when backup directory is configured to be Azure AD) Maximum: 365 days Default: 30 days Passphrase length Minimum: 3 words Maximum: 10 words Default: 6 words See https://go.microsoft.com/fwlink/?linkid=2188435 for more information. Passphrase list taken from "Deep Dive: EFF's New Wordlists for Random Passphrases" by Electronic Frontier Foundation, and is used under a CC-BY-3.0 Attribution license. See https://go.microsoft.com/fwlink/?linkid=2255471 for more information.
What it writes
- Hive
- HKEY_LOCAL_MACHINE
- Registry key
SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\LAPS
In Intune
No native CSP; import the ADMX (Intune-ready).
From Microsoft's Policy CSP DDF files (DDF v2 Files, February 2026), read 18 Oct 2026.
Options
| Option | Type | Registry value | Allowed values |
|---|---|---|---|
| Password ComplexityDefault: Large letters + small letters + numbers + specials | Drop-down list | PasswordComplexity |
|
| Password LengthDefault: 14 | Number | PasswordLength |
8 to 64 |
| Password Age (Days)Default: 30 | Number | PasswordAgeDays |
1 to 365 |
| Passphrase Length (words)Default: 6 | Number | PassphraseLength |
3 to 10 |
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\Microsoft\Windows\CurrentVersion\Policies\LAPS]
"PassphraseLength"=dword:00000006
"PasswordAgeDays"=dword:0000001E
"PasswordComplexity"=dword:00000004
"PasswordLength"=dword:0000000E
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: Password Settings
# Name: LAPS_PasswordSettings
# Scope: Machine
# State: Enabled
# Source: LAPS.admx
Set-RegistryValue -Path 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\LAPS' -Name 'PasswordComplexity' -PropertyType 'DWord' -Value 4
Set-RegistryValue -Path 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\LAPS' -Name 'PasswordLength' -PropertyType 'DWord' -Value 14
Set-RegistryValue -Path 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\LAPS' -Name 'PasswordAgeDays' -PropertyType 'DWord' -Value 30
Set-RegistryValue -Path 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\LAPS' -Name 'PassphraseLength' -PropertyType 'DWord' -Value 6
- 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_LAPS/LAPS_PasswordSettingsADMX 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_LAPS/LAPS_PasswordSettings</LocURI>
</Target>
<Data><enabled/>
<data id="LAPS_PasswordComplexity" value="3"/>
<data id="LAPS_PasswordLength" value="14"/>
<data id="LAPS_PasswordAgeDays" value="30"/>
<data id="LAPS_PassphraseLength" value="6"/></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: Password Settings
# Name: LAPS_PasswordSettings
# Scope: Machine
# State: Enabled
# Source: LAPS.admx
$isMatch = Test-RegistryValueEquals -Path 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\LAPS' -Name 'PasswordComplexity' -Kind 'DWord' -Expected 4
if (-not $isMatch) {
$reasons.Add('Value mismatch: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\LAPS\PasswordComplexity') | Out-Null
}
$isMatch = Test-RegistryValueEquals -Path 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\LAPS' -Name 'PasswordLength' -Kind 'DWord' -Expected 14
if (-not $isMatch) {
$reasons.Add('Value mismatch: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\LAPS\PasswordLength') | Out-Null
}
$isMatch = Test-RegistryValueEquals -Path 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\LAPS' -Name 'PasswordAgeDays' -Kind 'DWord' -Expected 30
if (-not $isMatch) {
$reasons.Add('Value mismatch: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\LAPS\PasswordAgeDays') | Out-Null
}
$isMatch = Test-RegistryValueEquals -Path 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\LAPS' -Name 'PassphraseLength' -Kind 'DWord' -Expected 6
if (-not $isMatch) {
$reasons.Add('Value mismatch: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\LAPS\PassphraseLength') | 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: Password Settings
# Name: LAPS_PasswordSettings
# Scope: Machine
# State: Enabled
# Source: LAPS.admx
Set-RegistryValue -Path 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\LAPS' -Name 'PasswordComplexity' -PropertyType 'DWord' -Value 4
Set-RegistryValue -Path 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\LAPS' -Name 'PasswordLength' -PropertyType 'DWord' -Value 14
Set-RegistryValue -Path 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\LAPS' -Name 'PasswordAgeDays' -PropertyType 'DWord' -Value 30
Set-RegistryValue -Path 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\LAPS' -Name 'PassphraseLength' -PropertyType 'DWord' -Value 6
History 5 retained releases
- 24H2 · 1.030 Sep 2024
- Description
… is configured to be Azure AD)
Maximum: 365 days
Default: 30 days
[added: Passphrase length
Minimum: 3 words
Maximum: 10 words
Default: 6 words
]See https://go.microsoft.com/fwlink/?linkid=2188435[added: for more information.
Passphrase list taken from "Deep Dive: EFF's New Wordlists for Random Passphrases" by Electronic Frontier Foundation, and is used under a CC-BY-3.0 Attribution license. See https://go.microsoft.com/fwlink/?linkid=2255471] for more information.
Whole description, marked
Configures password parameters Password complexity: which characters are used when generating a new password Default: Large letters + small letters + numbers + special characters Password length Minimum: 8 characters Maximum: 64 characters Default: 14 characters Password age in days Minimum: 1 day (7 days when backup directory is configured to be Azure AD) Maximum: 365 days Default: 30 days [added: Passphrase length Minimum: 3 words Maximum: 10 words Default: 6 words ]See https://go.microsoft.com/fwlink/?linkid=2188435[added: for more information. Passphrase list taken from "Deep Dive: EFF's New Wordlists for Random Passphrases" by Electronic Frontier Foundation, and is used under a CC-BY-3.0 Attribution license. See https://go.microsoft.com/fwlink/?linkid=2255471] for more information.
- “Password Complexity” gains the choice [added: Large letters + small letters + numbers + specials (improved readability) (5)]
- “Password Complexity” gains the choice [added: Passphrase (long words) (6)]
- “Password Complexity” gains the choice [added: Passphrase (short words) (7)]
- “Password Complexity” gains the choice [added: Passphrase (short words with unique prefixes) (8)]
- New option [added: Passphrase Length (words) (LAPS_PassphraseLength)]
- Editor controls or their defaults changed.
- Description
… is configured to be Azure AD)
Maximum: 365 days
Default: 30 days
[added: Passphrase length
Minimum: 3 words
Maximum: 10 words
Default: 6 words
]See https://go.microsoft.com/fwlink/?linkid=2188435[added: for more information.
Passphrase list taken from "Deep Dive: EFF's New Wordlists for Random Passphrases" by Electronic Frontier Foundation, and is used under a CC-BY-3.0 Attribution license. See https://go.microsoft.com/fwlink/?linkid=2255471] for more information.
- 23H2 · 1.015 Jul 2024
- Template definition changed; registry values, options and limits are the same.
- 22H2 · 3.015 Jul 2024
- Added in this release.
1 later release left it unchanged.
Template
- Internal name
LAPS_PasswordSettings- Namespace
Microsoft.Policies.LAPS- Template file
LAPS.admx- Release
- Windows 11 25H2 · 1.0 · file set
de4e49983ebd651f…
Definition, editor controls and support
Definition
<policy class="Machine" displayName="$(string.LAPS_PasswordSettings)" explainText="$(string.LAPS_PasswordSettings_Help)" key="SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\LAPS" name="LAPS_PasswordSettings" presentation="$(presentation.LAPS_PasswordSettings)" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<parentCategory ref="Microsoft.Policies.LAPS:LAPS_CAT" />
<supportedOn ref="Microsoft.Policies.LAPS:SUPPORTED_Windows10" />
<elements>
<enum id="LAPS_PasswordComplexity" valueName="PasswordComplexity">
<item displayName="$(string.LAPS_PwdComplexity_Item_1)">
<value>
<decimal value="1" />
</value>
</item>
<item displayName="$(string.LAPS_PwdComplexity_Item_2)">
<value>
<decimal value="2" />
</value>
</item>
<item displayName="$(string.LAPS_PwdComplexity_Item_3)">
<value>
<decimal value="3" />
</value>
</item>
<item displayName="$(string.LAPS_PwdComplexity_Item_4)">
<value>
<decimal value="4" />
</value>
</item>
<item displayName="$(string.LAPS_PwdComplexity_Item_5)">
<value>
<decimal value="5" />
</value>
</item>
<item displayName="$(string.LAPS_PwdComplexity_Item_6)">
<value>
<decimal value="6" />
</value>
</item>
<item displayName="$(string.LAPS_PwdComplexity_Item_7)">
<value>
<decimal value="7" />
</value>
</item>
<item displayName="$(string.LAPS_PwdComplexity_Item_8)">
<value>
<decimal value="8" />
</value>
</item>
</enum>
<decimal id="LAPS_PasswordLength" maxValue="64" minValue="8" valueName="PasswordLength" />
<decimal id="LAPS_PasswordAgeDays" maxValue="365" minValue="1" valueName="PasswordAgeDays" />
<decimal id="LAPS_PassphraseLength" maxValue="10" minValue="3" valueName="PassphraseLength" />
</elements>
</policy>Editor controls
<presentation id="LAPS_PasswordSettings" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<dropdownList defaultItem="3" refId="LAPS_PasswordComplexity">Password Complexity</dropdownList>
<decimalTextBox defaultValue="14" refId="LAPS_PasswordLength">Password Length</decimalTextBox>
<decimalTextBox defaultValue="30" refId="LAPS_PasswordAgeDays">Password Age (Days)</decimalTextBox>
<decimalTextBox defaultValue="6" refId="LAPS_PassphraseLength">Passphrase Length (words)</decimalTextBox>
</presentation>Supported platforms and category
Microsoft.Policies.LAPS:category:LAPS_CAT
<category displayName="$(string.LAPS)" name="LAPS_CAT" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<parentCategory ref="Microsoft.Policies.Windows:System" />
</category>
Microsoft.Policies.LAPS:definition:SUPPORTED_Windows10
<definition displayName="$(string.SUPPORTED_Windows10)" name="SUPPORTED_Windows10" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions" />
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.LAPS:category:LAPS_CAT
<category displayName="$(string.LAPS)" name="LAPS_CAT" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<parentCategory ref="Microsoft.Policies.Windows:System" />
</category>
<strings><string id="Microsoft.Policies.LAPS:LAPS">LAPS</string></strings>
Microsoft.Policies.LAPS:definition:SUPPORTED_Windows10
<definition displayName="$(string.SUPPORTED_Windows10)" name="SUPPORTED_Windows10" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions" />
<strings><string id="Microsoft.Policies.LAPS:SUPPORTED_Windows10">At least Microsoft Windows 10 or later</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>