gpt4 book ai didi

Powershell 飞溅 : pass ErrorAction = Ignore in hash table

转载 作者:行者123 更新时间:2023-12-02 16:18:27 27 4
gpt4 key购买 nike

这是一个脚本,用于列出在命令行上传递的目录/文件——是否递归:

param( [switch] $r )
@gci_args = @{
Recurse = $r
ErrorAction = Ignore
}
$args | gci @gci_args

现在这不起作用,因为 Ignore 被解释为文字。传递 ErrorAction 的规范方法是什么?

我看到 "Ignore" 和(在 PS7 中){ Ignore } 都作为值工作,但似乎都没有对我的用例产生影响(错误文件在 Linux 下创建的名称,无论 ErrorAction 都会停止 PS5,但根本不会打扰 PS7)。所以我什至不确定该参数是否有任何影响。

最佳答案

because Ignore is interpreted as a literal

不,Ignore 被解释为要执行的命令,因为它是在参数模式 中解析的(命令调用,如 shell)而不是 表达式模式(如传统编程语言)- 参见 this answer获取更多信息。

同时使用 [System.Management.Automation.ActionPreference]枚举值显式,如filimonic's helpful answer , 绝对是一个选项,您可以利用 PowerShell 自动在 enum 值及其符号 string 表示 之间来回转换这一事实。

因此,您可以使用 string 'Ignore' 作为 [System.Management.Automation.ActionPreference 的更方便的替代方法]::忽略:[1]

$gci_args = @{
# ...
ErrorAction = 'Ignore'
}

请注意,引号('...')向 PowerShell 发出信号,表明表达式模式解析应该被使用,即 token 是一个字符串文字而不是一个命令。

另请注意,-ErrorAction 仅对非终止 错误(然而,这是典型的错误)进行操作 - 参见 this answer获取更多信息。


关于允许的-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)可能会在设计时标记不正确的值。然而,从 2020.6.0 版本开始,情况似乎并非。不过,幸运的是,tab-completion 和 IntelliSense 可以按预期工作,所以问题可能不会出现。
也就是说,作为 zett42指出,在为后者定义哈希表条目的上下文中,预期类型(尚)未知,因此显式使用 [System.Management.Automation.ActionPreference] 确实具有优势:(a ) 编辑器中的 IntelliSense 可以指导您,并且 (b) - 假设 Set-StrictMode -Version 2或更高是有效的 - 我们将在运行时较早报告无效值,即在赋值时,这使得故障排除更容易。从 PowerShell 7.1 开始,关于 Set-StrictMode -Version 2 或更高版本的警告是您将无法使用固有的(PowerShell 提供的).Count 属性由于 GitHub issue #2798 中描述的错误,对象本身没有类型.

关于Powershell 飞溅 : pass ErrorAction = Ignore in hash table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66123918/

27 4 0