次の方法で共有


12. 属性

編集メモ

重要

Windows PowerShell 言語仕様 3.0 は、2012 年 12 月に公開され、Windows PowerShell 3.0 に基づいています。 この仕様では、PowerShell の現在の状態は反映されません。 現在の状態を反映するようにこのドキュメントを更新する予定はありません。 このドキュメントは、履歴参照のためにここに示されています。

仕様文書は、Microsoft ダウンロード センターから Microsoft Word 文書として入手できます。https://www.microsoft.com/download/details.aspx?id=36389 Word 文書は、Microsoft Learn でプレゼンテーション用に変換されています。 変換中に、Docs プラットフォームの書式設定に対応するために、いくつかの編集の変更が行われました。 一部の入力ミスと軽微なエラーが修正されました。

''属性'' オブジェクトでは、定義済みのシステム情報を ''ターゲット要素'' に関連付けます。これは、param ブロックまたはパラメーター (§8.10) にすることができます。 各属性オブジェクトには、属性の種類があります。

属性によって提供される情報は、メタデータとも呼ばれます。 メタデータは、コマンドまたは実行環境によって調べ、コマンドがデータを処理する方法、または外部ツールによる実行時の前に制御して、コマンド自体の処理方法または保守方法を制御できます。

複数の属性を同じターゲット要素に適用できます。

12.1 属性の指定

ヒント

構文定義の ~opt~ 表記は、構文エンティティが構文で省略可能であることを示します。

attribute-list:
    attribute
    attribute-list new-lines~opt~ attribute

attribute:
    [ new-lines~opt~ attribute-name ( attribute-arguments new-lines~opt~ ) new-lines~opt~ ]
    type-literal

attribute-name:
    type-spec

attribute-arguments:
    attribute-argument
    attribute-argument new-lines~opt~ ,
    attribute-arguments

attribute-argument:
    new-lines~opt~ expression
    new-lines~opt~ simple-name
    new-lines~opt~ simple-name = new-lines~opt~ expression

属性は、属性名 と、位置指定引数と名前付き引数の省略可能なリストで構成されます。 位置引数 (存在する場合) は、名前付き引数の前にあります。 名前付き引数は、単純な名前で構成され、必要に応じて等号が続き、その後に が続きます。 式を省略すると、$true 値が想定されます。

属性名 は、予約属性の種類 (§12.3) または実装で定義された属性型です。

12.2 属性インスタンス

属性インスタンスは、属性型のオブジェクトです。 インスタンスは、実行時に属性を表します。

A属性型のオブジェクトを作成するには、表記を使用します。 属性は、[A()]のように、そのインスタンスを []内に囲むことで宣言されます。 一部の属性型には、関数やコマンドレットと同様に、位置指定パラメーターと名前付きパラメーター (§8.14) があります。 例えば

[A(10,IgnoreCase=$true)]

は、引数値が 10 の位置指定パラメーターと、引数値が である名前付きパラメーター IgnoreCaseを使用して作成される A 型のインスタンスを示しています。

12.3 予約済みの属性

次のセクションで説明する属性は、PowerShell 関数、フィルター、スクリプト、コマンドレットの動作を拡張または変更するために使用できます。

12.3.1 Alias 属性

この属性は、パラメーターの代替名を指定するために、script-parameter で使用されます。 パラメーターは複数のエイリアスを持つ場合があり、各エイリアス名は、パラメーター リスト内で一意である必要があります。 使用できる 1 つの方法は、異なるパラメーター セット内のパラメーターに対して異なる名前を持つことです (ParameterSetNameを参照してください)。

属性引数には string[] 型があります。

次のパラメーター ブロックを持ち、次のように呼び出される関数呼び出し Test1 について考えてみましょう。

param (
    [Parameter(Mandatory = $true)]
    [Alias("CN")]
    [Alias("name", "system")]
    [string[]] $ComputerName
)

