2011-03-08 5 views
40

Tengo un script de powershell (setup.ps1), que usamos como punto de entrada para nuestros scripts de configuración de entorno de desarrollo. Se necesita un parámetro:¿Cómo obtengo los mensajes de ayuda para mis parámetros de script de Powershell?

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

Cuando corro

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

en la sección de parámetros, mi mensaje de ayuda no aparece:

PARAMETERS 
    -Targets <String[]> 

¿Qué tengo que hacer para conseguir mis mensajes de ayuda de parámetros para mostrar?

Respuesta

66

Usted pone un cierto estilo de comentario en la parte superior del archivo que puede ser decodificado por el sistema de ayuda de PowerShell. He aquí un ejemplo:

<# 
.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 
    ) 
    ... 

Para más información ver el tema de ayuda - man about_comment_based_help.

+6

I see. Por lo tanto, la propiedad 'HelpMessage' en el atributo' Parameter' en realidad * es ignorada * por el sistema de ayuda de PowerShell. Eso no es confuso :/ –

+5

Sí, es un poco confuso. Sin embargo, ese atributo de HelpMessage en el parámetro * no * se ignora. Se usa cuando se invoca el comando sin especificar un parámetro obligatorio. En ese punto, se le pedirá que ingrese un valor para ese parámetro. Si especifica un 'HelpMessage', ese texto se muestra como parte de ese aviso. –

+4

Pero solo si ingresas "!?" cuando PowerShell solicita un valor para ese parámetro obligatorio. Esto es poco conocido. – JasonMArcher

11

Al parecer, si usted tiene una cabecera de ayuda definida, sólo puede utilizar una observación (#) detrás del parámetro (en este ejemplo:. objetivos #Los para ejecutar):

<# 
.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. 
) 

Resultados 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. 
+5

Como alternativa, puede colocar el comentario en la línea antes del parámetro, que podría funcionar mejor para descripciones más largas y nombres de param más largos. – 31eee384

+0

¿Por qué no pone el parámetro de destino en la sección donde describe los parámetros, e. gramo. antes o después de '.PARAMETER Path' – Timo

+0

En PS3 obtienes un resultado diferente (mejor) para' get-help -detailed': se muestran todos los parámetros y la descripción en '.PARAMETER'. – Timo

Cuestiones relacionadas