Powershell使用数据抛出异常

Powershell使用数据抛出异常,powershell,exception,throw,Powershell,Exception,Throw,如何在PowerShell中使用“throw”方向对自定义数据对象引发异常? 喂,它能做到这一点吗 throw 'foo', $myData 然后可以在“捕获”逻辑中使用数据: catch { if ($_.exception.some_property -eq 'foo') { $data = $_.exception.some_field_to_get_data # dealing with data } } 编辑: 我的目的是想知道是否有

如何在PowerShell中使用“throw”方向对自定义数据对象引发异常? 喂,它能做到这一点吗

throw 'foo', $myData
然后可以在“捕获”逻辑中使用数据:

catch {
    if ($_.exception.some_property -eq 'foo') {
        $data = $_.exception.some_field_to_get_data
        # dealing with data
    }
}
编辑:

我的目的是想知道是否有一种简单而酷的语法可以抛出一个异常(无需显式创建我自己的类型),该异常的名称可以由其名称决定,并在“catch”块中处理其数据。

您可以
抛出
任何类型的
系统。异常
实例(这里使用a作为示例):


如果您运行的是5.0或更新版本的PowerShell,则可以使用新的PowerShell类功能定义自定义异常类型:

class MyException : System.Exception
{
    [string]$AnotherMessage
    [int]$SomeNumber

    MyException($Message,$AnotherMessage,$SomeNumber) : base($Message){
        $this.AnotherMessage = $AnotherMessage
        $this.SomeNumber     = $SomeNumber
    }
}

try{
    throw [MyException]::new('Fail!','Something terrible happened',135)
}
catch [MyException] {
    $e = $_.Exception
    if($e.AnotherMessage -eq 'Something terrible happened'){
        Write-Warning "$($e.SomeNumber) terrible things happened"
    }
}

(“坏的XAML!”,$null,10,2)的可能重复项
welp,您如何找到这样的传递方法?@4c74356b41请查看MSDN上的构造函数文档(上面链接),或查看重载定义:
[System.XAML.XamlException]::new
(v5.0+)或
[System.XAML.XamlException].GetConstructors()。%{'new{0}({1})-f$\.DeclaringType,($\.GetParameters()|%{{{0}{1}'-f$\\.ParameterType.FullName,$\.Name})-join',')}
(旧版本)这不完全是我想要的,但它是解决我问题的一个方法。真的很鼓舞人心。多亏了这些!@DaveWu在PS 5.0中添加了一个扩展
系统.Exception
类的示例,例如,在早期版本中,您可以使用C#或VB.NET编写的外部代码来实现这一点
class MyException : System.Exception
{
    [string]$AnotherMessage
    [int]$SomeNumber

    MyException($Message,$AnotherMessage,$SomeNumber) : base($Message){
        $this.AnotherMessage = $AnotherMessage
        $this.SomeNumber     = $SomeNumber
    }
}

try{
    throw [MyException]::new('Fail!','Something terrible happened',135)
}
catch [MyException] {
    $e = $_.Exception
    if($e.AnotherMessage -eq 'Something terrible happened'){
        Write-Warning "$($e.SomeNumber) terrible things happened"
    }
}