Test1 "Mars", "Saturn"                # pass argument by position
Test1 -ComputerName "Mars", "Saturn"  # pass argument by name
Test1 -CN "Mars", "Saturn"            # pass argument using first alias
Test1 -name "Mars", "Saturn"          # pass argument using second alias
Test1 -sys "Mars", "Saturn"           # pass argument using third alias

次のパラメーター ブロックを持ち、次のように呼び出される関数呼び出し Test2 について考えてみましょう。

param (
    [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)]
    [Alias('PSPath')]
    [string] $LiteralPath
)

Get-ChildItem "E:\*.txt" | Test2 -LiteralPath { $_ ; "`n`t";
    $_.FullName + ".bak" }
Get-ChildItem "E:\*.txt" | Test2

コマンドレット Get-ChildItem (エイリアス Dir) では、PSPath という string 型の新しい NoteProperty を返すオブジェクトに追加します。

12.3.2 AllowEmptyCollection 属性

この属性は、必須パラメーターの引数として空のコレクションを許可するために、script-parameter で使用されます。

次のパラメーター ブロックを持ち、次のように呼び出される関数呼び出し Test について考えてみましょう。

param (
    [parameter(Mandatory = $true)]
    [AllowEmptyCollection()]
    [string[]] $ComputerName
)

Test "Red", "Green" # $computerName has Length 2
Test "Red" # $computerName has Length 1
Test -comp @() # $computerName has Length 0

12.3.3 AllowEmptyString 属性

この属性は、必須パラメーターの引数として空の文字列を許可するために、script-parameter で使用されます。

次のパラメーター ブロックを持ち、次のように呼び出される関数呼び出し Test について考えてみましょう。

param (
    [parameter(Mandatory = $true)]
    [AllowEmptyString()]
    [string] $ComputerName
)

Test "Red" # $computerName is "Red"
Test "" # empty string is permitted
Test -comp "" # empty string is permitted

12.3.4 AllowNull 属性

この属性は、暗黙的な変換が使用できない必須パラメーターの引数として$nullを許可するために、script-parameter で使用されます。

次のパラメーターブロックを持ち、以下のように呼び出される関数 Test について考えてみましょう。

param (
    [parameter(Mandatory = $true)]
    [AllowNull()]
    [int[]] $Values
)

Test 10, 20, 30     # $values has Length 3, values 10, 20, 30
Test 10, $null, 30  # $values has Length 3, values 10, 0, 30
Test -val $null     # $values has value $null

上記の 2 番目のケースでは、この属性は必要ありません。既に、$null から int への暗黙的な変換があります。

12.3.5 CmdletBinding属性について

この属性は、関数のパラメーター ブロック の 属性リスト で使用され、関数がコマンドレットと同様に動作することを示します。 具体的には、関数は、begin、process、end の名前付きブロック (§8.10.7) を使用して、$PsCmdlet変数を介してさまざまなメソッドとプロパティにアクセスできます。

この属性が存在する場合、位置指定パラメーターが一致しない位置引数によってパラメーター バインドが失敗し、$argsが定義されていません。 (この属性がないと、$argsが一致しない位置引数の値を受け取ります)。

パラメーターの特性を定義するには、次の引数を使用します。

パラメーター名 目的
SupportsShouldProcess (名前付き)

型: bool;既定値: $false

関数がシステムに変更を行う前にフィードバックを求めるために使用される ShouldProcess メソッドの呼び出しを関数がサポートするかどうかを指定します。 $trueの値は、それが行っていることを示します。 $falseの値は、そうでないことを示します。

ConfirmImpact (名前付き)

型: string;既定値: "Medium"

実行されるアクションの影響レベルを指定します。 ShouldProcess メソッドの呼び出しでは、ConfirmImpact 引数が$ConfirmPreference基本設定変数の値以上の場合にのみ、確認プロンプトが表示されます。

この引数に指定できる値は次のとおりです。

なし: 確認のためのすべての要求を抑制します。

低: 実行されたアクションは、データを失うリスクが低くなります。

中: 実行されたアクションは、データを失うリスクが中程度です。

高: 実行されたアクションは、データを失うリスクが高くなります。

