在 PowerShell 中测试 ErrorRecord.CategoryInfo.Category
Test ErrorRecord.CategoryInfo.Category in PowerShell
我正在尝试根据其 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
的方法?
它不起作用的原因是 [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)" }
}
我正在尝试根据其 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
的方法?
它不起作用的原因是 [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)" }
}