资讯动态

如何将 PowerShell 7 设为 Windows Terminal 默认启动项

发布时间:2026/9/20 8:10:09 来源:尧图企业网站定制
1. 为什么折腾默认项PowerShell 5.1 和 7 其实不是同一个东西先说说我为什么专门写这篇。前几天帮一个同事处理终端环境他跟我说“我已经装了 PowerShell 7为什么 Windows Terminal 打开还是老版的”我过去一看他的确装了 7Terminal 里也能手动开 7 的标签页但每次 CtrlShiftT 新建标签或者默认启动跑的还是那个蓝底白字的 Windows PowerShell 5.1。这个问题其实特别典型因为它牵涉到一个很容易被忽略的概念Windows Terminal 是一个终端宿主程序它本身不执行命令它只负责承载各种 shell而“默认项”指的是 Terminal 启动时自动加载的那个 shell 配置文件。换句话说你装好了 PowerShell 7和 Windows Terminal 把 PowerShell 7 当成默认启动项根本是两码事。前者只是往你的系统里多放了一个pwsh.exe后者需要你在 Terminal 的设置里明确指定“以后打开我就用这个程序”。顺带说一句很多人会混淆“Windows PowerShell”和“PowerShell”这两个名字。Windows PowerShell 是随系统附带的老版本目前定格在 5.1基于 .NET Framework而 PowerShell 7 是基于 .NET 的跨平台版本官方直接叫它 PowerShell不再带“Windows”前缀。两者的可执行文件名也不一样老版本是powershell.exe新版本是pwsh.exe。搞清楚这个区别后面所有的配置逻辑就都顺了。这篇文章不是只讲“点哪里、选哪个”这种傻瓜式操作我会把安装方式、配置文件结构、GUID 的作用、执行策略的影响、乱码问题、开机自启脚本这些周边坑全部串起来讲一遍。适合刚接触 Windows Terminal 的新手也适合已经用了很久但一直没理顺默认 shell 的老手——相信我这里面的坑你大概率也踩过。2. 先把 PowerShell 7 装对winget 和离线安装两条路2.1 用 winget 安装三十秒搞定如果你的系统是 Windows 10 1809 以上或者 Windows 11并且自带 winget应用安装程序那么安装 PowerShell 7 最省事的方式就是命令行直接装。打开现有的任意终端执行winget install --id Microsoft.PowerShell --source winget这条命令会自动从官方源拉取最新的稳定版 PowerShell 7安装完成后pwsh.exe会被放到C:\Program Files\PowerShell\7\这个目录下。注意这个路径后面配置 Windows Terminal 的时候要手动填命令行很多人在这一步填错了位置结果 Terminal 根本找不到程序。如果你所在的环境有特殊网络限制winget拉取可能比较慢这时候可以试试指定源winget install --id Microsoft.PowerShell --source msstore这个走的是 Microsoft Store 的渠道更新机制不太一样但对绝大多数人来说用 winget 官方源就够了。2.2 离线安装没有 winget 也能装有些企业内网机器、或者某些精简版系统没有 winget那就走离线安装。到 PowerShell 的 GitHub Releases 页面下载对应的安装包注意区分64 位系统选PowerShell-7.x.x-win-x64.msi32 位系统选PowerShell-7.x.x-win-x86.msi还有一种win-arm64的给 ARM 设备用的下载下来之后双击运行一路下一步就行。MSI 安装包有几个值得注意的选项“Enable PowerShell Remoting”建议勾选这个会在防火墙里放行 WinRM 规则方便你后面用Enter-PSSession远程管理其他机器。“Add ‘Open here’ context menu”建议也勾上这样你在资源管理器里右键文件夹就能直接打开一个 PowerShell 7 窗口个人觉得这个比 Terminal 还好用。其他选项保持默认即可。离线安装还有个隐藏好处MSI 支持静默安装参数。如果你想在公司的多台电脑上统一部署可以用msiexec.exe /i PowerShell-7.4.6-win-x64.msi ADD_EXPLORER_CONTEXT_MENU_OPENPOWERSHELL1 ENABLE_PSREMOTING1 REGISTER_MANIFEST1 /qn这个/qn就是完全静默装完不会弹任何界面适合用组策略或者 SCCM 批量推。2.3 装完第一件事确认版本和路径安装完成后新开一个终端窗口输入$PSVersionTable.PSVersion如果输出的是7.x.x说明你当前运行的就是 PowerShell 7。再确认一下可执行文件路径(Get-Command pwsh).Source正常应该返回C:\Program Files\PowerShell\7\pwsh.exe。如果你看到的是空结果或者路径不对说明PATH环境变量有问题后面我会专门讲这个坑。3. Windows Terminal 里的“默认配置文件”到底改的是什么3.1 先理解 Terminal 的配置模型Windows Terminal 默认支持四个配置文件Windows PowerShell、命令提示符、Azure Cloud Shell以及可能被你忽略的 PowerShell 7。如果你在设置里没看到 PowerShell 7是因为 Terminal 有时候不会自动扫描到新装的 shell需要手动添加。这里的核心概念是“配置文件”Profile。你可以把 Windows Terminal 理解成一个电影院每个配置文件就是一个放映厅放映厅里放什么电影由你自己定。默认配置文件就是“电影院开门后自动开始放映的那个厅”。所以当你把默认配置文件设成 PowerShell 7其实是在告诉 Terminal“以后你被打开的时候直接给我跑pwsh.exe这个程序。”这个逻辑一旦想明白后面不管怎么折腾都不会乱。3.2 配置文件背后的 JSON 结构Windows Terminal 的配置存放在settings.json文件里按快捷键CtrlShift,可以直接打开它。里面最核心的字段有两个{ defaultProfile: {574e775e-4f15-4704-b5c2-8b7e5c0f2f91}, profiles: { list: [ { guid: {574e775e-4f15-4704-b5c2-8b7e5c0f2f91}, name: PowerShell 7, commandline: C:\\Program Files\\PowerShell\\7\\pwsh.exe, icon: C:\\Program Files\\PowerShell\\7\\assets\\powershell.ico } ] } }defaultProfile后面跟的是一串 GUID这串 GUID 必须和profiles.list里某一个配置项的guid完全一致否则 Terminal 不知道你要的“默认”到底是哪个。很多人改了defaultProfile却没生效十有八九就是 GUID 对不上。GUID 的生成方式你可以用 PowerShell 现造一个[guid]::NewGuid().ToString()然后把生成的字符串填进去。但更省事的做法是让 Terminal 自己生成——在设置界面里添加新配置文件时它自动会分配一个唯一的 GUID你只需要改一下名称和命令行就行。3.3 图形界面修改最直观的方式Windows Terminal 的图形设置界面其实已经足够完成大部分需求步骤非常简单打开 Windows Terminal点标签栏右侧的∨下拉箭头选择“设置”。在左侧栏找到“启动”选项卡第一项就是“默认配置文件”。如果下拉菜单里已经出现了“PowerShell 7”直接选它完事。如果没出现点左侧“添加新配置文件”然后手动填写信息。手动填写时注意这几个字段名称填PowerShell 7方便识别。命令行填C:\Program Files\PowerShell\7\pwsh.exe这一项是重中之重填错就直接打不开。图标建议填C:\Program Files\PowerShell\7\assets\powershell.ico这样标签栏能显示 PowerShell 的专属图标赏心悦目。起始目录如果想每次打开都自动定位到某个目录可以填比如%USERPROFILE%不填的话默认是 home。保存之后再把默认配置文件切换成你新添加的这个 PowerShell 7重新打开 Terminal你就会发现启动界面瞬间变成了黑色。4. 手改 settings.json备份、GUID 配对和启动参数4.1 为什么建议你学会手改图形界面能解决 80% 的需求但剩下 20% 的精细配置只能靠手改 JSON。比如你想让 Terminal 启动时自动执行某个脚本、调整启动窗口的大小、设置打开终端的快捷键这些图形界面都不提供。另外手动改 JSON 也让你对配置结构有了深入理解出了问题自己能修。在动文件之前务必先备份。我见过太多人改完 JSON 因为一个小逗号或者括号不匹配导致整个 Terminal 直接闪退打不开。备份方法很简单把settings.json复制一份保存成settings.backup.json后面出问题随时恢复。4.2 手动添加 PowerShell 7 配置项如果你选择手改具体操作如下按CtrlShift,打开settings.json在profiles.list数组里添加一个对象{ guid: {574e775e-4f15-4704-b5c2-8b7e5c0f2f91}, hidden: false, name: PowerShell 7, commandline: C:\\Program Files\\PowerShell\\7\\pwsh.exe, icon: C:\\Program Files\\PowerShell\\7\\assets\\powershell.ico, font: { face: Cascadia Mono, size: 12 }, startingDirectory: %USERPROFILE%, colorScheme: Tango Dark }然后找到 JSON 最外层的defaultProfile字段把它的值改成你刚添加的那个 GUID。注意 JSON 里的反斜杠必须写成双反斜杠\\不少人在这一步漏写导致路径解析失败。保存文件后Windows Terminal 会自动热加载配置不需要重启终端。如果配置有语法错误Terminal 会弹出一个提示框告诉你第几行有问题按提示修就行。4.3 启动参数的进阶玩法commandline字段不只是能填可执行文件路径还可以带上启动参数。比如我想让默认的 PowerShell 7 启动后直接进入某个工作目录并且用-NoExit保持窗口不退出commandline: C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoExit -Command \Set-Location D:\\Projects\这个向量非常实用。我以前经常遇到一个场景电脑开机后第一件事就是打开终端进项目目录以前要手动敲四五条命令现在 Terminal 一开就自动进去了。另一个比较常用的参数是-ExecutionPolicy Bypass用来绕过执行策略。但这里我要多说一句不要随手加这个参数除非你明确知道自己在干什么。执行策略是 PowerShell 的一道安全闸门它的存在本来就是为了阻止未经签名的脚本在你机器上乱跑。如果你因为任何原因需要用 Bypass 方式运行某个脚本用完记得恢复默认策略别让机器一直处于“裸奔”状态。我之前见过一个同事为了跑一个自动配置脚本把执行策略设成了 Unrestricted结果后来某个恶意脚本在他机器上跑了个痛快。这件事给我留下的印象特别深。5. 改完默认项之后执行策略、乱码和版本不对的连环坑5.1 执行策略你看到的“已成功更新”其实另有含义很多人安装完 PowerShell 7 后第一次运行某个脚本会遇到这样的报错无法加载文件 xxx.ps1因为在此系统上禁止运行脚本。这是Set-ExecutionPolicy的默认限制。你在网上搜解决方案大概率会看到“管理员身份运行 PowerShell 然后执行Set-ExecutionPolicy RemoteSigned”这样的答案。这个答案本身是没问题的但我见过太多人执行完这条命令后看到系统提示“Windows PowerShell 已成功更新你的执行策略”就以为万事大吉了结果下次跑脚本还是报同样的错。这里有个关键的坑执行策略是分作用域的。从 PowerShell 5.1 到 7执行策略的配置可能存储在不同的层面。如果你之前在 Windows PowerShell 5.1 里设置过RemoteSigned而 PowerShell 7 里并没有继承这个设置那你在 7 里跑脚本照样会被拦。正确的检查方式是在 PowerShell 7 里运行Get-ExecutionPolicy -List看一下CurrentUser这个作用域的值是什么。如果是Undefined或者Restricted那就以管理员身份执行Set-ExecutionPolicy RemoteSigned -Scope CurrentUserRemoteSigned的含义是本地写的脚本可以直接运行从网上下载的脚本必须带数字签名才能运行。这是日常开发最推荐的策略既不影响本地脚本又能挡住一部分恶意脚本。提示执行策略不是安全边界它只是一个护栏。真正决定脚本能不能跑的最终因素是运行脚本的用户权限。所以不要觉得设了RemoteSigned就万事大吉从网上下载的脚本尤其是那种一行命令直接执行的irm ... | iex运行之前一定要仔细看源码。5.2 乱码问题终端字符集和字体一起惹的祸搜索热词里有一句“deepseek配置windows powershell乱码”说的其实是终端中文乱码的综合问题。乱码有两种常见表现中文变问号、中文变方块。中文变问号大概率是字符集不对。Windows PowerShell 5.1 默认用的是系统 ANSI 编码GBK而 PowerShell 7 默认是 UTF-8。如果你某个脚本文件里写的中文是用 GBK 保存的在 PowerShell 7 里跑就会乱。解决办法是不改终端配置而是把脚本另存为 UTF-8 with BOM——注意最好是带 BOM不然 Windows 下的 PowerShell 可能还会误判。我现在已经养成了习惯所有.ps1文件统一用 UTF-8 with BOM 保存跨机器跨版本都不会出乱子。中文变方块大概率是字体问题。Windows Terminal 在一些旧版字体下无法渲染中文比如默认的 Consolas 就不支持中文。推荐的做法是把字体改成“Microsoft YaHei Mono”或者“Cascadia Mono”这两个字体对中文的支持都很好。修改位置在设置界面 → 配置文件 → 外观 → 字体。另外还有一个快速判断方法在终端里执行chcp看输出的是 936GBK还是 65001UTF-8。如果你希望 PowerShell 7 每次启动都强制 UTF-8可以在 profile 里加一行[Console]::OutputEncoding [System.Text.Encoding]::UTF8但我不太建议无脑加这个因为有些老程序输出 GBK 内容一旦强制 UTF-8 反而会乱按需处理就好。5.3 辛辛苦苦改完了打开还是老版 PowerShell这个问题排在我见过的事故率第一位。你可能已经按照上面的步骤把默认配置文件设成了 PowerShell 7但每次打开终端跑的还是 5.1。教你一招快速检测当前终端里的 shell 到底是谁$PSVersionTable.PSVersion如果显示5.1.x说明你根本没跑在 PowerShell 7 里。这时候就回头检查settings.json里的defaultProfileGUID 是否和 PowerShell 7 配置项的 GUID 一致。注意我强调的是“一致”因为 Terminal 默认的 Windows PowerShell 配置和 PowerShell 7 配置是两个完全不同的 GUID你只改了默认项的名字但没改 GUID 的话表面上看起来是选了 PowerShell 7实际指向的还是老版配置。还有一种比较隐蔽的情况defaultProfile和list里的 GUID 都对但你启动 Terminal 的时候其实是从开始菜单的“Windows PowerShell”快捷方式打开的而不是 Windows Terminal 的快捷方式。开始菜单里那玩意儿是独立的跟 Terminal 半毛钱关系都没有。你装了 Windows Terminal 之后应该养成习惯以后敲wt或者在开始菜单搜“Terminal”来启动而不是搜“PowerShell”。6. 环境变量与周边配置PATH 顺序和 $PROFILE 的启动流程6.1 PATH 顺序导致的问题有一种情况很迷你的defaultProfile设的确实是pwsh.exe但 Windows Terminal 打开之后报错说找不到程序。大概率是commandline里填的路径不对或者PATH环境变量里根本没有 PowerShell 7 的路径。装 MSI 的时候安装程序默认会往系统PATH里加一条C:\Program Files\PowerShell\7\但如果你是用绿色版解压的那就得自己加。手动加环境变量按WinX→ 系统 → 高级系统设置 → 环境变量。在“系统变量”里找到Path编辑新建填入C:\Program Files\PowerShell\7。确定之后重启一下 Windows Terminal让它重新读取环境变量。这里有个小坑Windows Terminal 启动的时候会读取PATH但如果你改完环境变量之后没有重启 Terminal而是在同一个已经开着的会话里敲pwsh系统还是找不到。很多人以为没生效其实只是忘了重启会话。还有一种更隐蔽的情况如果你的机器上同时存在 5.1 和 7并且你手动改过PATH的顺序把老版本的路径放在了前面那么你直接敲powershell进的是 5.1敲pwsh进的才是 7。这两个命令名不一样别搞混。6.2 $PROFILE每次启动自动加载的个性化配置前面反复提到$PROFILE这里展开讲讲。它是 PowerShell 的启动配置文件每次打开新的 PowerShell 窗口时它会自动执行这个文件里的命令。你可以把它理解成 Linux 下的.bashrc。查看当前 profile 文件的路径$PROFILEWindows PowerShell 5.1 的 profile 路径和 PowerShell 7 是不一样的。很多人配置了Oh My Posh、posh-git之类的美化/增强插件结果在 5.1 里配置好了换到 7 里却没有就是因为两个版本的 profile 文件不互通需要在 PowerShell 7 里重新配置一份。如果$PROFILE路径下还没有这个文件先创建New-Item -Path $PROFILE -ItemType File -Force然后打开这个文件往里写内容。下面是我个人 profile 里的一段常用内容仅供参考# 设置默认编码 $OutputEncoding [System.Text.Encoding]::UTF8 # 自定义提示符 function prompt { $location Get-Location $branch git branch --show-current 2$null if ($branch) { PS [$location] ($branch) } else { PS [$location] } } # 常用快捷命令 Set-Alias touch New-Item Set-Alias ll Get-ChildItem执行curl的时候有个坑Windows PowerShell 里curl是Invoke-WebRequest的别名返回的是响应对象而不是文件内容跟 Linux 的curl不是一回事。如果你 PowerShell 7 里的curl变了是因为 7 里面这个别名被移除了。这个细节很多人踩坑顺手也在这里提一下。6.3 开机自启脚本怎么配合默认项搜索热词里有“powershell开机自启脚本”这其实和“将 PowerShell 7 设置为默认项”是强相关的。很多人设完默认项之后想让自己写的某个脚本在开机后自动打开 Terminal 并执行比如自动拉取代码、自动启动开发环境。最简单的方案是用任务计划程序按WinR输入taskschd.msc打开任务计划程序。右侧“创建任务”触发器选择“登录时”操作选择“启动程序”。程序填C:\Program Files\PowerShell\7\pwsh.exe。参数填-NoExit -Command Set-Location D:\Projects\myapp; docker compose up -d; code .这样每次开机登录后自动弹出一个 PowerShell 7 窗口自动进入项目目录、启动 Docker 容器、打开 VS Code。比你手动一步步敲命令舒服多了。但要注意任务计划程序里的 PowerShell 7 默认工作目录不是你的用户目录而是系统目录。所以脚本开头一定要先Set-Location切到目标目录否则你以为在项目目录里敲命令实际可能是在C:\Windows\System32下面删除文件、移动文件这类操作容易出大事。另外如果任务计划程序的操作用的是普通用户权限而你的脚本里需要管理员权限的操作比如改系统服务那就要勾选“使用最高权限运行”。不过这个不是必须的看我前面提到的执行策略就知道权限控制还是要谨慎不要什么脚本都拿管理员权限跑。7. 一个完整示例从零配好默认项并自动加载 Git 环境前面讲了很多零散的知识点这里串起来做一个完整的实操示例你可以跟着一步步走做完就是一套可以直接日常使用的终端环境。假设我的目标需求是Windows Terminal 打开默认跑 PowerShell 7。每次启动自动进入D:\Projects\work目录。显示当前 Git 分支。支持常用的 Git 快捷命令。7.1 安装与定位版本身份假设我已经通过 winget 装好了 PowerShell 7先验证一下winget list --id Microsoft.PowerShell确认安装成功后在 Terminal 里新开一个标签切到 PowerShell 7然后$PSVersionTable.PSVersion确认输出是 7.x。同时执行(Get-Command pwsh).Source确认路径。7.2 配置 Windows Terminal按CtrlShift,打开settings.json确保profiles.list里有这一项GUID 用你自己的不要直接用我示例里的{ guid: {574e775e-4f15-4704-b5c2-8b7e5c0f2f91}, hidden: false, name: PowerShell 7, commandline: C:\\Program Files\\PowerShell\\7\\pwsh.exe, icon: C:\\Program Files\\PowerShell\\7\\assets\\powershell.ico, startingDirectory: D:\\Projects\\work }然后把defaultProfile设成同一个 GUIDdefaultProfile: {574e775e-4f15-4704-b5c2-8b7e5c0f2f91}保存关闭 Terminal重新打开。这个时候你应该看到黑底的 PowerShell 7 窗口并且自动进入了D:\Projects\work。7.3 配置 $PROFILE 实现 Git 分支显示打开 profilenotepad $PROFILE如果提示找不到文件执行New-Item -Path $PROFILE -ItemType File -Force先建出来。在文件里写入Set-Location D:\Projects\work # 显示 Git 分支 function prompt { $location Get-Location $branch git branch --show-current 2$null if ($LASTEXITCODE -eq 0 -and $branch) { Write-Host PS $location -NoNewline Write-Host ($branch) -ForegroundColor Green -NoNewline Write-Host -NoNewline return } else { return PS $location } } # Git 常用简写 Set-Alias g git Set-Alias gst git status Set-Alias gcm git commit -m保存后新开一个 PowerShell 7 标签你就会看到提示符变成了PS D:\Projects\work (main)Git 分支用绿色显示一目了然。以后每次打开终端项目目录和分支状态都清清楚楚。7.4 配合开机自启的完整工作流最后如果你还想让这个环境开机自动出现按前面说的建一个任务计划程序登录时触发程序C:\Program Files\PowerShell\7\pwsh.exe参数-NoLogo -Command wt这样登录后会自动打开 Windows Terminal而 Terminal 的默认配置又会自动加载 PowerShell 7一整套链路就打通了。8. 验证默认项是否真正生效的方法设置完成之后务必要做一次完整的验证。有几个层面第一层确认 Terminal 的默认配置文件打开 Terminal 后看窗口最上方的标签页名称。如果显示的是“PowerShell 7”说明 Terminal 层面已经切过去了。如果显示的是“Windows PowerShell”说明默认配置文件没选对。第二层确认当前进程在终端里执行$PSVersionTable.PSVersion.Major如果想更直接一点用进程名确认(Get-Process -Id $PID).ProcessName输出是pwsh说明你在 PowerShell 7 里输出是powershell说明还在 5.1。第三层确认 PATH 和 pwsh 命令映射新开一个标签直接敲pwsh进入的应该是一个基于 PowerShell 7 的新嵌套会话子进程。如果敲pwsh提示找不到命令说明 PATH 配置有问题。第四层确认 $PROFILE 加载成功执行$PROFILE然后检查你的自定义函数是否可用比如Get-Command ll如果返回了别名信息说明 profile 已经加载。这四层全过你才算真正把 PowerShell 7 变成了 Windows Terminal 的默认项。缺一层都要回头排查。我在实际使用中体会最深的一点是配置这种东西一次配好之后很长时间都不会再动但一旦要动各种细节全忘了。所以你现在趁热打铁把整个流程走一遍比以后出了问题再到处搜教程要省力得多。最后再分享一个小技巧——把settings.json里的 PowerShell 7 配置项连同defaultProfile的 GUID 一起截图存下来万一以后重装系统或者换电脑照着填一遍就能恢复全部环境比从零折腾快太多了。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价