$ConfirmPreferenceの値を設定して、操作を実行する前に、同じ以上の影響レベルのコマンドレットのみが確認を要求できるようにします。 たとえば、$ConfirmPreferenceが中に設定されている場合、影響レベルが中または高のコマンドレットは確認を要求できます。 影響レベルが低いコマンドレットからの要求は抑制されます。

DefaultParameterSetName (名前付き)

型: string;既定値: "__AllParameterSets"

引数から決定できない場合に使用するパラメーター セットを指定します。 属性パラメーター ([§12.3.7][§12.3.7]) の名前付き引数 ParameterSetName を参照してください。

PositionalBinding (名前付き)

型: bool;既定値: $true

位置バインディングをサポートするかどうかを指定します。 この引数の値は、引数 Parameter ([§12.3.7][§12.3.7][§12.3.7]) で名前付き引数 Position または名前付き引数 ParameterSetName のいずれかに既定値以外の値が指定されている場合は無視されます。 それ以外の場合、引数が$false場合、パラメーターは位置指定されません。それ以外の場合は、パラメーターが指定された順序に基づいて位置が割り当てられます。

この属性を使用するためのフレームワークの例を次に示します。

[CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = "Low")]
param ( ... )

begin { ... }
Get-process { ... }
end { ... }

12.3.6 OutputType 属性

この属性は、パラメーター ブロック属性リスト で使用され、返される型を指定します。 パラメーターの特性を定義するには、次の引数を使用します。

パラメーター名 目的
タイプ (位置 0)

型: string[] または型リテラルの配列

返される値の型の一覧。

ParameterSetName (名前付き)

型: string[]

Type パラメーターの対応する要素によって示される型を返すパラメーター セットを指定します。

この属性の使用例を次に示します。

[OutputType([int])] param ( ... )
[OutputType("double")] param ( ... )
[OutputType("string","string")] param ( ... )

12.3.7 パラメーター属性

この属性は、script-parameterで使用されます。 パラメーターの特性を定義するには、次の名前付き引数を使用します。

パラメーター 目的
HelpMessage (名前付き)

型: 文字列

この引数は、パラメーターの簡単な説明を含むメッセージを指定します。 このメッセージは、関数またはコマンドレットを実行しても、HelpMessage に対応する引数がない必須パラメーターである場合に、実装定義の方法で使用されます。

次の例は、パラメーターの説明を提供するパラメーター宣言を示しています。

param ( [Parameter(Mandatory = $true,
HelpMessage = "コンピューター名の配列。")]
[string[]] $ComputerName )

Windows PowerShell: 必要なパラメーターが指定されていない場合、ランタイムはユーザーにパラメーター値の入力を求めます。 プロンプト ダイアログ ボックスには、HelpMessage テキストが含まれています。

必須 (名前付き)

型: bool;既定値: $false

この引数は、指定されたパラメーター セット内でパラメーターが必要かどうかを指定します (後述の ParameterSetName 引数を参照)。 $trueの値は、その値であることを示します。 $falseの値は、そうでないことを示します。

param ( [Parameter(Mandatory = $true)]
[string[]] $ComputerName )

Windows PowerShell: 必要なパラメーターが指定されていない場合、ランタイムはユーザーにパラメーター値の入力を求めます。 プロンプト ダイアログ ボックスには、HelpMessage テキスト (存在する場合) が含まれます。

ParameterSetName (名前付き)

型: string;既定値: "__AllParameterSets"

シナリオごとに異なるアクションを実行できる 1 つの関数またはコマンドレットを記述できます。 これは、実行するアクションに応じて異なるパラメーター グループを公開することによって行われます。 このようなパラメーター グループは、パラメーター セット 呼び出されます。

引数 ParameterSetName は、パラメーターが属するパラメーター セットを指定します。 この動作は、各パラメーター セットに、他のパラメーター セットのメンバーではない 1 つの一意のパラメーターが必要であることを意味します。

複数のパラメーター セットに属するパラメーターの場合は、パラメーター セットごとに Parameter 属性を追加します。 これにより、パラメーターセットごとに異なる方法でパラメーターを定義できます。

