PowerShell のスイッチパラメータのような列挙型 質問する

PowerShell のスイッチパラメータのような列挙型 質問する

私は PowerShell スクリプトでスイッチ パラメータをこのように使用しています。

param(
    [switch] $Word,
    [switch] $Excel,
    [switch] $powerpoint,
    [switch] $v2007,
    [switch] $v2010,
    [switch] $x86,
    [switch] $x64,
)

私はそれをもっと列挙型スタイルにする良い方法を見つけようとしています。誰もが推測すると思いますが、私はユーザーに Word、Excel、PowerPoint の中から選択してもらいたいと思っています。そして、x2007 と v2010 の間でも選択してもらいたいと思っています。

入力パラメータを列挙型スタイルで取得する簡単な方法はありますか?

私は PowerShell を初めて使用します。したがって、明らかなことを私が知らないように思われる場合は、それについて読むことができるリンクを教えてください。

ベストアンサー1

代わりにパラメータ属性を使用しますValidateSet

から:関数の詳細パラメータについて

ValidateSet 属性は、パラメーターまたは変数の有効な値のセットを指定します。パラメーターまたは変数の値がセット内の値と一致しない場合、Windows PowerShell はエラーを生成します。

関数の例:

function test-value
{
    param(
        [Parameter(Position=0)]
        [ValidateSet('word','excel','powerpoint')]
        [System.String]$Application,

        [Parameter(Position=1)]
        [ValidateSet('v2007','v2010')]
        [System.String]$Version
    )


    write-host "Application: $Application"
    write-host "Version: $Version"
}   


PS > test-value -application foo

出力:

test-value : Cannot validate argument on parameter 'Application'. The argument "foo" does not belong to the set "word,excel,powerpoint" specified by the ValidateSet attribute. Supply an argument that is in the set and then try the command again.

おすすめ記事