PoshCode Archive  Artifact [91080434b5]

Artifact 91080434b5a23f8f19ad1575f38bfcf76b4e9e420826bda0d69de11b50153262:

  • File Get-Exception.ps1 — part of check-in [72aed948dd] at 2018-06-10 14:24:29 on branch trunk — Helps you find the right exception to throw. It can take a filter parameter to filter results down. Usage is Get-Exception -filter MYFILTER like Get-Exception Null. (to port to version 1, just remove the multi-line comments) (user: David Mohundro size: 1823)

# encoding: ascii
# api: powershell
# title: Get-Exception
# description: Helps you find the right exception to throw. It can take a filter parameter to filter results down. Usage is Get-Exception -filter MYFILTER like Get-Exception Null. (to port to version 1, just remove the multi-line comments)
# version: 0.1
# type: script
# author: David Mohundro
# license: CC0
# x-poshcode-id: 827
# x-archived: 2017-02-04T06:00:59
# x-published: 2009-01-26T07:46:00
#
#
<#
.Synopsis
	Outputs .NET exception information along with their summary information if available.
.Description
	Spins all loaded types in all loaded assemblies and will return any Exception types that
	match the filter if specified. Because the script only spins loaded assemblies, if you want
	the script to search additional assemblies, you must load them yourself using
	[System.Reflection.Assembly]::Load or related method.
.Notes
NAME:    Get-Exception
AUTHOR:  David Mohundro
URL:     http://www.mohundro.com/blog/
#>

param (
	$filter = ''
)

if ($filter -ne '') {
	$filter = ".*$filter"
}

$exceptions = [System.AppDomain]::CurrentDomain.GetAssemblies() | foreach { 
	$_.GetTypes() | where { $_.FullName -match "System$filter.*Exception$" }
}

$exceptions | foreach {
	$type = $_
	$doc = $_.Assembly.Location.Replace("dll", "xml")
	$summary = 'No summary found.'

	if (Test-Path $doc) {
		$xpath = "/doc/members/member[@name='T:$_']"
		Write-Verbose "Found: $doc"
		Write-Verbose "XPath to use is: $xpath"

		$xml = [xml]$(Get-Content $doc)
		$nodes = $xml.SelectNodes($xpath)

		$nodes | foreach { 
			$summary = $_.summary
		} 
	}

	$result = New-Object PSObject

	$result | 
	Add-Member NoteProperty Name $type.FullName -pass |
	Add-Member NoteProperty Summary $summary

	$result
}