目录

PowerShell 7.5.4 升级复盘:从版本提示到一键完成的三种路径

当终端弹出新版本提示时,我是如何在1分钟内完成安全升级的

问题是怎么出现的

今天打开PowerShell准备处理一些脚本任务,刚进入终端就看到了一行熟悉的提示:

PowerShell 7.5.4

   A new PowerShell stable release is available: v7.6.0
   Upgrade now, or check out the release page at:
     https://aka.ms/PowerShell-Release?tag=v7.6.0

PS C:\Users\Administrator>

这是PowerShell内置的版本检测提示,说明我当前用的7.5.4已经不是最新的稳定版了。

最开始我怀疑了什么

看到这个提示的第一反应,其实是有点犹豫的。之前升级系统工具的时候,总怕覆盖安装会出问题,比如会不会把之前配置的PowerShell模块、环境变量搞乱?或者是不是要先卸载旧版本,再装新版本?

甚至最开始我已经点开了那个release链接,准备手动找安装包下载——毕竟以前老版本的PowerShell,好像都是这么干的。

哪些表象其实是误导

最开始的误判,其实是把PowerShell当成了那种需要手动管理的旧软件。我以为像以前一样,必须去官网下安装包,一步步点下一步,还要担心覆盖的问题。

而且我最开始还担心,winget是不是我这个环境没有?毕竟有些精简版的系统,默认是不带winget的,如果用不了的话,是不是还要先装winget?这反而会把事情搞复杂。

还有个误导是,我以为升级之后,之前装的那些模块比如oh-my-posh会不会失效?毕竟版本跨了小版本,会不会有兼容性问题?

我看到了什么关键证据

冷静下来之后,我先去查了微软官方的PowerShell升级文档,才发现现在的PowerShell Core(也就是7.x版本),早就支持原地覆盖升级了,根本不需要卸载旧版本,安装程序会自动替换文件,同时保留所有的用户配置、模块和环境变量。

然后我发现,微软其实提供了好几种升级方式,适配不同的环境:

  1. 如果是带winget的Windows 11或者新版Windows 10,直接用winget一键就能搞定,这是最快的。
  2. 如果没有winget,官方还有个一键安装脚本,一行命令就能自动下载安装最新版。
  3. 如果是离线环境,那才需要手动下MSI包,覆盖安装就行。

而且我还验证了,升级之后,之前的所有模块、配置都完好无损,甚至连我开的oh-my-posh主题都没变化,只是版本更新了。

真正根因是什么

其实这个问题的本质,就是PowerShell 7.x的迭代更新,旧版本的内置版本检测机制提醒你有新版本可用。而PowerShell Core从设计上就支持增量升级,不需要复杂的卸载重装,这和Windows自带的旧版PowerShell 5.1是完全不同的。

之前的那些担心,其实都是旧版PowerShell留下的思维惯性,现在的跨平台PowerShell,早就把升级这件事做得非常简单了。

最终修复方案

整理下来,有三种最实用的升级方式,覆盖绝大多数场景:

方法1:winget 一键升级(推荐,最快)

如果你是Windows 11或者新版Windows 10,自带winget工具,直接在当前PowerShell窗口执行这条命令就行:

winget install --id Microsoft.PowerShell --source winget --force

这条命令会自动拉取最新的稳定版PowerShell,覆盖安装,全程不需要你操作任何东西。

PowerShell 7.5.4

   A new PowerShell stable release is available: v7.6.0
   Upgrade now, or check out the release page at:
     https://aka.ms/PowerShell-Release?tag=v7.6.0

PS C:\Users\Administrator> winget install --id Microsoft.PowerShell --source winget --force
已找到 PowerShell [Microsoft.PowerShell] 版本 7.6.0.0
此应用程序由其所有者授权给你。
Microsoft 对第三方程序包概不负责,也不向第三方程序包授予任何许可证。
正在下载 https://github.com/PowerShell/PowerShell/releases/download/v7.6.0/PowerShell-7.6.0-win-x64.msi
  ██████████████████████████████   109 MB /  109 MB
已成功验证安装程序哈希
正在启动程序包安装...
已放弃安装
PS C:\Users\Administrator> winget install --id Microsoft.PowerShell --source winget --force
已找到 PowerShell [Microsoft.PowerShell] 版本 7.6.0.0
此应用程序由其所有者授权给你。
Microsoft 对第三方程序包概不负责,也不向第三方程序包授予任何许可证。
已成功验证安装程序哈希
正在启动程序包安装...
已成功安装
PS C:\Users\Administrator>

方法2:官方脚本升级(无winget也能用)

如果你的系统没有winget,比如精简版系统,或者旧版Windows,用微软官方的升级脚本,一行命令搞定:

irm https://aka.ms/install-powershell.ps1 | iex

这个脚本会自动检测你的系统架构,下载对应的安装包,自动完成安装,完全不用你管。

方法3:手动安装包(离线/服务器环境)

如果是离线环境,或者服务器不能连外网,那就手动下载安装包:

  1. 打开官方发布页:https://aka.ms/PowerShell-Release?tag=v7.6.0
  2. 下滑找到Assets区域,下载对应你系统的MSI安装包,比如Windows 64位就下PowerShell-7.6.0-win-x64.msi
  3. 双击运行,一路下一步,覆盖安装就行,不会丢任何配置。

验证升级结果

安装完成之后,一定要关闭当前的PowerShell窗口,重新打开,然后执行这条命令验证版本:

$PSVersionTable.PSVersion

如果输出是7.6.0,就说明升级成功了。

PowerShell 7.6.0
PS C:\Users\Administrator> $PSVersionTable.PSVersion

Major  Minor  Patch  PreReleaseLabel BuildLabel
-----  -----  -----  --------------- ----------
7      6      0

PS C:\Users\Administrator>

这次排查最值得记住的经验

  1. 别用旧思维套新工具:PowerShell 7.x和旧的Windows自带PowerShell 5.1完全是两个东西,升级逻辑早就变了,不用再担心覆盖安装出问题。
  2. 优先用系统包管理器:winget现在真的很方便,大部分系统工具都能一键升级,比手动下安装包快太多。
  3. 不同环境选不同方案:有网的环境用脚本或者winget,离线环境才用手动包,不用死磕一种方法。
  4. 升级后一定要重启终端:不然你看到的还是旧版本的进程,会误以为没升级成功。

“同频之人,终会相遇;同行之路,终有光亮。”

若你有故事想讲、有困惑想聊、或是想找个人说说心里话,甚至只是吐槽发泄一下情绪,都欢迎来找我聊聊:

希望我写的每一个字,成为我自己和某个人活下去、拼下去的力量。

“技术终归是工具,而我们一次次认真把问题理顺,守住的其实不只是页面样式和代码输出,还有那一点不愿被混乱打败的心气,是每一个深夜仍愿点灯前行的人。”

「码艺轩・以技立身,实干谋生」系列 · 持续更新

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明来自:https://oklife.me。

文尾配图水墨画图片