Public/Get-ParameterInfo.ps1
# TODO: Switch-Parameter für die Anzeige der Common-Parameter class CmdletParameterInfo { [System.String]$Name [System.String[]]$Aliases [System.String]$TypeName [System.String]$SetName [System.String]$Position [System.Boolean]$IsMandatory [System.Boolean]$IsByValue [System.Boolean]$IsByPropertyName [System.Boolean]$IsDynamic } function Get-ParameterInfo { <# .SYNOPSIS Zeigt eine Übersicht an Cmdlet-Parameter-Informationen die u.a. für das Verständnis der Cmdlet- und Pipeline-Verarbeitung hilfreich sind. .PARAMETERNAME CommandName Command-Let Name das Analysiert werden soll. .EXAMPLE Get-ParameterInfo -CmdletName Get-ChildItem Zeigt Cmdlet-Parameter-Informationen für das Cmdlet Get-ChildItem .OUTPUTS CmdletParameterInfo #> [OutputType('CmdletParameterInfo')] [CmdletBinding()] Param( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [ValidateScript({ try { Get-Command -Name $_ -ErrorAction Stop | Out-Null return $true } catch { throw "Das CommandLet $_ wurde nicht gefunden." } })] [System.String] $CmdletName ) Get-Command -Name "$CmdletName" -PipelineVariable 'command' | Select-Object -ExpandProperty 'Parameters' | Select-Object -ExpandProperty 'Values' | Where-Object -Property 'Name' -NotIn -Value 'Confirm', 'Debug', 'ErrorAction', 'ErrorVariable', 'InformationAction', 'InformationVariable', 'OutBuffer', 'OutVariable', 'PipelineVariable', 'Verbose', 'WarningAction', 'WarningVariable', 'WhatIf' -PipelineVariable 'parameter' | Select-Object -ExpandProperty 'Attributes' -PipelineVariable 'attribute' | Where-Object -FilterScript { $attribute.TypeId.Name -eq 'ParameterAttribute' } | ForEach-Object -Process { $result = [CmdletParameterInfo]::new() $result.Name = $parameter.Name $result.Aliases = $parameter.Aliases $result.TypeName = $parameter.ParameterType.Name $result.SetName = $attribute.ParameterSetName $result.Position = $attribute.Position $result.IsMandatory = $attribute.Mandatory $result.IsByValue = $attribute.ValueFromPipeline $result.IsByPropertyName = $attribute.ValueFromPipelineByPropertyName $result.IsDynamic = $parameter.IsDynamic if([int]$result.Position -lt 0) { $result.Position = 'Named' } $parameterSetInfo = $command.ParameterSets | Where-Object -Property 'Name' -EQ -Value $attribute.ParameterSetName if ($null -ne $parameterSetInfo -and $parameterSetInfo.IsDefault) { $result.SetName += " (Default)" } $result.SetName = $result.SetName -replace '__', [String]::Empty return $result } | Sort-Object -Property 'SetName', 'Name' } |