set7default.ps1 脚本说明
脚本概述
文件名: set7default.ps1
用途: 将 PowerShell 7 (pwsh) 设置为默认终端 Shell
作者: 大柚子
适用系统: Windows 10 / Windows 11 (需要管理员权限)
依赖:
PowerShell 7 (pwsh.exe)
使用方法
基本用法
# 在 PowerShell 7 中以管理员身份运行脚本.\set7default.ps1权限要求
必须以管理员身份运行。脚本第一行 #Requires -RunAsAdministrator 会强制检查权限,如果权限不足会自动提示。
操作流程
以管理员身份启动 PowerShell 7 切换到脚本所在目录 运行脚本 ( .\set7default.ps1)脚本自动完成以下操作: 检查 PowerShell 7 是否已安装 设置 Windows Terminal 为默认终端应用 设置 Windows Terminal 默认配置文件为 PowerShell 7 更新右键上下文菜单,使其直接打开 PowerShell 7 重新打开终端窗口,更改生效
功能说明
主要功能
这个脚本用于一键设置 PowerShell 7 为默认终端,包括:
将 Windows Terminal 设置为系统默认终端应用 将 Windows Terminal 的默认配置文件设置为 PowerShell 7 更新右键菜单,使其在打开 Windows Terminal 时直接使用 PowerShell 7
执行流程
1. 检查 PowerShell 7 是否已安装
使用 Get-Command pwsh检查pwsh.exe是否在PATH中如果未找到,输出警告信息并退出 (返回退出码 1)
2. 设置 Windows Terminal 为默认终端应用
修改注册表 HKCU:\Console\%%Startup设置 DelegationTerminal为 Windows Terminal 的 GUID设置 DelegationConsole为 Windows Terminal ConPTY 主机的 GUID
3. 设置 Windows Terminal 默认配置文件为 PowerShell 7
读取 Windows Terminal 的配置文件 settings.json按优先级查找 PowerShell 7 配置文件: commandline包含pwsh.exe(手动添加的配置)source包含PowerShellCore(自动发现的配置)name等于"PowerShell"(回退方案)将找到的配置文件的 GUID 设置为 defaultProfile将修改后的配置写回 settings.json(使用 UTF-8 without BOM 编码)
4. 更新右键上下文菜单
修改注册表,更新右键菜单中 Windows Terminal 的启动参数 使用 GUID 而不是名称来指定配置文件 (避免配置文件重命名导致的问题) 处理两个位置的右键菜单: HKCR:\Directory\shell\wt\command(在文件夹上右键)HKCR:\Directory\Background\shell\wt\command(在文件夹空白处右键)
注册表修改详解
1. 设置默认终端应用
注册表路径: HKCU:\Console\%%Startup
DelegationTerminal | {E12CFF52-A866-4C77-9A90-F570A7AA2C6B} | ||
DelegationConsole | {2EACA947-7F5F-4CFA-BA87-8F7FBEEFBE69} |
2. Windows Terminal 配置文件
文件路径: %LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
修改的字段: defaultProfile
查找 PowerShell 7 配置文件的优先级:
commandline包含pwsh.exe→ 手动添加的配置source包含PowerShellCore→ 自动发现的配置name等于"PowerShell"→ 回退方案
3. 右键上下文菜单
HKCR:\Directory\shell\wt\command | |
HKCR:\Directory\Background\shell\wt\command |
修改内容: 在命令末尾添加 -p "<PowerShell 7 的 GUID>" 参数,使 Windows Terminal 使用 PowerShell 7 打开。
输出示例
示例 1: 成功执行
PS C:\ps1> .\set7default.ps1输出:
[OK] Found pwsh: C:\Program Files\PowerShell\7\pwsh.exe[OK] Default terminal app set to Windows Terminal[OK] Windows Terminal defaultProfile set to PowerShell 7 ({...})[OK] Updated context menu: HKCR:\Directory\shell\wt\command[OK] Updated context menu: HKCR:\Directory\Background\shell\wt\commandDone! Please reopen terminal windows for changes to take effect.示例 2: PowerShell 7 未安装
PS C:\ps1> .\set7default.ps1输出:
WARNING: pwsh.exe not found. Please install PowerShell 7 first.示例 3: Windows Terminal 未安装
PS C:\ps1> .\set7default.ps1输出:
[OK] Found pwsh: C:\Program Files\PowerShell\7\pwsh.exe[OK] Default terminal app set to Windows TerminalWARNING: Windows Terminal settings.json not found. Please install Windows Terminal.示例 4: 已经设置过
PS C:\ps1> .\set7default.ps1输出:
[OK] Found pwsh: C:\Program Files\PowerShell\7\pwsh.exe[OK] Default terminal app set to Windows Terminal[SKIP] Windows Terminal defaultProfile is already PowerShell 7 ({...})[SKIP] Context menu already has correct args: HKCR:\Directory\shell\wt\command[SKIP] Context menu already has correct args: HKCR:\Directory\Background\shell\wt\commandDone! Please reopen terminal windows for changes to take effect.技术实现
Cmdlet 使用
Get-Command | |
Test-Path | |
New-Item | |
Set-ItemProperty | |
Get-ItemProperty | |
Get-Content | |
ConvertFrom-Json | |
ConvertTo-Json | |
Set-Content |
参数说明
-Raw | |
-Depth 20 | |
-Encoding utf8NoBOM | |
-Force | |
-First 1 |
应用场景
1. 新系统快速配置
在新安装的 Windows 系统上,运行此脚本可以快速将 PowerShell 7 设置为默认终端,提升命令行体验。
2. 批量部署
在需要批量配置多台计算机的环境中,可以将此脚本与其他配置脚本结合使用。
3. 修复终端配置
如果 Windows Terminal 的默认配置文件被意外修改,可以运行此脚本修复。
注意事项
1. 需要管理员权限
脚本会修改 HKEY_CLASSES_ROOT (HKCR) 注册表项,这需要管理员权限。
2. 需要 PowerShell 7 和 Windows Terminal
脚本依赖以下程序:
PowerShell 7 ( pwsh.exe): 如未安装,请先安装Windows Terminal ( wt.exe): 如未安装,请从 Microsoft Store 安装
3. 修改后立即生效?
默认终端应用: 需要重新打开"设置"应用或重启资源管理器 Windows Terminal 默认配置文件: 需要重新打开 Windows Terminal 右键菜单: 需要重新打开文件资源管理器 (或重启系统)
4. UTF-8 without BOM 编码
脚本使用 utf8NoBOM 编码写入 Windows Terminal 的 settings.json 文件,避免 Windows Terminal 解析错误。
5. GUID 的使用
脚本使用 PowerShell 7 配置文件的 GUID 来指定默认配置文件,而不是使用配置文件名称。这样可以避免因配置文件重命名导致的问题。
扩展与自定义
修改为使用其他终端
如果希望使用其他终端 (如 Windows Console Host),可以修改脚本第 37-38 行:
# 原代码 (使用 Windows Terminal)Set-ItemProperty -Path $startupKey -Name 'DelegationTerminal' -Value '{E12CFF52-A866-4C77-9A90-F570A7AA2C6B}' -Force# 修改为使用 Windows Console HostSet-ItemProperty -Path $startupKey -Name 'DelegationTerminal' -Value '{...}' -Force添加其他配置文件的支持
如果希望将其他配置文件 (如 Git Bash, WSL 等) 设置为默认,可以修改脚本第 56-62 行的查找逻辑:
# 添加对 Git Bash 的支持$pwshProfile = $json.profiles.list | Where-Object { $_.name -match 'Git Bash' } | Select-Object -First 1静默运行 (不输出信息)
可以修改脚本,添加 -Quiet 参数来实现静默运行:
param( [switch]$Quiet)# 然后将所有 Write-Host 改为:if (-not $Quiet) { Write-Host "..."}常见问题 (FAQ)
Q1: 运行脚本后,右键菜单没有变化?
A: 可能是因为:
文件资源管理器缓存了旧的注册表值,尝试重启资源管理器: Stop-Process -Name explorerStart-Process explorer注册表路径不正确,检查 HKCR:\Directory\shell\wt\command是否存在
Q2: 如何恢复为使用 Windows PowerShell 5.1?
A: 可以手动修改 Windows Terminal 的 settings.json 文件,将 defaultProfile 修改为 Windows PowerShell 5.1 的 GUID。
或者,删除 settings.json 文件 (Windows Terminal 会自动重置为默认配置)。
Q3: 脚本可以在 Windows 10 上运行吗?
A: 可以。脚本同时支持 Windows 10 和 Windows 11。
但需要确保:
已安装 Windows Terminal 已安装 PowerShell 7
Q4: 如何查看当前默认的终端应用?
A: 在 PowerShell 中运行:
Get-ItemProperty -Path 'HKCU:\Console\%%Startup'Q5: 脚本会修改系统级别的设置吗?
A: 脚本只修改当前用户的设置 (HKCU 和当前用户的 Windows Terminal 配置),不会影响其他用户。
技术支持
如遇到问题,请检查:
是否以管理员身份运行 PowerShell 是否已安装 PowerShell 7 ( Get-Command pwsh)是否已安装 Windows Terminal ( Get-Command wt)PowerShell 版本是否支持 ( $PSVersionTable.PSVersion)
相关资源
Windows Terminal 文档 PowerShell 7 文档 Windows Terminal settings.json 文档 PowerShell #Requires 语句文档
安全注意事项
权限管理: 脚本需要管理员权限,确保只在可信环境运行 注册表修改: 脚本会修改注册表,建议先在测试环境中运行 备份: 在运行脚本前,可以备份 Windows Terminal 的 settings.json文件
夜雨聆风