Windows Terminal
Default terminal application
Supported on At least Windows 11 22H2 or Windows 10 22H2 (Build 19045.3031, KB5026435) with Windows Terminal 1.17
What it does
Select the default terminal application used in Windows. If you select Windows Terminal Preview and it is not installed the system will fall back to the legacy Windows Console Host. (Please note that the settings interfaces showing "Let windows decide" in this case as configuration.)
What it writes
- Hive
- HKEY_CURRENT_USER
- Registry key
Console\%%Startup
Options
| Option | Type | Registry value | Allowed values |
|---|---|---|---|
| Select from the following optionsRequiredDefault: Automatic selection (Windows Terminal, if available) | Drop-down list | DelegationTerminal |
|
Configure and deploy
Choose a state and the option values; the output below is generated from the template for exactly that.
Enabled · User · template defaults
Registry file (.reg)
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Console\%%Startup]
"DelegationConsole"="{00000000-0000-0000-0000-000000000000}"
"DelegationTerminal"="{00000000-0000-0000-0000-000000000000}"
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: Default terminal application
# Name: DefaultTerminalApplication
# Scope: User
# State: Enabled
# Source: WindowsTerminal.admx
Set-RegistryValue -Path 'Registry::HKEY_CURRENT_USER\Console\%%Startup' -Name 'DelegationTerminal' -PropertyType 'String' -Value '{00000000-0000-0000-0000-000000000000}'
Set-RegistryValue -Path 'Registry::HKEY_CURRENT_USER\Console\%%Startup' -Name 'DelegationConsole' -PropertyType 'String' -Value '{00000000-0000-0000-0000-000000000000}'
- 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)
./User/Vendor/MSFT/Policy/Config/ADMX_WindowsTerminal/DefaultTerminalApplicationADMX SyncML candidate
<SyncML xmlns="SYNCML:SYNCML1.2">
<SyncBody>
<Replace>
<CmdID>1</CmdID>
<Item>
<Meta>
<Format>chr</Format>
<Type>text/plain</Type>
</Meta>
<Target>
<LocURI>./User/Vendor/MSFT/Policy/Config/ADMX_WindowsTerminal/DefaultTerminalApplication</LocURI>
</Target>
<Data><enabled/>
<data id="TermAppSelect" value="{00000000-0000-0000-0000-000000000000}"/></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: Default terminal application
# Name: DefaultTerminalApplication
# Scope: User
# State: Enabled
# Source: WindowsTerminal.admx
$isMatch = Test-RegistryValueEquals -Path 'Registry::HKEY_CURRENT_USER\Console\%%Startup' -Name 'DelegationTerminal' -Kind 'String' -Expected '{00000000-0000-0000-0000-000000000000}'
if (-not $isMatch) {
$reasons.Add('Value mismatch: HKEY_CURRENT_USER\Console\%%Startup\DelegationTerminal') | Out-Null
}
$isMatch = Test-RegistryValueEquals -Path 'Registry::HKEY_CURRENT_USER\Console\%%Startup' -Name 'DelegationConsole' -Kind 'String' -Expected '{00000000-0000-0000-0000-000000000000}'
if (-not $isMatch) {
$reasons.Add('Value mismatch: HKEY_CURRENT_USER\Console\%%Startup\DelegationConsole') | 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: Default terminal application
# Name: DefaultTerminalApplication
# Scope: User
# State: Enabled
# Source: WindowsTerminal.admx
Set-RegistryValue -Path 'Registry::HKEY_CURRENT_USER\Console\%%Startup' -Name 'DelegationTerminal' -PropertyType 'String' -Value '{00000000-0000-0000-0000-000000000000}'
Set-RegistryValue -Path 'Registry::HKEY_CURRENT_USER\Console\%%Startup' -Name 'DelegationConsole' -PropertyType 'String' -Value '{00000000-0000-0000-0000-000000000000}'
History 18 retained releases
- 1.24.10621.05 Mar 2026
- Description
… select Windows Terminal Preview and it is not installed the system will fall[added: ]back to the legacy Windows Console Host. (Please note that the settings interfaces …
Whole description, marked
Select the default terminal application used in Windows. If you select Windows Terminal Preview and it is not installed the system will fall[added: ]back to the legacy Windows Console Host. (Please note that the settings interfaces showing "Let windows decide" in this case as configuration.)
- Description
… select Windows Terminal Preview and it is not installed the system will fall[added: ]back to the legacy Windows Console Host. (Please note that the settings interfaces …
- 1.23.12681.026 Sep 2025
- Description
… select Windows Terminal Preview and it is not installed the system will fall
[removed: ]back to the legacy Windows Console Host. (Please note that the settings interfaces …Whole description, marked
Select the default terminal application used in Windows. If you select Windows Terminal Preview and it is not installed the system will fall
[removed: ]back to the legacy Windows Console Host. (Please note that the settings interfaces showing "Let windows decide" in this case as configuration.)
- Description
… select Windows Terminal Preview and it is not installed the system will fall
- 1.23.12371.026 Aug 2025
- Description
… select Windows Terminal Preview and it is not installed the system will fall[added: ]back to the legacy Windows Console Host. (Please note that the settings interfaces …
Whole description, marked
Select the default terminal application used in Windows. If you select Windows Terminal Preview and it is not installed the system will fall[added: ]back to the legacy Windows Console Host. (Please note that the settings interfaces showing "Let windows decide" in this case as configuration.)
- Description
… select Windows Terminal Preview and it is not installed the system will fall[added: ]back to the legacy Windows Console Host. (Please note that the settings interfaces …
- 1.22.11141.025 Apr 2025
- Added in this release.
10 later releases left it unchanged.
Template
- Internal name
DefaultTerminalApplication- Namespace
Microsoft.Policies.WindowsTerminal- Template file
WindowsTerminal.admx- Release
- Windows Terminal 1.25.2733.0 · file set
93c732305245b595…
Definition, editor controls and support
Definition
<policy class="User" displayName="$(string.DefaultTerminalApplication)" explainText="$(string.DefaultTerminalApplicationText)" key="Console\%%Startup" name="DefaultTerminalApplication" presentation="$(presentation.TermAppSelection)" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<parentCategory ref="Microsoft.Policies.WindowsTerminal:WindowsTerminal" />
<supportedOn ref="Microsoft.Policies.WindowsTerminal:SUPPORTED_DefaultTerminalApplication" />
<elements>
<enum id="TermAppSelect" required="true" valueName="DelegationTerminal">
<item displayName="$(string.TermAppAutomatic)">
<value>
<string>{00000000-0000-0000-0000-000000000000}</string>
</value>
<valueList>
<item key="Console\%%Startup" valueName="DelegationConsole">
<value>
<string>{00000000-0000-0000-0000-000000000000}</string>
</value>
</item>
</valueList>
</item>
<item displayName="$(string.TermAppConsoleHost)">
<value>
<string>{B23D10C0-E52E-411E-9D5B-C09FDF709C7D}</string>
</value>
<valueList>
<item key="Console\%%Startup" valueName="DelegationConsole">
<value>
<string>{B23D10C0-E52E-411E-9D5B-C09FDF709C7D}</string>
</value>
</item>
</valueList>
</item>
<item displayName="$(string.TermAppWindowsTerminal)">
<value>
<string>{E12CFF52-A866-4C77-9A90-F570A7AA2C6B}</string>
</value>
<valueList>
<item key="Console\%%Startup" valueName="DelegationConsole">
<value>
<string>{2EACA947-7F5F-4CFA-BA87-8F7FBEEFBE69}</string>
</value>
</item>
</valueList>
</item>
<item displayName="$(string.TermAppWindowsTerminalPreview)">
<value>
<string>{86633F1F-6454-40EC-89CE-DA4EBA977EE2}</string>
</value>
<valueList>
<item key="Console\%%Startup" valueName="DelegationConsole">
<value>
<string>{06EC847C-C0A5-46B8-92CB-7C92F6E35CD5}</string>
</value>
</item>
</valueList>
</item>
</enum>
</elements>
</policy>Editor controls
<presentation id="TermAppSelection" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<dropdownList defaultItem="0" noSort="true" refId="TermAppSelect">Select from the following options:</dropdownList>
</presentation>Supported platforms and category
Microsoft.Policies.WindowsTerminal:category:WindowsTerminal
<category displayName="$(string.WindowsTerminal)" name="WindowsTerminal" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<parentCategory ref="Microsoft.Policies.Windows:WindowsComponents" />
</category>
Microsoft.Policies.WindowsTerminal:definition:SUPPORTED_DefaultTerminalApplication
<definition displayName="$(string.SUPPORTED_DefaultTerminalApplication)" name="SUPPORTED_DefaultTerminalApplication" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions" />
Microsoft.Policies.WindowsTerminal:unresolved:Microsoft.Policies.Windows:WindowsComponents
<unresolved reference="Microsoft.Policies.Windows:WindowsComponents" />
Microsoft.Policies.WindowsTerminal:category:WindowsTerminal
<category displayName="$(string.WindowsTerminal)" name="WindowsTerminal" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<parentCategory ref="Microsoft.Policies.Windows:WindowsComponents" />
</category>
<strings><string id="Microsoft.Policies.WindowsTerminal:WindowsTerminal">Windows Terminal</string></strings>
Microsoft.Policies.WindowsTerminal:definition:SUPPORTED_DefaultTerminalApplication
<definition displayName="$(string.SUPPORTED_DefaultTerminalApplication)" name="SUPPORTED_DefaultTerminalApplication" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions" />
<strings><string id="Microsoft.Policies.WindowsTerminal:SUPPORTED_DefaultTerminalApplication">At least Windows 11 22H2 or Windows 10 22H2 (Build 19045.3031, KB5026435) with Windows Terminal 1.17</string></strings>