Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@RIKIKU
Last active January 9, 2021 06:55
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RIKIKU/e1c7a8f19c05d65ecd578725e10e0ab6 to your computer and use it in GitHub Desktop.
Save RIKIKU/e1c7a8f19c05d65ecd578725e10e0ab6 to your computer and use it in GitHub Desktop.
Add a parameter to a MAML help file.
<#
.Synopsis
Adds a parameter to an existing, fully formatted help file.
.DESCRIPTION
This thing just looks for your cmdlet name, clones the first existing parameter and appends it to the bottom of the list of parameters for your cmdlet.
.EXAMPLE
Add-HelpParameter -Path "C:\We've\all seen a \Filepath\before-Hlep.xml" -CmdletName New-Shiney -ParameterName "TurboShiney" -Position 1 -TyepName "String" -TypeFullName "System.String"
#>
function Add-HelpParameter
{
[CmdletBinding(SupportsShouldProcess=$false)]
Param
(
# Path to the help file.
[Parameter(Mandatory=$true,Position=0)]
[string]
$Path,
#Name of the cmdlet that you want to add the parameter to.
[Parameter(Mandatory=$true,Position=1)]
[string]
$CmdletName,
# The name of your parameter.
[Parameter(Mandatory=$true,Position=2)]
[string]
$ParameterName,
# The help text that describes your parameter.
[Parameter(Mandatory=$false)]
[string]
$HelpMessage,
# Does this parameter accept Pipeline Input?
[Parameter(Mandatory=$false)]
[switch]
$PipelineInput,
# Is this parameter required?
[Parameter(Mandatory=$false)]
[switch]
$IsRequired,
# This can either be a number, or "named"
[Parameter(Mandatory=$true)]
[ValidatePattern("named|[0-99]")]
[String]
$Position,
# The system type of your parameter. "String[]" for example.
[Parameter(Mandatory=$true)]
[string]
$TyepName,
# The Full Type Name of your parameter. "System.String" for eaxample.
[Parameter(Mandatory=$true)]
[string]
$TypeFullName
)
Begin
{
$found = $false
}
Process
{
[xml] $xmlDoc = get-content $Path -ErrorAction Stop
foreach ($item in ($xmlDoc.helpItems.ChildNodes).GetEnumerator())
{
if($item.details.name -eq $CmdletName)
{
$parameterClone = $item.parameters.parameter[0].Clone()
$parameterClone.required = $IsRequired.ToString().ToLower()
$parameterClone.pipelineInput = $PipelineInput.ToString().ToLower()
$parameterClone.position = $Position.ToLower()
$parameterClone.name = $ParameterName
$parameterClone.description.para = $HelpMessage
$parameterClone.parameterValue.'#text' = $TyepName
$parameterClone.type.name = $TypeFullName
$item.parameters.AppendChild($parameterClone)
$found = $true
}
}
}
End
{
if(!$found){throw "The cmdlet was not found in the specified help file."}
else{$xmlDoc.Save($Path)}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment