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.
To get the type of the exception, $_.Exception.GetType().FullName should suffice.
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.