Public mode

No access to your tenant or devices. Every item links to its source. What this means

Some sources or documents need attention: 258/260 feeds/APIs · 416/444 docs · checked 01:28 UTC Customize Public modeDiscuss ChangeIntel on Discord

Microsoft PowerToys Group Policy settings

81 settings · 0.101.2362.0 · 25 Aug 2026

Back to the list

Microsoft PowerToys › Installer and Updates

Disable per-user installation

ComputerIntune-readyDisablePerUserInstallation

Supported on PowerToys version 0.69.0 or later

What it does

This policy configures whether per-user PowerToys installation is allowed or not. If enabled, per-user installation is not allowed. If disabled or not configured, per-user installation is allowed.

What it writes

Hive
HKEY_LOCAL_MACHINE
Registry key
Software\Policies\PowerToys
Value name
PerUserInstallationDisabled
When enabled
DWORD 1
When disabled
DWORD 0

Configure and deploy

Choose a state; the output below is generated from the template for exactly that.

State

Enabled · Computer · template defaults

Registry file (.reg)

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\Software\Policies\PowerToys]
"PerUserInstallationDisabled"=dword:00000001


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: Disable per-user installation
# Name: DisablePerUserInstallation
# Scope: Machine
# State: Enabled
# Source: PowerToys.admx

Set-RegistryValue -Path 'Registry::HKEY_LOCAL_MACHINE\Software\Policies\PowerToys' -Name 'PerUserInstallationDisabled' -PropertyType 'DWord' -Value 1
  • 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_PowerToys/DisablePerUserInstallation

ADMX 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_PowerToys/DisablePerUserInstallation</LocURI>
        </Target>
        <Data>&lt;enabled/&gt;</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: Disable per-user installation
# Name: DisablePerUserInstallation
# Scope: Machine
# State: Enabled
# Source: PowerToys.admx

$isMatch = Test-RegistryValueEquals -Path 'Registry::HKEY_LOCAL_MACHINE\Software\Policies\PowerToys' -Name 'PerUserInstallationDisabled' -Kind 'DWord' -Expected 1
if (-not $isMatch) {
    $reasons.Add('Value mismatch: HKEY_LOCAL_MACHINE\Software\Policies\PowerToys\PerUserInstallationDisabled') | 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: Disable per-user installation
# Name: DisablePerUserInstallation
# Scope: Machine
# State: Enabled
# Source: PowerToys.admx

Set-RegistryValue -Path 'Registry::HKEY_LOCAL_MACHINE\Software\Policies\PowerToys' -Name 'PerUserInstallationDisabled' -PropertyType 'DWord' -Value 1

History 63 retained releases

  1. 0.81.021 May 2024
    • Supported platforms or category definitions changed.
  2. 0.69.06 Apr 2023
    • Added in this release.

54 later releases left it unchanged.

Template

Internal name
DisablePerUserInstallation
Namespace
Microsoft.Policies.PowerToys
Template file
PowerToys.admx
Release
Microsoft PowerToys 0.101.2362.0 · file set d5e4003f3cfc59f8…
Definition, editor controls and support

Definition

<policy class="Machine" displayName="$(string.DisablePerUserInstallation)" explainText="$(string.DisablePerUserInstallationDescription)" key="Software\Policies\PowerToys" name="DisablePerUserInstallation" valueName="PerUserInstallationDisabled" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
      <parentCategory ref="Microsoft.Policies.PowerToys:InstallerUpdates" />
      <supportedOn ref="Microsoft.Policies.PowerToys:SUPPORTED_POWERTOYS_0_69_0" />
      <enabledValue>
        <decimal value="1" />
      </enabledValue>
      <disabledValue>
        <decimal value="0" />
      </disabledValue>
    </policy>

Editor controls

Supported platforms and category

Microsoft.Policies.PowerToys:category:InstallerUpdates
<category displayName="$(string.InstallerUpdates)" name="InstallerUpdates" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
      <parentCategory ref="Microsoft.Policies.PowerToys:PowerToys" />
    </category>
Microsoft.Policies.PowerToys:category:PowerToys
<category displayName="$(string.PowerToys)" name="PowerToys" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions" />
Microsoft.Policies.PowerToys:definition:SUPPORTED_POWERTOYS_0_69_0
<definition displayName="$(string.SUPPORTED_POWERTOYS_0_69_0)" name="SUPPORTED_POWERTOYS_0_69_0" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions" />
Microsoft.Policies.PowerToys:category:InstallerUpdates
<category displayName="$(string.InstallerUpdates)" name="InstallerUpdates" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
      <parentCategory ref="Microsoft.Policies.PowerToys:PowerToys" />
    </category>
<strings><string id="Microsoft.Policies.PowerToys:InstallerUpdates">Installer and Updates</string></strings>
Microsoft.Policies.PowerToys:category:PowerToys
<category displayName="$(string.PowerToys)" name="PowerToys" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions" />
<strings><string id="Microsoft.Policies.PowerToys:PowerToys">Microsoft PowerToys</string></strings>
Microsoft.Policies.PowerToys:definition:SUPPORTED_POWERTOYS_0_69_0
<definition displayName="$(string.SUPPORTED_POWERTOYS_0_69_0)" name="SUPPORTED_POWERTOYS_0_69_0" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions" />
<strings><string id="Microsoft.Policies.PowerToys:SUPPORTED_POWERTOYS_0_69_0">PowerToys version 0.69.0 or later</string></strings>
ChangeIntel

An IT change radar: releases, security, known issues, retirements, documentation changes, and service status from public sources. Every item links to supporting evidence; dates and statuses can change after they are read.

Sources read 20 Oct 01:28 UTC · 258 of 260 readable · 256 fully read · documentation 416/444 current