※この記事は「2023年8月1日」に更新しました。
PowerShell(パワーシェル)講座です。
今回は、関数やスクリプトを便利に使うために、引数を受け取る方法を紹介。
環境は、Windows 10(64bit)、PowerShell 6.1.2 です。
引数を受け取る方法
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)
これで例えば、test など文字列を渡すとエラーが返ります。
また、引数に初期値を格納することもできます。
Param( [Int]$Args1 = 50, [Int]$Args2 = 100 )
長くなったので、改行しましたが、このように改行しても問題ありません。
引数を受け取るサンプルスクリプト【PowerShell】
それでは、PowerShell(パワーシェル)で引数を受け取るサンプルを紹介します。
以前、Excel(エクセル)と PowerShell を組合わせて、複数フォルダを高速で作成するスクリプトを紹介したかと思います。
これを今回学習した内容を踏まえて、スクリプトを変更してみます。
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(パワーシェル)で引数を受け取る方法について、解説しました。
入力する範囲が必要以上に広いからです(自分で使う分には問題ないでしょうが)。
日付(8桁)を入力しているのに Int型としているのも違和感があります。
下2桁しか計算しないから問題ないわけです。
バリデーションが面倒なので、めちゃくちゃ簡単にしています。
しかし、引数の受け取りができると可能性が広がります。
色々試してみると応用できるかと思います。