複数の位置指定パラメーターを含むパラメーター セットでは、各パラメーターの一意の位置を定義する必要があります。 2 つの位置パラメーターで同じ位置を指定することはできません。

パラメーターにパラメーター セットが指定されていない場合、パラメーターはすべてのパラメーター セットに属します。

複数のパラメーター セットが定義されている場合、属性 CmdletBinding ([§12.3.5][§12.3.5]) の名前付き引数 DefaultParameterSetName を使用して、既定のパラメーター セットを指定します。 ランタイムは、コマンドによって提供される情報に基づいて使用するパラメーター セットを決定できない場合は既定のパラメーター セットを使用し、既定のパラメーター セットが指定されていない場合は例外を発生させます。

次の例は、2 つの異なるパラメーター セットに属する 2 つのパラメーターのパラメーター宣言と、両方のセットに属する 3 番目のパラメーターを持つ関数 Test を示しています。

param ( [Parameter(Mandatory = $true,
ParameterSetName = "Computer")]
[string[]] $ComputerName,

[Parameter(Mandatory = $true,
ParameterSetName = "User")]
[string[]] $UserName,

[Parameter(Mandatory = $true,
ParameterSetName = "Computer")]
[Parameter(ParameterSetName = "User")]
[int] $SharedParam = 5 )

if ($PsCmdlet.ParameterSetName -eq "Computer")
{
# は "Computer" パラメーターセットを処理します
}

elseif ($PsCmdlet.ParameterSetName -eq "User")
{
# 「ユーザー」パラメーター セットを処理する
}

}

Test -ComputerName "Mars","Venus" -SharedParam 10
Test -UserName "Mary","Jack"
Test -UserName "Mary","Jack" -SharedParam 20

ポジション (名前付き)

型: int

この引数は、引数リスト内のパラメーターの位置を指定します。 この引数を指定しない場合は、パラメーターを設定するときに、パラメーター名またはそのエイリアスを明示的に指定する必要があります。 関数のどのパラメーターにも位置がない場合は、受け取った順序に基づいて各パラメーターに位置が割り当てられます。

次の例は、関数の呼び出し時に最初の引数として値を指定する必要があるパラメーターの宣言を示しています。

param ( [Parameter(Position = 0)]
[string[]] $ComputerName )

ValueFromPipeline (名前付き)

型: bool;既定値: $false

この引数は、パラメーターがパイプライン オブジェクトからの入力を受け入れるかどうかを指定します。 $trueの値は、それが行っていることを示します。 $falseの値は、そうでないことを示します。

関数またはコマンドレットがオブジェクトのプロパティだけでなく、完全なオブジェクトにアクセスする場合は、$trueを指定します。

ValueFromPipeline を$trueとして宣言できるのは、パラメーター セット内の 1 つのパラメーターだけです。

次の例は、パイプラインから関数に渡される入力オブジェクトを受け入れる必須パラメーター ($ComputerName) のパラメーター宣言を示しています。

param ( [Parameter(Mandatory = $true,
ValueFromPipeline=$true)]
[string[]] $ComputerName )

Alias 属性と組み合わせてこのパラメーターを使用する例については、[§12.3.1][§12.3.1] を参照してください。

ValueFromPipelineByPropertyName (名前付き)

型: bool;既定値: $false

この引数は、パラメーターが、このパラメーターと同じ名前または同じエイリアスを持つパイプライン オブジェクトのプロパティから値を取得するかどうかを指定します。 $trueの値は、それが行っていることを示します。 $falseの値は、そうでないことを示します。

次の条件が true の場合は、$trueを指定します。パラメーターはパイプされたオブジェクトのプロパティにアクセスし、プロパティの名前はパラメーターと同じか、プロパティのエイリアスはパラメーターと同じです。

ValueFromPipelineByPropertyName が $true に設定されているパラメーターには、ValueFromPipeline を $true に設定した同じセット内のパラメーターは必要ありません。

