3

我正在尝试创建一个简单的 powershell cmdlet,它有一些强制性参数。我找到了以下代码,但是,我无法执行它:

function new-command() {
    [CmdletBinding()]
    PARAM (
        [Parameter(Mandatory=$true)]
        [string]$Name
    )
}

new-command

返回以下错误:

表达式中缺少结束 ')'。" 行:5 字符:3 + [ <<<< string]$Name

我究竟做错了什么?

4

5 回答 5

10

解释是您在 PowerShell V1.0 中运行此脚本,并且这些函数属性在 PowerShell V2.0 中受支持。查看$hostPowerHhell 版本的变量。

于 2011-06-22T05:06:28.050 回答
1

在 PS 2.0 中,强制参数通过 CmdLetBinding 和 Parameter 属性控制,如其他答案所示。

function new-command {
    [CmdletBinding()]
    PARAM (
        [Parameter(Mandatory=$true)]
        [string]$Name
    )
    $Name
}

new-command

在 PS 1.0 中,没有用于处理强制属性的直接构造,但例如,如果没有提供强制参数,您可以抛出错误。我经常使用以下构造。

function new-command {
    param($Name=$(throw "Mandatory parameter -Name not supplied."))
    $Name
}

我希望这有帮助。

于 2011-06-22T14:57:05.660 回答
1

如果在脚本开头没有声明 Param(...)(不包括注释行),即使使用 Powershell v2.0,您也会收到相同的错误消息。请参考powershell-2-0-param-keyword-error

于 2012-02-07T13:52:13.343 回答
1

试试这个:

function new-command {
    [CmdletBinding()]
    PARAM (
        [Parameter(Mandatory=$true)]
        [string]$Name
    )
}

new-command

函数名称后不需要括号。

于 2011-06-22T04:20:30.583 回答
0

试试下面的语法,并检查是否遗漏了任何双引号括号

Param([parameter(Mandatory=$true, HelpMessage="Path to file")] $path)

于 2018-11-26T04:53:18.440 回答