当前位置: 首页 > 知识库问答 >
问题:

如何在PowerShell中捕获异常并将其发送到方法来处理属性?

祁永嘉
2023-03-14

我有一个这样工作的时钟:

catch  [System.InvalidOperationException]
{
     Process-Exception($_.Exception,1111) 
}

然后我想这样处理异常:

# Write exceptions to eventlog and reset socket
function Process-Exception { param ($exception, $eventID)

    $dateTime = Get-Date
    #Write-EventLog -ComputerName $env:COMPUTERNAME -Source PowerShell -LogName Application -EventId $eventID `

    #for now: write-host [string] instead of -Message [string]
    write-host "Date and time:`t" + $dateTime + "`r`n`" 
    write-host "Exception Source:`t" + $exception.Source   
    write-host "Error Code:`t"+ $exception.NativeErrorCode  
    write-host "Exception Message:" + $exception.Message  
    write-host "Stack Trace:`t" + $exception.StackTrace + "`r`n`r`n`

    $socket = $null
}

其中`t是一个选项卡,需要访问$exception属性。不幸的是,当我这样做时,异常没有发送到方法,只有错误代码(本例为1111)被发送。信息是:

 write-host   Stack Trace:   + Cannot find type [[System.InvalidOperationException]]: 
make sure the assembly containing this type is loaded. 9999.StackTrace + 

如何向方法发送完整异常?如果你对代码有改进,请告诉我!

共有3个答案

农均
2023-03-14

这和你的情况不完全一样,但我想知道这是否适合你。据我所知,你的代码看起来不错。我对函数及其参数定义做了一些更改。

function Process-Exception {
    [CmdletBinding()]
    param (
        [System.Exception] $Exception
        , [int] $EventID
    )

    $dateTime = Get-Date
    #Write-EventLog -ComputerName $env:COMPUTERNAME -Source PowerShell -LogName Application -EventId $eventID `

    #for now: write-host [string] instead of -Message [string]
    write-host "Date and time:`t" + $dateTime + "`r`n";
    write-host "Exception Source:`t" + $exception.Source   
    write-host "Error Code:`t"+ $exception.NativeErrorCode  
    write-host "Exception Message:" + $exception.Message  
    write-host "Stack Trace:`t" + $exception.StackTrace + "`r`n`r`n"
}

try {
    [invalidtype]
}
catch [System.Exception] {
    Process-Exception -Exception $_.Exception -EventID 1111;
}
单于浩邈
2023-03-14

您的函数中存在语法错误,您将其称为错误。

  1. 您在行上有额外的波浪线来写入日期时间,在行上有额外的波浪线来写入堆栈跟踪

校正功能:

# Write exceptions to eventlog and reset socket
function Process-Exception { param ([Exception]$exception, [int]$eventID)

    $dateTime = Get-Date

    write-host ("Date and time:`t" + $dateTime + "`r`n")
    write-host ("Exception Source:`t" + $exception.Source)
    write-host ("Error Code:`t"+ $exception.NativeErrorCode)
    write-host ("Exception Message:" + $exception.Message)
    write-host ("Stack Trace:`t" + $exception.StackTrace + "`r`n`r`n")

    $socket = $null
}

在catch块中调用函数的示例:

Process-Exception $_.Exception 111

参考链接:

如何在PowerShell中连接字符串和变量?

圆括号Powershell函数

邓丰
2023-03-14

这是我刚才玩的一些代码。

function Process-Exception
{
    param([System.InvalidOperationException]$Exception, [int] $EventID)
    $dateTime = Get-Date
    #Write-EventLog -ComputerName $env:COMPUTERNAME -Source PowerShell -LogName Application -EventId $eventID `

    #for now: write-host [string] instead of -Message [string]
    write-host "Date and time:`t" + $dateTime + "`r`n`" 
    write-host "Exception Source:`t" + $exception.Source   
    write-host "Error Code:`t"+ $exception.NativeErrorCode  
    write-host "Exception Message:" + $exception.Message  
    write-host "Stack Trace:`t" + $exception.StackTrace + "`r`n`r`n`

    $socket = $null

}

function ExceptionTesting
{
    Try 
    {
        throw  [System.InvalidOperationException] "Here is a message"
    }
    catch [System.InvalidOperationException]
    {
        #Write-Host $_.Exception
        Process-Exception $_.Exception  1111
    }
}

ExceptionTesting
 类似资料:
  • 更新:请参阅下面的“已接受”解决方案 当我的应用程序创建一个未处理的异常时,我希望首先给用户一个发送日志文件的机会,而不是简单地终止。我意识到在得到一个随机异常后做更多的工作是有风险的,但是,嘿,最糟糕的是应用程序崩溃,日志文件不会被发送。事实证明,这比我想象的要棘手:) 工作原理:(1)捕获未捕获的异常,(2)提取日志信息并写入文件。 对如何做到这一点有什么建议吗? 下面是一些作为入门指南的代码

  • 本节介绍如何使用三个异常处理程序组件(try、catch 和 finally)来编写异常处理程序。 然后,介绍了 Java SE 7中引入的 try-with-resources 语句。 try-with-resources 语句特别适合于使用Closeable的资源(例如流)的情况。 本节的最后一部分将通过一个示例来分析在各种情况下发生的情况。 以下示例定义并实现了一个名为ListOfNumbe

  • 我目前在我的路由中使用dotry/doCatch块,因此我无法使用全局onException块。 然而,如果驼峰路由中断(由于错误代码或意外/未测试的场景),我希望执行一些业务逻辑。希望这永远不会发生,但我仍然想处理更糟糕的情况。 我不能在全局OneException块中有java.lang.Exception,而且,我不想在每个路由上都添加一个额外的捕获。 在抛出未捕获的异常和中断路由之前,是否

  • 我正在尝试创建一个过滤器来处理异常(请参见在JSF中处理未捕获的异常) 我在日志中看到错误: 我做错了什么?

  • 问题内容: 发现在Java 1.6(以及从Eclipse)上运行时,吞没了该方法中的异常之后,我试图找到一种捕获这些异常的方法,而不会在我的所有实现中都添加throw / catch 。 该API建议覆盖应对此有所帮助: 导致此future报告一个ExecutionException,并以给定throwable作为其原因,除非已经设置或取消了此Future。计算失败时,run方法在内部调用此方法。

  • 我想处理验证器引发的异常。 我用ControllerAdvice注释创建了异常处理程序。它处理其他异常,但不处理MethodArgumentNotValidException。 异常处理程序 已验证的类(没有getter/setter等) Rest api控制器 Api异常(没有getter/setter等) 目前,我从验证器获得了一个空响应,带有错误的\u请求http状态,而其他异常得到了正确处