PowerShellスクリプトへのパラメーターの受け渡し
2つの異なる方法でPowerShellスクリプトにパラメーターを渡すことができます。 (PowerShellについてわからない場合は、ヒント「 linkIntroduction toPowerShell」を参照してください。)パラメーターは、位置または名前で渡すことができます。どちらも同じように有効なので、それぞれがどのように行われるかを見てみましょう。
LookForFiles.ps1という名前のPowerShellスクリプトがあります。指定されたディレクトリでファイルを検索し、サイズが20Kを超えるファイルを表示します。現在、私のスクリプトは次のようになっています:
$files = Get-ChildItem C:\Temp foreach ($file in $files) { if ($file.length -gt 20000) { Write-Output $file } }
ご覧のとおり、私のディレクトリ名(C:\ Temp)とチェックするサイズ(20000)は両方ともハードコーディングされています。代わりに、スクリプトがより柔軟になるように、ディレクトリ名とサイズを渡したいと思います。
まず、これらのパラメータを位置で渡すように変更します。つまり、最初のパラメータはディレクトリになり、2番目のパラメータはサイズになります。私の新しいスクリプトは次のようになります:
$files = Get-ChildItem args[0] foreach ($file in $files) { if ($file.length -gt args[1]) { Write-Output $file } }
次に、スクリプトを呼び出して、出力を観察します(図1を参照)。
図1.位置パラメーターの受け渡し。
スクリプトを呼び出すときに、「C:\ Temp」と「20000」の2つのパラメーターを渡すことに注意してください。これらは「$ args [0]」と「$ args [1]」に入力されます
スクリプトが以前とまったく同じように実行されるように、それぞれ。次に、名前付きパラメーターを期待するようにスクリプトを変更しましょう:
param([string] $dir = "C:\Temp", [int32] $size = 20000) $files = Get-ChildItem $dir foreach ($file in $files) { if ($file.length -gt $size) { Write-Output $file } }
「$ args」変数への参照を削除したことに注意してください。最初の行(2番目の行に拡張)が「パラメータ」であることにも注意してください
ステートメント。これにより、PowerShellは名前付きパラメーターを予期するようになります。この「param」ステートメントは、スクリプトの最初の行である必要があります。 2つの変数を定義し、それらをデフォルト値に初期化します。文字列変数$ dirを定義し、デフォルトで「C:\ Temp」に設定し、int32(数値)変数$ sizeを定義し、デフォルトで20000に設定します。これらの値はデフォルト値で初期化されるため、スクリプトが呼び出されても、スクリプトは実行され、それらの値を使用します。
以前は$ args [0]があった場所の代わりに、$ dir変数があり、以前は$ args [1]があった場所の代わりに$ size変数があります。次の名前付きパラメーターを指定して、スクリプトを呼び出しましょう。
(図2を参照)
図2.名前付きパラメーターの受け渡し。
スクリプトが呼び出されたら、「-dir」に続けて関心のあるディレクトリを指定し、「-size」を指定して関心のあるサイズを示します。これらは名前付きパラメータなので、順序を逆にすることができます。 「-size」が最初に指定され、「-dir」が2番目に指定されます。
または、それらを完全に省略して、スクリプト内の値を使用することもできます。
このヒント(2902)は、Windows 7、8、および10に適用されます。