首页/系统/Windows 运维速查/PowerShell 版本与环境确认
PowerShell 基础66 条

PowerShell 版本与环境确认

确认当前用的是 Windows PowerShell 5.1 还是 PowerShell 7+:两者语法、默认编码与可用参数存在差异,排错前先对齐版本。

Windows 运维速查系统更新于 2026-10-13

版本与环境确认

排错前先确认用的是 Windows PowerShell 5.1 还是 PowerShell 7 及更高版本:两者默认编码、部分参数与模块可用性都不同,入口程序也不一样,分别是 powershell.exe 与 pwsh.exe,可以同时装在一台机器上。

基本信息

适用平台Windows,PowerShell 7 及以上还可运行在 Linux 与 macOS
查看方式$PSVersionTable、$PSVersionTable.PSVersion、$PSVersionTable.PSEdition
版本对应PSEdition 为 Desktop 表示 5.1,Core 表示 7 及以上
入口程序5.1 是 powershell.exe,7 及以上是 pwsh.exe
模块兼容少数管理模块只在 5.1 下工作,或需要兼容层
默认编码5.1 的 UTF8 带 BOM,7 及以上默认无 BOM

典型使用场景

  • 排查脚本行为差异时,先对齐双方的版本环境
  • 确认计划任务或服务调用的是哪个入口程序
  • 检查模块加载失败是否由版本不匹配引起
  • 部署前确认目标机器的版本是否满足脚本要求
  • 排查中文乱码时对照两个版本的默认编码差异

常用示例

常用示例
# 查看版本与完整版本信息表
$PSVersionTable.PSVersion
$PSVersionTable
# 判断是 5.1 还是 7 及以上
$PSVersionTable.PSEdition
# 查看 7 及以上是否已安装及其路径
Get-Command pwsh -ErrorAction SilentlyContinue
# 查看当前进程实际使用的可执行文件路径
(Get-Process -Id $PID).Path
# 确认默认会调用哪一个入口程序
Get-Command powershell | Select-Object Source

版本差异要点

对比项Windows PowerShell 5.1PowerShell 7 及以上
入口程序powershell.exepwsh.exe
版本系列DesktopCore
默认输出编码UTF8 带 BOM无 BOM 的 UTF8
跨平台仅 WindowsWindows 与 Linux 与 macOS
模块兼容兼容旧模块少数旧模块需兼容方案
计划任务与服务默认调用 powershell.exe,也就是 5.1。想用 7 及以上必须显式写出 pwsh.exe 的完整路径,并确认执行账户有权限访问该路径。
把在 7 上验证通过的脚本直接交给调用 5.1 的计划任务执行,可能因编码与参数差异出现乱码或报错。上线前应在实际调用的版本上完整跑一遍。
交付脚本时可以加一段前置检查:读取版本系列并在不满足要求时直接报错退出。这样别人在错误环境里执行时会立刻看到明确提示,而不是先跑一半再出现难以理解的结果。

易错点

  • 计划任务默认用 5.1 执行,与手工在 7 下测试的环境不一致,问题往往上线后才暴露
  • 两个版本默认编码不同会引发中文乱码,排查时忽略版本差异要多绕很多弯路
  • 少数模块只在 5.1 下可用,在 7 里会直接报模块找不到
  • 只写命令名而未写完整路径,服务或计划任务的执行环境可能找不到对应版本
  • 两个版本各有模块路径,混用会出现加载了非预期版本的模块

数据来源与参考

  • Microsoft Learn:about_PowerShell_Editions
  • Microsoft Learn:about_Automatic_Variables

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