この記事では、PowerShellの変数($)について説明します。
変数について
変数は、数値や文字、コマンドレットの実行結果として得られるオブジェクトを格納できる入れ物です。
PowerShellの変数は、ドル記号($)から始まる英数字で名前を定義します。変数名は大文字と小文字は区別されず、スペースや特殊文字を含めることができます。 ただし、特殊文字やスペースを含む変数名は使用が困難であり、避ける必要があります。変数への値の代入には等号(=)を使用します。
数値の代入
$number = 1
◎実行結果
$number 1
文字列の代入
$words = "The green cat."
◎実行結果
$words The green cat.
変数の演算結果の代入
$number = 3 $result = $number * 3
◎実行結果
$result 9
コマンドレットの結果の代入
$cmd = Get-ChildItem
◎実行結果
$cmd ディレクトリ: C:\temp Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2019/09/29 22:50 48 test1.txt -a---- 2022/01/17 19:23 3 test2.txt
変数の内容をコマンドとして実行する場合には、以下の注意点があります。
$cmd = Get-ChildItem コマンドレットの実行結果が$cmdに格納される。
$cmd = ”Get-ChildItem” コマンドレット名が文字列として$cmdに格納される。
コマンドレット名を変数に格納した場合、変数を指定してコマンドレットを実行するには、変数名の先頭にアンパサンド(&)を指定します。
$cmd = "Get-ChildItem"
◎実行結果
&$cmd ディレクトリ: C:\temp Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2019/09/29 22:50 48 test1.txt -a---- 2022/01/17 19:23 3 test2.txt
変数に格納した文字列をコマンドとして実行するには、「Invoke-Expression」コマンドレットを使用できます。
Invoke-Expressionコマンドレットの使用例
PS> $p="ping 127.0.0.1" PS> Invoke-Expression $p 127.0.0.1 に ping を送信しています 32 バイトのデータ: 127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=64 127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=64 127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=64 127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=64 127.0.0.1 の ping 統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 0ms、最大 = 0ms、平均 = 0ms
変数のスコープ
既定では、変数は作成されたスコープでのみ使用できます。
たとえば、関数で作成した変数は、関数内でのみ使用できます。
スクリプトで作成した変数は、スクリプト内でのみ使用できます。
スクリプトをドット ソースにすると、変数が現在のスコープに追加されます。
まとめ
今回はPowerShellの変数について説明しました。
PowerShellの変数を上手に活用して、効率的なスクリプトを開発しましょう。