【问题标题】:Test ErrorRecord.CategoryInfo.Category in PowerShell在 PowerShell 中测试 ErrorRecord.CategoryInfo.Category
【发布时间】:2016-05-15 23:59:53
【问题描述】:

我正在尝试根据其ErrorRecord.CategoryInfo.Category 枚举值处理错误。

代码:

try {
    # assembly not installed on workstation
    [Reflection.Assembly]::LoadWithPartialName('Oracle.DataAccess')
    # throws error with a category of 'InvalidType'
    $connection = New-Object Oracle.DataAccess.Client.OracleConnection($ConnectionString)
    $Connection.Open()

}
catch {
    # generates 'DEBUG: CategoryInfo.Category: InvalidType'
    write-debug "CategoryInfo.Category: $($_.CategoryInfo.Category)"

    # generates 'DEBUG: Category: InvalidType' (the `default` switch)
    switch ($_.CategoryInfo.Category) {
        [ErrorCategory.InvalidType] {Write-Debug "InvalidType"}
        [ErrorCategory.InvalidOperation] {Write-Debug "InvalidOperation"}
        default { write-Debug "Category: $($_.CategoryInfo.Category)" }
    }
}

为什么代码不执行ErrorCategory.InvalidType 开关,而不是default 开关?

Referencing system.management.automation.dll in Visual Studio 接受的答案表明我需要安装 system.management.automation 程序集。

有没有一种方法可以测试$_.CategoryInfo.Category 而无需安装此程序集?

【问题讨论】:

  • 我看不出链接的问题是如何相关的。 System.Management.Automation.dll 是 PowerShell 的核心。您只需要引用它就可以在 C#/VbScript 中使用 PowerShell

标签: powershell powershell-5.0


【解决方案1】:

它不起作用的原因是[ErrorCategory.InvalidType] 不是使用枚举的 PowerShell 语法。

您可以直接指定枚举值(名称)并让 PowerShell 对其进行转换,也可以直接访问枚举。例如:

switch ($_.CategoryInfo.Category) {
    InvalidType {Write-Debug "InvalidType"}
    ([System.Management.Automation.ErrorCategory]::InvalidOperation) {Write-Debug "InvalidOperation"}
    default { write-Debug "Category: $($_.CategoryInfo.Category)" }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多