Powershell使用数据抛出异常
如何在PowerShell中使用“throw”方向对自定义数据对象引发异常? 喂,它能做到这一点吗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 } } 编辑: 我的目的是想知道是否有
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"
}
}