Private/Export-ParameterBlock.ps1
|
Function Export-ParameterBlock { <# .SYNOPSIS Exports all the parameters and their options for each cmdlet in a specified module .EXAMPLE Export-ParameterBlock -CmdletPath <Path to cmdlet> -Format $true #> param( [Parameter(Mandatory=$true, Position=0, HelpMessage="The file path to the module to extract parameters from.")] [string]$CmdletPath, [Parameter(Mandatory=$false, Position=1, HelpMessage="Indicates whether to format the output.")] [Boolean]$Format = $true ) $StringBlock = '' $Parameter = Get-Parameters -CmdletPath $CmdletPath If($Null -eq $Parameter.Parameters) { Return $Null } $LongestParameterName = ($Parameter.Parameters.Name | Sort-Object Length -Descending | Select-Object -First 1).Length $LongestParameterType = ($Parameter.Parameters.Type | Sort-Object Length -Descending | Select-Object -First 1).Length $ParameterSetNames = $Parameter.Parameters.Options.ParameterSetName | Sort-Object -Unique If($ParameterSetNames.Count -eq 0) { $StringBlock += "$($Parameter.Name)`n" $StringBlock += "`n" ForEach($ParameterObject in $Parameter.Parameters) { $Spaces = (($LongestParameterName - $ParameterObject.Name.Length) + ($LongestParameterType - $ParameterObject.Type.Length)) + 1 If($Format -eq $false) { $Spaces = 1 } If($ParameterObject.Type -eq 'Non Specified') { $StringBlock += "`t[-$($ParameterObject.Name)$(" " * $Spaces)<[ ]>]`n" } Else { $StringBlock += "`t[-$($ParameterObject.Name)$(" " * $Spaces)<$($ParameterObject.Type)[ ]>]`n" } } $StringBlock += "`t[<CommonParameters>]`n`n`n" } Else { ForEach($ParameterSetName in $ParameterSetNames) { $StringBlock += "$($Parameter.Name)`n" $StringBlock += "`n" ForEach($ParameterObject in $Parameter.Parameters) { $ParameterObjectParameterSetName = $ParameterObject.Options.ParameterSetName | Sort-Object -Unique If(($ParameterObjectParameterSetName -eq $ParameterSetName) -or ($null -eq $ParameterObject.Options.ParameterSetName)) { $Spaces = (($LongestParameterName - $ParameterObject.Name.Length) + ($LongestParameterType - $ParameterObject.Type.Length)) + 1 If($Format -eq $false) { $Spaces = 1 } If($ParameterObject.Type -eq 'Non Specified') { $StringBlock += "`t[-$($ParameterObject.Name)$(" " * $Spaces)<[ ]>]`n" } Else { $StringBlock += "`t[-$($ParameterObject.Name)$(" " * $Spaces)<$($ParameterObject.Type)[ ]>]`n" } } } $StringBlock += "`t[<CommonParameters>]`n`n`n" } } $Object = [pscustomobject]@{ "CmdletName" = $($Parameter.Name) "Block" = $StringBlock.Trim() "ParameterInfo" = $($Parameter.Parameters) } Return $Object } |