PowerShell の良い所は、コマンドレットやオプションが強力に TAB 補完されるところです。
この補完が強力なので、コマンドレットスペルとかオプションを細かく覚えていなくても簡単に PowerShell を使うことができます。
特にオプションの補完は強力で、「ハイフン」に続いて TAB 入力するだけでコマンドレットで指定可能なオプションが次々と表示されます。
これを自作スクリプトで実現する方法を紹介します。
本題に入る前に PowerShell スクリプトの引数を定義する Param の使い方を説明をしましょう。
Param の一番簡単な書き方はこんな感じです。(test.ps1 を書いている想定)
Param( $aaa, $bbb ) echo "aaa: $aaa" echo "bbb: $bbb" |
この例では、2つの引数を受け取ります。
PS C:\work> .\test.ps1 "aaaa" 123 aaa: aaaa bbb: 123 PS C:\work> |
Param で定義している変数名はオプションとして指定できますので、- で指定できますし TAB 補完もできます。
PS C:\work> .\test.ps1 -bbb "zzzzz" -aaa 987654 aaa: 987654 bbb: zzzzz PS C:\work> |
PowerShell で変数の型指定ができるように、Param でも型指定ができます。
Param( [string]$aaa, [int]$bbb ) |
配列を受け取りたいときは [array] が使えます。値が配列ではない時も配列として扱われます。
Param( [array]$ccc ) $ccc[0] $ccc.Length $ccc.GetType() |
PS C:\work> .\test.ps1 "abc" abc 1 IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Object[] System.Array |
Param は色々な書き方が出るので、自分好みの書き方を見つけてください。
僕はこんな感じの書き方をしています。
Param( [string]$Name, # 名前 [int32]$Index # 数値 ) |
オプションは Param の変数名ですが、オプション値は ValidateSet で定義すると補完できるようになります。
(PowerShell 4.0 以降)
Param( [ValidateSet("aaa" , "bbb", "ccc")]$abc, [ValidateSet("DDD" , "EEE", "FFF")]$def ) echo "abc : $abc" echo "def : $def" |
PS C:\work> .\test.ps1 -def FFF -abc bbb abc : bbb def : FFF PS C:\work> |
オプション指定しなくても、引数順番にオプション値の候補を表示させることができます。
PS C:\work> .\test.ps1 bbb FFF
abc : bbb
def : FFF
PS C:\work>
|
bool 値のオプションを作る場合、値に $true/$false を指定しても良いのですが、switch 指定すると bool 値のオプションが作れます。
Param( [switch]$aaa, [switch]$bbb ) echo "aaa : $aaa" echo "bbb : $bbb" |
PS C:\work> .\test.ps1 -bbb aaa : False bbb : True PS C:\work> |
必須オプションにする場合は、[parameter(mandatory=$true)] を指定します。
(PS3
以降であれば =$true を省略可能)
param ( [parameter(mandatory=$true)][string]$InputString ) |
Copyright © MURA All rights reserved.