Get the class of an exception and catch it


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?

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. :slight_smile:

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


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

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.