3

いくつかの必須パラメーターを持つ単純な powershell コマンドレットを作成しようとしています。そのための次のコードを見つけましたが、実行できません。

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

new-command

次のエラーを返します。

式に終了 ')' がありません。" 行: 5 文字: 3 + [ <<<< 文字列]$Name

私は何を間違っていますか?

4

5 に答える 5

10

説明は、このスクリプトを PowerShell V1.0 で実行しており、これらの関数属性が PowerShell V2.0 でサポートされているということです。$hostPowerHhell バージョンの変数を見てください。

于 2011-06-22T05:06:28.050 に答える
1

代わりにこれを試してください:

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

new-command

関数名の後に括弧は必要ありません。

于 2011-06-22T04:20:30.583 に答える
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 に答える