【PowerShell講座】引数を受け取る

引数を受け取る

※この記事は「2023年8月1日」に更新しました。

PowerShell(パワーシェル)講座です。

今回は、関数やスクリプトを便利に使うために、引数を受け取る方法を紹介。

環境は、Windows 10(64bit)、PowerShell 6.1.2 です。

ぱそた
SE、Web制作、販売を経験した管理人が解説します。

引数を受け取る方法

PowerShell(パワーシェル)で引数を受け取る方法です。



引数は $Args に格納される

まずは、サンプルからご覧下さい。

Write-Host $Args[0]
Write-Host $Args[1]

こちらを test.ps1 として保存し、パラメータを与えて、実行してみます。

すると、以下のようになります。

引数を受け取る

このように、引数は $Args という配列に自動的に格納されます。

ちなみに Write-Host は、ホスト(この場合、PowerShellコンソール)に出力するものと思って下さい。

引数を定義する

引数を定義するには、Param を使います。

Param($Args1,$Args2)

Param で定義している変数は、オプションとして使うことができます。

.\test.ps1 -Args2 100 -Args1 50

ちなみに型指定もできます。

Param([Int]$Args1,[Int]$Args2)
ぱそた
Int は、整数型です。

これで例えば、test など文字列を渡すとエラーが返ります。

また、引数に初期値を格納することもできます。

Param(
[Int]$Args1 = 50,
[Int]$Args2 = 100
)

長くなったので、改行しましたが、このように改行しても問題ありません。

引数を受け取るサンプルスクリプト【PowerShell】

それでは、PowerShell(パワーシェル)で引数を受け取るサンプルを紹介します。

以前、Excel(エクセル)と PowerShell を組合わせて、複数フォルダを高速で作成するスクリプトを紹介したかと思います。

複数フォルダを高速で作成する

【PowerShell講座】複数フォルダを高速で作成する

2020年1月12日

これを今回学習した内容を踏まえて、スクリプトを変更してみます。

ぱそた
以下のコードを test.ps1 として保存します。
Param(
[Int]$date1 = 20200101,
[Int]$date2 = 20200131
)

if($date2-$date1 -ge 31){
  Write-Host '入力値が不正なので処理を中断します。'
  exit
}

while($date1 -le $date2) {
  New-Item $date1 -ItemType Directory
  $date1++
}

入力ミスで大量のフォルダが作成されないように、二つの引数の差が 31以上になる場合、処理を中断するようにしています。

これを引数なしで実行すると 20200101~20200131 まで、31個のフォルダが高速で作成されます。

続いて、以下のように実行してみましょう。

.\test.ps1 -date1 20200201 -date2 20200229
ぱそた
すると、結果は以下のようになります。
引数を受け取る

20200201~20200229 まで、29個のフォルダが高速で作成されました。

最後に

前回は、関数について紹介しました。

関数について

【PowerShell講座】関数について

2020年1月31日

今回は、PowerShell(パワーシェル)で引数を受け取る方法について、解説しました。

最後に紹介したものは、まだ改良の余地があります。

入力する範囲が必要以上に広いからです(自分で使う分には問題ないでしょうが)。

日付(8桁)を入力しているのに Int型としているのも違和感があります。

下2桁しか計算しないから問題ないわけです。

バリデーションが面倒なので、めちゃくちゃ簡単にしています。

しかし、引数の受け取りができると可能性が広がります。

色々試してみると応用できるかと思います。