web-dev-qa-db-fra.com

Comment faire apparaître des messages d'aide pour mes paramètres de script Powershell?

J'ai un script PowerShell (setup.ps1), que nous utilisons comme point d'entrée pour nos scripts de configuration de l'environnement de développement. Il prend un paramètre:

param(
    [Parameter(Position=0,HelpMessage="The targets to run.")]
    [Alias("t")]
    [string[]]
    $Targets = "Help"
)

Quand je cours

PS > get-help .\setup.ps1 -detailed

dans la section paramètres, mon message d'aide n'apparaît pas:

PARAMETERS
    -Targets <String[]>

Que dois-je faire pour que mes messages d'aide sur les paramètres s'affichent?

56
Aaron Jensen

Vous placez un certain style de commentaire en haut du fichier qui peut être décodé par le système d'aide de PowerShell. Voici un exemple:

<#
.SYNOPSIS
    .
.DESCRIPTION
    .
.PARAMETER Path
    The path to the .
.PARAMETER LiteralPath
    Specifies a path to one or more locations. Unlike Path, the value of 
    LiteralPath is used exactly as it is typed. No characters are interpreted 
    as wildcards. If the path includes escape characters, enclose it in single
    quotation marks. Single quotation marks tell Windows PowerShell not to 
    interpret any characters as escape sequences.
.EXAMPLE
    C:\PS> 
    <Description of example>
.NOTES
    Author: Keith Hill
    Date:   June 28, 2010    
#>
function AdvFuncToProcessPaths
{
    [CmdletBinding(DefaultParameterSetName="Path")]
    param(
        [Parameter(Mandatory=$true, Position=0, ParameterSetName="Path", 
                   ValueFromPipeline=$true, 
                   ValueFromPipelineByPropertyName=$true,
                   HelpMessage="Path to ...")]
        [ValidateNotNullOrEmpty()]
        [string[]]
        $Path,

        [Alias("PSPath")]
        [Parameter(Mandatory=$true, Position=0, ParameterSetName="LiteralPath", 
                   ValueFromPipelineByPropertyName=$true,
                   HelpMessage="Path to ...")]
        [ValidateNotNullOrEmpty()]
        [string[]]
        $LiteralPath
    )
    ...

Pour plus d'informations, consultez la rubrique d'aide - man about_comment_based_help.

90
Keith Hill

Apparemment, si un en-tête d'aide est défini, vous pouvez simplement utiliser une remarque (#) derrière le paramètre (dans cet exemple: # Les cibles à exécuter. ):

<#
.SYNOPSIS
    .
.DESCRIPTION
    .
.PARAMETER Path
    The path to the .
.PARAMETER LiteralPath
    Specifies a path to one or more locations. Unlike Path, the value of 
    LiteralPath is used exactly as it is typed. No characters are interpreted 
    as wildcards. If the path includes escape characters, enclose it in single
    quotation marks. Single quotation marks tell Windows PowerShell not to 
    interpret any characters as escape sequences.
#>

Param(
    [String]$Targets = "Help"   #The targets to run.
)

Résulte en:

PS C:\> Get-help .\Setup.ps1 -Detailed

NAME
    C:\Setup.ps1

SYNOPSIS
    .


SYNTAX
    C:\Setup.ps1 [[-Targets] <String>] [<CommonParameters>]


DESCRIPTION
    .


PARAMETERS
    -Targets <String>
        The targets to run.
19
iRon

un a juste besoin du <# .SYNOPSIS #> partie en haut du fichier pour le faire fonctionner et vous pouvez commentez vos paramètres bien en ligne:

<# .SYNOPSIS #>
param(
   [String]$foo   ## my 1st cool param
  ,[Switch]$bar  ## my 2nd crazy switch
)
...

(vérifié avec PS 5.1.14409.1018)

2
Andreas Dietrich