【问题标题】:Powershell Cmdlet with Mandatory Parameters带有强制参数的 Powershell Cmdlet
【发布时间】:2011-06-21 23:09:44
【问题描述】:

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

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

new-command

返回以下错误:

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

我做错了什么?

【问题讨论】:

  • 我不能用发布的脚本复制那个错误。
  • 是的。如果我在 new-command 之后不包含参数,则会引发错误,如果我不包含参数,则不会执行任何操作。

标签: powershell parameters powershell-cmdlet


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    试试这个:

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

    函数名后不需要括号。

    【讨论】:

    • 他的代码在 PowerShell V2.0 中有效,但在 V1.0 中无效。在 V1.0 中,代码给出了准确描述的错误
    【解决方案3】:

    在 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
    }
    

    我希望这会有所帮助。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 2012-02-26
          • 2020-10-12
          • 1970-01-01
          • 1970-01-01
          • 2010-12-05
          • 1970-01-01
          • 2015-03-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多