PowerShell_ISE执行#Requires命令时出现管道创建错误求助
首先明确你的问题场景:在PowerShell ISE或控制台中使用#Requires -Version 3.0时,触发了如下错误:
An error occurred while creating the pipeline.
- CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordException
- FullyQualifiedErrorId : RuntimeException
你的测试环境PowerShell版本信息如下:
Name Value ---- ----- PSVersion 5.1.14409.1012 PSEdition Desktop PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} BuildVersion 10.0.14409.1012 CLRVersion 4.0.30319.42000 WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1
结合我处理这类问题的经验,下面给你分析具体原因和对应的解决方案:
原因1:#Requires命令位置不符合要求
#Requires是脚本专属指令,必须放在.ps1脚本文件的最开头——前面不能有任何内容,包括空行、其他注释、甚至不可见的特殊字符。如果它不是第一行,PowerShell无法正确识别这个指令,就会抛出错误。
解决方案:
把#Requires移到脚本的第一行,示例如下:
#Requires -Version 3.0 # 这里开始编写你的脚本逻辑 Get-ChildItem -Path C:\
原因2:在交互式控制台直接使用#Requires
很多新手容易踩这个坑:#Requires只能用于脚本文件,不能在交互式PowerShell控制台(包括ISE的命令窗格)中直接输入执行。如果在控制台里敲这个命令,PowerShell会把它当成普通注释,但后续执行时会因为指令上下文不匹配触发报错。
解决方案:
如果要测试#Requires的效果,把它写入.ps1文件后再执行脚本:
- 新建一个
Test-Requires.ps1文件,写入开头的#Requires和测试代码 - 在控制台中执行:
.\Test-Requires.ps1
原因3:脚本文件编码有问题
PowerShell 5.1对无BOM的UTF-8编码支持不够友好,如果你的脚本是用无BOM的UTF-8保存的,开头的#Requires可能会被识别为乱码或无效字符,进而触发报错。
解决方案:
把脚本文件的编码改成UTF-8 with BOM或者ASCII:
- 在PowerShell ISE中:点击「文件」→「另存为」→ 选择编码为「UTF-8」(ISE默认的UTF-8是带BOM的)
- 用VS Code等编辑器:保存时选择「UTF-8 with BOM」编码
额外排查点
如果以上方法都没解决,你可以检查脚本开头是否有不可见的特殊字符(比如零宽空格),用编辑器的「显示所有字符」功能查看,删除多余字符后再测试。
内容的提问来源于stack exchange,提问作者ScriptMonkey

