具有强制参数的Powershell Cmdlet

时间:2011-06-21 23:09:45

标签: powershell parameters cmdlet

我正在尝试创建一个简单的PowerShell cmdlet,它具有一些必需参数。我已经找到了以下代码,但是我无法执行它:

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

new-command

返回以下错误:

在表达式中缺少关闭')'。行:5个字符:3 + [<<<<< string] $ Name

我做错了什么?

5 个答案:

答案 0 :(得分:10)

解释是您在PowerShell V1.0中运行此脚本,并且PowerShell V2.0支持这些功能属性。为你的PowerHhell版本查看$host变量。

答案 1 :(得分:1)

请改为尝试:

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

new-command

函数名后面不需要括号。

答案 2 :(得分: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
}

我希望这会有所帮助。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

请尝试以下语法,并请检查是否遗漏了双引号括号

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