【PowerShell】引数の受け取り方まとめ(後半)


この記事はプロモーションを含みます。

PowerShell

ホーム > PowerShell 逆引きリファレンス

PowerShellで、引数を受け取る方法を解説します。

はじめに

PowerShellで引数を受け取る方法は、様々な方法があります。

本記事では、取得した引数を1つの変数(配列形式)に格納する方法や、
複数の変数に格納する方法など、様々な方法をご説明したいと思います。

また、内容が多いので、前半と後半(本記事)に分けて解説しています。
前半では、以下の内容について解説しています。

引数の型を指定する

引数で渡された値を格納する変数の型を指定する方法を説明します。
以下は、型を指定する場合の書式です。

Param(
	[引数1の型]引数1として渡された値を格納する変数名,
	[引数2の型]引数2として渡された値を格納する変数名,
	[引数3の型]引数3として渡された値を格納する変数名
)

以下はサンプルのスクリプトで、渡された引数を1つずつ表示します。
型の指定ですが、引数1から文字列型・数値型・数値型(64bit)となっています。

# 引数を変数に格納
Param(
	[String]$arg0,
	[Int]$arg1,
	[Long]$arg2
)
# 引数1の内容を表示
Write-Host $arg0
# 引数2の内容を表示
Write-Host $arg1
# 引数3の内容を表示
Write-Host $arg2

スクリプトを実行する際の書式です。

PowerShellスクリプト名.ps1 引数1 引数2 ...

サンプルの実行結果です。

PS C:\workspace\PowerShell>> .\test.ps1 りんご 111 999
りんご
111
999

宣言した型に合わない引数を渡すと、以下のようなエラーとなります。

PS C:\workspace\PowerShell>> .\test.ps1 りんご 111 メロン
C:\workspace\PowerShell\test.ps1 : パラメーター 'arg2' の引数変換を処理できません。値 "メロン" を型 "
System.Int64" に変換できません。エラー: "入力文字列の形式が正しくありません。"
発生場所 行:1 文字:38
+ .\test.ps1 りんご 111 メロン
+                                      ~~~
    + CategoryInfo          : InvalidData: (:) [test.ps1]、ParameterBindingArgumentTransformationExce
    ption
    + FullyQualifiedErrorId : ParameterArgumentTransformationError,test.ps1

引数をboolean型にする

引数の型を、boolean型に設定する方法を説明します。

以下が書式になります。

Param(
	[switch]引数1,
	[switch]引数2
)

サンプルのスクリプトです。
引数を受け取り、その値を表示しています。

# 配列型の引数を受け取る
Param(
	[switch]$arg0,
	[switch]$arg1
)

# 各要素の値を表示
Write-Host $arg0
Write-Host $arg1

スクリプトを実行する際の書式です。

PowerShellスクリプト名.ps1 引数1 引数2 ...

サンプルの実行結果です。
引数として指定した値が「True」に、何も指定していない値が「False」となります。

PS C:\workspace\PowerShell>> .\test.ps1 -arg0
True
False

配列型の引数を受け取る

PowerShellでは、配列型の引数を受け取ることも出来ます。
以下は、配列型の引数を受け取る場合の書式です。

Param([Array]引数として渡された値を格納する変数名)

サンプルのスクリプトです。
配列の各要素の内容と要素数を表示しています。

# 配列型の引数を受け取る
Param([Array]$array)

# 各要素の値を表示
Write-Host $array[0]
Write-Host $array[1]
Write-Host $array[2]

# 配列の要素数を表示
Write-Host $array.Length

スクリプトを実行する際の書式です。
各引数をカンマ区切りで指定します。

PowerShellスクリプト名.ps1 引数1,引数2,...

サンプルの実行結果です。
引数3は何も値を指定していないため、初期値の[777]が表示されています。

PS C:\workspace\PowerShell>> .\test.ps1 りんご,メロン,みかん
りんご
メロン
みかん
3

引数として渡す値が配列ではない場合も、配列型として扱われます。
下記のように記述することで、型を確認することが出来ます。

# 型の確認
$array.GetType()

実行結果です。

PS C:\workspace\PowerShell>> .\test.ps1 りんご
IsPublic IsSerial Name       BaseType
-------- -------- ----       --------
True     True     Object[]   System.Array

エイリアスを設定する

Alias属性を使用することで、引数にエイリアスを設定することが出来ます。
エイリアスの数に制限はありません。

ここでのエイリアス(Alias)とは、引数に設定する別名のようなものです。
エイリアスを設定することで、本来の引数に加えて、設定したエイリアスを代わりに使用することが出来るようになります。

以下が書式になります。

Param(
	[Alias("エイリアス名1","エイリアス名2",...)]引数
)

サンプルのスクリプトです。
引数を受け取り、その値を表示しています。

# 配列型の引数を受け取る
Param(
	[Alias("SI","Info")]$SystemInfo
)

# 各要素の値を表示
Write-Host $SystemInfo

スクリプトを実行する際の書式です。

PowerShellスクリプト名.ps1 -引数1 値1 ...

サンプルを3回実行した結果です。
以下のように、エイリアスを設定すると、1つの引数に様々な引数名を使用することが出来ます。

PS C:\workspace\PowerShell>> .\test.ps1 -SystemInfo システム情報
システム情報
PS C:\workspace\PowerShell>> .\test.ps1 -Info システム情報
システム情報
PS C:\workspace\PowerShell>> .\test.ps1 -SI システム情報
システム情報

コメント

タイトルとURLをコピーしました