# 同时支持 Windows PowerShell 5.1 与 PowerShell 7.x,源文件一律 UTF-8 with BOM README 一开始就承诺"只依赖 PowerShell(5.1 或 7.x)",但实测发现**这个承诺是假的**:全部 源文件是无 BOM 的 UTF-8,而 5.1 在没有 BOM 时按 ANSI 代码页解码源码 —— 中文变乱码,全角 问号之类的字节序列吃掉字符串引号,**6/6 个文件在 5.1 上连语法都过不去**。 决定继续兑现这个承诺,因为计划任务默认可能就用 `powershell.exe` 启动。具体约定: - 含非 ASCII 的源文件一律 **UTF-8 with BOM**(.editorconfig 里钉死 `charset = utf-8-bom`), 这是同时满足 5.1 与 7 的唯一编码; - 版本声明写 `#Requires -Version 5.1`,**绝不**写 `#Requires -PSEdition`(两个值互斥, 写哪个都会把另一半环境排除掉);清单里用 `CompatiblePSEditions = @('Desktop','Core')`; - 不用 `??` / 三元 / `Join-String` / `-AsHashtable` / 三参数 `File.Move`(它是 .NET Core 3.0+ 才有的重载,我们改为 `File.Replace`,那个在 .NET Framework 上同样可用); - 验收门槛在**两个版本上都跑**,而不是只在 7 上跑完宣称兼容。 代价:`#Requires -Version 5.1` 意味着放弃 PS 4.0 及以下;BOM 让某些 Unix 工具不喜欢这些文件。 两者都是刻意的。