関数にパラメーター $ComputerNameがあり、パイプされたオブジェクトに ComputerName プロパティがある場合、ComputerName プロパティの値は関数の $ComputerName パラメーターに割り当てられます。

param ( [parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[string[]] $ComputerName )

パラメーター セット内の複数のパラメーターで、ValueFromPipelineByPropertyName を$trueとして定義できます。 ただし、1 つの入力オブジェクトを複数のパラメーターにバインドすることはできませんが、その入力オブジェクト内のさまざまなプロパティが異なるパラメーターにバインドされる可能性があります。

入力オブジェクトのプロパティを使用してパラメーターをバインドする場合、ランタイム環境は、最初にパラメーターと同じ名前のプロパティを検索します。  このようなプロパティが存在しない場合、ランタイム環境では、そのパラメーターのエイリアスが宣言順で検索され、プロパティが存在する最初のエイリアスが選択されます。

関数 Process-Date
{
param(
[Parameter(ValueFromPipelineByPropertyName=$true)]
[int]$Year,

[Parameter(ValueFromPipelineByPropertyName=$true)]
[int]$Month,

[Parameter(ValueFromPipelineByPropertyName=$true)]
[int]$Day
)

プロセス { ... }
}

Get-Date | Process-Date

ValueFromRemainingArguments (名前付き)

型: bool;既定値: $false

この引数は、パラメーターが、関数のパラメーターにバインドされていない残りの引数をすべて受け入れるかどうかを指定します。 $trueの値は、それが行っていることを示します。 $falseの値は、そうでないことを示します。

次の例は、関数 Test に渡される入力オブジェクトの残りのすべての引数を受け入れるパラメーター $othersを示しています。

param ( [parameter(Mandatory = $true)][int] $p1,
[parameter(Mandatory = $true)][int] $p2,
[parameter(ValueFromRemainingArguments = $true)]
[string[]] $others )

テスト 10 20 # $othersの長さが 0 です
テスト 10 20 30 40 # $others の長さは 2 で、値は 30、40

実装では、他の属性も定義できます。

次の属性も提供されます。

  • HelpMessageBaseName: リソース識別子が存在する場所を指定します。 たとえば、このパラメーターでは、ローカライズするヘルプ メッセージを含むリソース アセンブリを指定できます。
  • HelpMessageResourceId: ヘルプ メッセージのリソース識別子を指定します。

12.3.8 PSDefaultValue 属性

この属性は、パラメーターに関する追加情報を提供するために、script-parameter で使用されます。 この属性は、実装定義の方法で使用されます。 パラメーターの特性を定義するには、次の引数を使用します。

パラメーター名 目的
ヘルプ (名前付き)

型: 文字列

この引数は、パラメーターの既定値の簡単な説明を含むメッセージを指定します。 このメッセージは、実装定義の方法で使用されます。

Windows PowerShell: メッセージは、[Get-Help](xref:Microsoft.PowerShell.Core.Get-Help) コマンドレットによって表示されるヘルプ トピックのパラメーターの説明の一部として使用されます。

値 (名前付き)

型: オブジェクト

この引数は、パラメーターの既定値を意図した値を指定します。 この値は、実装で定義された方法で使用されます。

Windows PowerShell: この値は、[Get-Help](xref:Microsoft.PowerShell.Core.Get-Help)コマンドレットで表示されるヘルプ トピックのパラメーターの説明の一部として、Help プロパティが指定されていない場合に使用されます。

12.3.9 SupportsWildcards 属性

この属性は、パラメーターに関する追加情報を提供するために、script-parameter で使用されます。 この属性は、実装定義の方法で使用されます。

この属性は、Get-Help コマンドレットによって表示されるヘルプ トピックのパラメーターの説明の一部として使用されます。

12.3.10 ValidateCount 属性

この属性は、script-parameter で使用され、パラメーターが受け入れ可能な引数値の最小値と最大数を指定します。 パラメーターの特性を定義するには、次の引数を使用します。

パラメーター名 目的
MinLength (位置 0)

型: int

この引数は、許容される引数値の最小数を指定します。

MaxLength (位置 1)

型: int

この引数は、許容される引数値の最大数を指定します。

この属性がない場合、パラメーターの対応する引数値リストには任意の長さを指定できます。

次のパラメーターブロックを持ち、以下のように呼び出される関数呼び出し Test について考えてみましょう。

param (
    [ValidateCount(2, 5)]
    [int[]] $Values
)

Temp 10, 20, 30
Temp 10                         # too few argument values
Temp 10, 20, 30, 40, 50, 60     # too many argument values

[ValidateCount(3, 4)]$Array = 1..3
$Array = 10                     # too few argument values
$Array = 1..100                 # too many argument values

12.3.11 ValidateLength 属性

この属性は、script-parameter または 変数 で使用され、パラメーターの引数の最小長と最大長を指定します。これは、型文字列が必要です。 パラメーターの特性を定義するには、次の引数を使用します。

パラメーター名 目的
最小長さ (位置 0)

型: 整数 (int)

この引数は、使用できる最小文字数を指定します。

MaxLength (位置 1)

型: int

この引数は、使用できる最大文字数を指定します。

この属性がない場合、パラメーターの対応する引数は任意の長さにできます。

次のパラメーターブロックを持ち、以下のように呼び出される関数 Test を考えましょう。

param ( [parameter(Mandatory = $true)]
[ValidateLength(3,6)]
[string[]] $ComputerName )

Test "Thor","Mars"     # length is ok
Test "Io","Mars"       # "Io" is too short
Test "Thor","Jupiter"  # "Jupiter" is too long

12.3.12 ValidateNotNull 属性

この属性は、script-parameter または 変数 で使用され、パラメーターの引数を $null したり、null 値要素を含むコレクションにしたりできないように指定します。

次のパラメーター ブロックを持ち、"shown" として呼び出される関数呼び出し Test について考えてみましょう。

param (
    [ValidateNotNull()]
    [string[]] $Names
)

Test "Jack", "Jill"     # ok
Test "Jane", $null      # $null array element value not allowed
Test $null              # null array not allowed

[ValidateNotNull()]$Name = "Jack" # ok
$Name = $null           # null value not allowed

12.3.13 ValidateNotNullOrEmpty 属性

この属性は、script-parameter または 変数 で使用され、引数が$null、空の文字列、空の配列であってはならない、または$null値や空の文字列要素を含むコレクションであってはならないことを指定します。

次のパラメーター ブロックを持ち、次のように呼び出される関数呼び出し Test について考えてみましょう。

param (
    [ValidateNotNullOrEmpty()]
    [string[]] $Names
)

Test "Jack", "Jill"    # ok
Test "Mary", ""        # empty string not allowed
Test "Jane", $null     # $null array element value not allowed
Test $null             # null array not allowed
Test @()               # empty array not allowed

[ValidateNotNullOrEmpty()]$Name = "Jack" # ok
$Name = ""             # empty string not allowed
$Name = $null          # null value not allowed

12.3.14 ValidatePattern 属性

この属性は、パラメーターの引数のパターンに一致する正規表現を指定するために、script-parameter または 変数 で使用されます。 パラメーターの特性を定義するには、次の引数を使用します。

パラメーター名 目的
RegexString (位置 0)

型: 文字列

パラメーターの引数を検証するために使用される正規表現

オプション (名前付き)

型: Regular-Expression-Option

使用できる値については、[§4.2.6.4][§4.2.6.4] を参照してください。

引数がコレクションの場合、コレクション内の各要素はパターンと一致する必要があります。

次のパラメーター ブロックを持ち、次のように呼び出される関数呼び出し Test について考えてみましょう。

param (
    [ValidatePattern('\^[A-Z][1-5][0-9]$')]
    [string] $Code,

    [ValidatePattern('\^(0x|0X)([A-F]|[a-f]|[0-9])([A-F]|[a-f]|[0-9])$')]
    [string] $HexNum,

    [ValidatePattern('\^[+|-]?[1-9]$')]
    [int] $Minimum
)

Test -c A12 # matches pattern
Test -c A63 # does not match pattern

Test -h 0x4f # matches pattern
Test -h "0XB2" # matches pattern
Test -h 0xK3 # does not match pattern

Test -m -4 # matches pattern
Test -m "+7" # matches pattern
Test -m -12 # matches pattern, but is too long

[ValidatePattern('\^[a-z][a-z0-9]\*$')]$ident = "abc"
$ident = "123" # does not match pattern

12.3.15 ValidateRange 属性

この属性は、パラメーターの引数の最小値と最大値を指定するために、script-parameter または 変数 で使用されます。 パラメーターの特性を定義するには、次の引数を使用します。

パラメーター名 目的
MinRange (位置 0)

型: オブジェクト

この引数は、許容される最小値を指定します。

MaxRange (位置 1)

型: オブジェクト

この引数は、許容される最大値を指定します。

この属性がない場合、範囲の制限はありません。

次のパラメーター ブロックを持ち、次のように呼び出される関数呼び出し Test1 について考えてみましょう。

param (
    [parameter(Mandatory = $true)]
    [ValidateRange(1, 10)]
    [int] $StartValue
)

Test1 2
Test1 -st 7
Test1 -3 # value is too small
Test1 12 # value is too large

次の param ブロックと呼び出しを持つ関数呼び出し Test2 について考えてみましょう。

param (
    [parameter(Mandatory = $true)]
    [ValidateRange("b", "f")]
    [string] $Name
)

Test2 "Bravo" # ok
Test2 "Alpha" # value compares less than the minimum
Test2 "Hotel" # value compares greater than the maximum

次のパラメーター ブロックを持ち、次のように呼び出される関数呼び出し Test3 について考えてみましょう。

param (
    [parameter(Mandatory = $true)]
    [ValidateRange(0.002, 0.003)]
    [double] $Distance
)

Test3 0.002
Test3 0.0019    # value is too small
Test3 "0.005"   # value is too large

[ValidateRange(13, 19)]$teenager = 15
$teenager = 20  # value is too large

12.3.16 ValidateScript 属性

この属性は、script-parameter または 変数 で使用され、パラメーターの引数の検証に使用されるスクリプトを指定します。

1 桁目の引数は、script-block-expressionです。

次のパラメーター ブロックを持ち、次のように呼び出される関数呼び出し Test について考えてみましょう。

param (
    [Parameter(Mandatory = $true)]
    [ValidateScript( { ($_ -ge 1 -and $_ -le 3) -or ($_ -ge 20) })]
    [int] $Count
)

Test 2 # ok, valid value
Test 25 # ok, valid value
Test 5 # invalid value
Test 0 # invalid value

[ValidateScript({$_.Length --gt 7})]$password = "password" # ok
$password = "abc123" # invalid value

12.3.17 ValidateSet 属性

この属性は、パラメーターの引数に有効な値のセットを指定するために、script-parameter または 変数 で使用されます。 パラメーターの特性を定義するには、次の引数を使用します。

パラメーター名 目的
ValidValues (位置 0)

型 : 文字列[]

有効な値のセット。

IgnoreCase (名前付き)

型: bool;既定値: $true

string 型のパラメーターで、大文字と小文字の区別を無視する必要があるかどうかを指定します。

パラメーターに配列型がある場合は、対応する引数配列のすべての要素が値セットの要素と一致する必要があります。

次のパラメーター ブロックを持ち、次のように呼び出される関数呼び出し Test について考えてみましょう。

param ( [ValidateSet("Red", "Green", "Blue")]
    [string] $Color,

    [ValidateSet("up", "down", "left", "right", IgnoreCase =
        $false)]
    [string] $Direction

)

Test -col "RED"    # case is ignored, is a member of the set
Test -col "white"  # case is ignored, is not a member of the set

Test -dir "up"     # case is not ignored, is a member of the set
Test -dir "Up"     # case is not ignored, is not a member of the set

[ValidateSet(("Red", "Green", "Blue")]$color = "RED" # ok, case is ignored
$color = "Purple"  # case is ignored, is not a member of the set