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