如何获取Powershell脚本参数的帮助消息?

如何获取Powershell脚本参数的帮助消息?,powershell,powershell-2.0,Powershell,Powershell 2.0,我有一个powershell脚本(setup.ps1),我们将其用作开发环境设置脚本的入口点。它接受一个参数: param( [Parameter(Position=0,HelpMessage="The targets to run.")] [Alias("t")] [string[]] $Targets = "Help" ) 当我跑的时候 PS > get-help .\setup.ps1 -detailed 在参数部分,我的帮助消息不会出现: PAR

我有一个powershell脚本(
setup.ps1
),我们将其用作开发环境设置脚本的入口点。它接受一个参数:

param(
    [Parameter(Position=0,HelpMessage="The targets to run.")]
    [Alias("t")]
    [string[]]
    $Targets = "Help"
)
当我跑的时候

PS > get-help .\setup.ps1 -detailed
在参数部分,我的帮助消息不会出现:

PARAMETERS
    -Targets <String[]>
参数
-目标

要显示我的参数帮助消息,我需要做什么?

您可以在文件顶部放置某种样式的注释,PowerShell帮助系统可以对其进行解码。下面是一个例子:

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

.注释
作者:基思·希尔
日期:2010年6月28日
#>
函数advFunctoProcessPath
{
[CmdletBinding(DefaultParameterSetName=“Path”)]
param(
[参数(必需=$true,位置=0,参数setName=“Path”,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true,
HelpMessage=“指向…”的路径]
[ValidateNotNullOrEmpty()]
[字符串[]]
$Path,
[别名(“PSPath”)]
[参数(必需=$true,位置=0,参数setName=“LiteralPath”,
ValueFromPipelineByPropertyName=$true,
HelpMessage=“指向…”的路径]
[ValidateNotNullOrEmpty()]
[字符串[]]
$LiteralPath
)
...

有关更多信息,请参阅帮助主题-
man about_comment_-based_-help

显然,如果定义了帮助标题,您可以在参数后面使用备注(#)(在本例中:#要运行的目标。):


Param(
[String]$Targets=“Help”#要运行的目标。
)
结果:

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.
PS C:\>获取帮助。\Setup.ps1-详细信息
名称
C:\Setup.ps1
提要
.
语法
C:\Setup.ps1[[-Targets][]
描述
.
参数
-目标
要运行的目标。

one只需要文件顶部的
部分就可以工作,您可以很好地内联注释您的参数

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

param(
[String]$foo##我的第一个酷情人
,[开关]$bar##我的第二个疯狂开关
)
...

(使用PS 5.1.14409.1018检查)

我明白了。因此,PowerShell帮助系统实际上忽略了
参数
属性上的
HelpMessage
属性。这并不令人困惑。:/Yeah,这有点让人困惑。但是参数表上的HelpMessage属性并没有被忽略。当您调用命令时,在不指定强制参数的情况下使用它。在此时,系统会提示您输入该参数的值。如果您指定了
帮助消息
,则该文本将作为提示的一部分显示。但仅当您输入“!?”当PowerShell提示输入该强制参数的值时。这一点鲜为人知。@JasonMArcher-ISE会显示帮助消息,而无需额外努力。显然,只有在使用上面的参数块样式声明参数时,这一点才有效(对我来说,这是非常冗长和繁琐的)。我编写的函数与常规编程函数类似,而
get help
不能像上面那样处理文档块。或者,您可以将注释放在参数前面的行上,这对于较长的描述和较长的参数名可能更有效。为什么不将目标参数放在您描述的部分中参数,例如在PS3中的
之前或之后。参数路径
对于
获取帮助-详细信息
,您会得到不同(更好)的结果:
中的所有参数和描述。参数
都会显示出来。奇怪的是,如果我使用上面的“完整”选项,那么只使用这一行就可以减少输出量……我喜欢它!