因为Ignore
被解释为文字
不,Ignore
被解释为要执行的命令,因为它是在参数模式(命令调用,如 shell)而不是表达式模式(如传统编程语言)中解析的 - 有关更多信息,请参阅此答案。
虽然明确使用[System.Management.Automation.ActionPreference]
枚举值(如filimonic 的有用答案)绝对是一种选择,但您可以利用PowerShell 自动在值及其符号字符串表示之间来回转换的事实。enum
因此,您可以使用字符串 'Ignore'
作为更方便的替代方法[System.Management.Automation.ActionPreference]::Ignore
:[1]
$gci_args = @{
# ...
ErrorAction = 'Ignore'
}
请注意,引号( '...'
) 向 PowerShell 发出信号,表明应该使用表达式模式解析,即标记是字符串文字而不是命令。
另请注意,-ErrorAction
仅对非终止错误进行操作(但是,这是典型的错误)-有关更多信息,请参见此答案。
至于允许值的发现:-ErrorAction
概念性about_CommonParameters
帮助主题涵盖了所有常用参数,其中-ErrorAction
之一。
许多常用参数都有对应的首选项变量(接受相同的值),包含在 中about_Preference_Variables
,允许您预设常用参数。
交互式地,您可以使用tab-completion来查看允许的值(作为不带引号的符号名称,您只需用引号括起来);例如:
# Pressing the Tab key repeatedly where indicated
# cycles through the acceptable arguments.
Get-ChildItem -ErrorAction <tab>
[1] 请注意,使用字符串并不意味着放弃类型安全,如果上下文明确要求特定enum
类型,例如在这种情况下。鉴于 PowerShell 是一种解释性语言,验证仅在运行时发生。
但是,PowerShell 感知编辑器(例如带有 PowerShell 扩展的 Visual Studio Code)可能会在设计时标记不正确的值。然而,从 version开始,情况似乎并非如此。然而幸运的是,tab-completion和 IntelliSense 可以正常工作,因此问题可能不会出现。
也就是说,作为zett42
2020.6.0
指出,在为后者定义哈希表条目的上下文中,预期的类型(尚)未知,因此明确使用[System.Management.Automation.ActionPreference]
确实有优势:(a)编辑器中的 IntelliSense 可以指导您,并且(b)-假设Set-StrictMode -Version 2
或更高是有效的 - 我们将在运行时早些时候报告一个无效值,即在分配点,这使得故障排除更容易。从 PowerShell 7.1 开始,关于或更高版本的警告是,由于GitHub 问题 #2798Set-StrictMode -Version 2
中描述的错误,您将无法在没有本机类型的对象上使用内在(PowerShell 提供的)属性。.Count