Get the class of an exception and catch it

Welcome Forums General PowerShell Q&A Get the class of an exception and catch it

This topic contains 3 replies, has 2 voices, and was last updated by

 
Member
2 years, 9 months ago.

  • Author
    Posts
  • #35157

    Participant
    Points: 0
    Rank: Member

    Hi

    I want to catch only a specific error that is thrown. The problem is that i don't know it's class.

    How can I display the full class name of my exception when it's thrown?

    Example code (including a question). As you see I'm trying to get events from the future. This will throw NoMatchingEventsFound. I want to catch this and only this error.

    $LogName = "Application"
    
    try {
        Get-WinEvent -FilterHashtable @{"LogName" = $LogName; "StartDate" = (Get-Date -Year 2020)} -ErrorAction "Stop"
    } catch {
        $_ # And why can't this be piped to Format-List?
    }
  • #35158

    Member
    Points: 0
    Rank: Member

    Exceptions and ErrorRecords, for whatever reason, need to have the -Force switch used when you pipe them to Format-List and such. I forget why that is, but PowerShell really really wants to display them the way it thinks they should be displayed. 🙂

    To get the type of the exception, $_.Exception.GetType().FullName should suffice.

  • #35262

    Participant
    Points: 0
    Rank: Member

    @dlwyatt

    $_.Exception.GetType().FullName only gives me System.Exception. Is that really the class of the error?

  • #35265

    Member
    Points: 0
    Rank: Member

    That would be very unusual, but not impossible. .NET code (including PowerShell cmdlets) generally considers it a bad practice to just throw the base exception class, rather than subclassing it to something more useful that can be caught and handled specifically.

The topic ‘Get the class of an exception and catch it’ is closed to new replies.