functions/get-commandmetadata.ps1
Function Get-CommandMetadata { [CmdletBinding()] [alias('gcmd')] Param( [Parameter( Position = 0, Mandatory, HelpMessage = 'Enter the name of a PowerShell command' )] [ValidateNotNullOrEmpty()] [String]$Command, [String]$NewName, [Switch]$NoHelp ) Try { Write-Verbose "Getting command metadata for $command" $gcm = Get-Command -Name $command -ErrorAction Stop #allow an alias or command name if ($gcm.CommandType -eq 'Alias') { $CmdName = $gcm.ResolvedCommandName } else { $CmdName = $gcm.Name } Write-Verbose "Resolved to $CmdName" $cmd = New-Object System.Management.Automation.CommandMetaData ($gcm) } Catch { Write-Warning "Failed to create command metadata for $command" Write-Warning $_.Exception.Message } if ($cmd) { #create the metadata if ($NewName) { $Name = $NewName } else { $Name = $cmd.Name } if ($noHelp) { #remove help link $cmd.HelpUri = $Null Write-Verbose 'Defining a new comment based help block' #define outline for comment based help $myHelp = @" .Synopsis PUT SYNTAX HERE .Description PUT DESCRIPTION HERE .Notes Created:`t$(Get-Date -Format d) .Example PS C:\> $Name .Link $CmdName "@ Write-Verbose 'Creating proxy command with help' $metadata = [System.Management.Automation.ProxyCommand]::Create($cmd, $myHelp) } #noHelp else { Write-Verbose 'Creating proxy command' $metadata = [System.Management.Automation.ProxyCommand]::Create($cmd) } Write-Verbose 'Cleaning up parameter names' [regex]$rx = '[\s+]\$\{\w+\}[,|)]' $metadata = $metadata.split("`n") | ForEach-Object { If ($rx.IsMatch($_)) { #strip off { } around parameter names $rx.Match($_).Value.Replace('{', '').Replace('}', '') # "`n" } else { #just write the line $_ } } #foreach #define the text for the new command $text = @" #requires -version $($PSVersionTable.PSVersion) Function $Name { $metadata } #end function $Name "@ if ($host.Name -match 'PowerShell ISE') { #open in a new ISE tab $tab = $psISE.CurrentPowerShellTab.Files.Add() Write-Verbose 'Opening metadata in a new ISE tab' $tab.editor.InsertText($Text) #jump to the top $tab.Editor.SetCaretPosition(1, 1) } else { $Text } } Write-Verbose "Ending $($MyInvocation.MyCommand)" } #end function |