Friday, May 23, 2008

PowerShellでは、引数に「スイッチパラメータ」と呼ばれるものを使用することができます。

スイッチパラメータを持つコマンドレットの一つに Read-Host があります。

Get-Helpコマンドで、Read-Hostのヘルプをみてみましょう。

PS > get-help read-host -Detailed

名前
    Read-Host

概要
    コンソールから入力を 1 行読み取ります。


構文
    Read-Host [[-prompt] <OBJECT>] [-asSecureString] [<CommonParameters>]


詳細説明
    コンソールから入力を 1 行読み取ります。 ユーザーに入力を要求する場合に使用できます。
    セキュリティ保護された文字列を作成する場合にも使用できます。


パラメータ
    -prompt <Object>
        これはプロンプト オブジェクトになる文字列です。 プロンプト文字列にスペースが含ま
        れている場合、そのスペースは二重引用符で囲む必要があります。

    -asSecureString <SwitchParameter>
        True に設定されてい場合、入力文字はアスタリスク (*) でエコー表示されます。 出力は
         SecureString オブジェクトになります。

    <CommonParameters>
        このコマンドレットは、次の共通パラメータをサポートします: -Verbose、-Debug、
        -ErrorAction、-ErrorVariable、および -OutVariable。詳細については、
        「get-help about_commonparameters」と入力してヘルプを参照してください。
:
:長いので省略
:

-asSecureStringのところがSwitchParameterとなっています。

-asSecureStringは引数値を必要としないパラメータであることを意味し、指定するだけで機能します。

Read-Hostはコマンドラインから1行を読み取るコマンドレットですが、-asSecureStringが指定されると入力された値は*で表されます。

PS > Read-Host -asSecureString
******
System.Security.SecureString

このように、スイッチパラメータは指定することで動作を変更することを可能にするための、引数です。

では、スイッチパラメータの作成方法についてみていきましょう。

スイッチパラメータを作成するには、スイッチパラメータにする引数の前に[switch]を付けるだけです。

下記は、単純にHelloと表示するだけのスクリプトですが、スイッチパラメータ-helpを指定すると説明が表示されるというものです。(say-hello.ps1とします)

Param ([switch]$help)

if ( $help )
{
	Write-Host "この関数は挨拶をします"
}
else
{
	Write-Host "Hello!!"
}

以下はスイッチパラメータなし呼び出した場合です。

PS C:\Work> ./say-hello.ps1
Hello!!

以下はスイッチパラメータを指定した場合です。

PS C:\Work> ./say-hello.ps1 -help
この関数は挨拶をします

スイッチパラメータの動作について理解していただけたでしょうか?

ここでスイッチパラメータのメカニズムについてみてみましょう。

スイッチパラメータは、指定すると変数に真の値(TRUE)がセットされます。

下記スクリプト(Check-Switch.ps1)を準備して実験してみましょう

param ([switch]$sw)

Write-Host $sw

スイッチパラメータを指定しない場合は、下記のようにスイッチパラメータ変数にFalseがセットされます。

PS C:\Work> ./Check-Switch
False

スイッチパラメータを指定した場合は、下記のようにスイッチパラメータ変数にTrueがセットされます。

PS C:\Work> ./Check-Switch -sw
True

ぜひ、スイッチパラメータについて理解し、今後のスクリプト開発お役立てください。

Friday, May 23, 2008 9:28:41 PM (Tokyo Standard Time, UTC+09:00)  #    Comments [0]  |  Trackback
Comments are closed.

Theme design by Jelle Druyts

Pick a theme: