🦁

PowerShell パラメーターの作り方

2023/01/31に公開

基本

直接受け取る場合

param($val)

関数で受け取る場合

function FuncName{
    param($val)
}

関数で受け取る場合(インライン)

function FuncName($val){

}

パラメーターに属性を付与する

パラメーターの属性は変数の前にセットして[ ]内に記述する。
属性内の引数はカンマで区切る

[parameter(Mandatory,Position=0)][string]$text

パラメーターのパラメーター属性

[parameter(<#この中に属性を付与する(複数の場合カンマ区切り)#>)]
引数の説明 引数
パラメーターを必須にする Mandatory
パラメーターの位置指定 Position=0
パラメーターセット名 ParameterSetName=""
パイプラインを受け取る ValueFromPipeline
パイプライン内の同名プロパティを利用する ValueFromPipelineByPropertyName
ヘルプメッセージの設定 HelpMessage=""

エイリアス属性

[Alias("")]

型を宣言する

型を宣言する場合、引数の前に型を記述する。
データ型一覧(MSDN)

[string]

パラメーターの値にセットすることを許可する(Allow)

Null をセット可能にする

必須パラメーターの値を空のコレクション$nullにすることができる。

[AllowNull()]

空文字をセット可能にする

必須パラメーターの値を空の文字列""にすることができる。

[AllowEmptyString()]

空のコレクションをセット可能にする

必須パラメーターの値を空のコレクション@()にすることができる。

[AllowEmptyCollection()]

パラメーターの入力規制を設定する(Validate)

パラメーター値の最小数と最大数を指定する

[ValidateCount(1,5)]$Horizonposition

パラメーターの最小文字数と最大文字数を指定する

[ValidateLength(1,10)]$Horizonposition

パラメーターの有効範囲を指定する

[ValidateRange("")]
引数の説明 引数
0 より小さい Negative
0 以下 NonPositive
0 以上 NonNegative
0 より大きい Positive

引数に渡せる有効な値をセットする

[ValidateSet("Left" , "Center", "Right")]$Horizonposition

パラメーターの入力規制に正規表現を使用する

[ValidatePattern("")]

例:メールアドレスを受け取る

function Test-Email ([ValidatePattern("^[a-zA-Z0-9-_\.]+@[a-zA-Z0-9-_\.]+$")][string]$Email) {
        write-host $Email
    }

Test-Email -Email "Example@Email.com"
#> Example@Email.com

Test-Email -Email "hoge" 
#>  Cannot validate argument on parameter 'Email'. The argument "hoge" does not match the "^[a-zA-Z0-9-_\.]+@[a-zA-Z0-9-_\.]+$" pattern.
#>  Supply an argument that matches "^[a-zA-Z0-9-_\.]+@[a-zA-Z0-9-_\.]+$" and try the command again.

パラメーターの入力規制にスクリプトを使用する

[ValidateScript(<#ScriptBlockを設定#>)]

例:過去の日付を受け付けない

function Test-FutureDate {
    param (
        [ValidateScript({ $_ -ge (Get-Date) })][DateTime]$Date
    )
    return $Date
}

Test-FutureDate -Date (Get-Date).AddDays(1)
#> 2023年2月2日 19:44:38

Test-FutureDate -Date (Get-Date)
#> Cannot validate argument on parameter 'Date'. The " $_ -ge (Get-Date) " validation script for the argument with value 
#> "2023/01/31 19:45:19" did not return a result of True. Determine why the validation script failed, and then try the command again.

パラメーターの値に Null を受け付けない

[ValidateNotNull()]

パラメーターの値に Null・空文字・空配列を受け付けない

[ValidateNotNullOrEmpty()]

参考リンク

https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_functions_advanced_parameters?view=powershell-7.3

Discussion