PowerShell変数

PowerShellの変数宣言

変数宣言

PowerShellでは、「$」から始まる単語は変数になります。

変数の宣言をしなくても変数を使用可能であり、どんな型の値でも代入できます。


$msg = "variable"
$val = 1

変数は「Variant型」ではなく「Object型」となります。「.NET Framework」のオブジェクトであるため、操作を行うことが可能です。「.NET Framework SDK」のヘルプを参照すれば、数値や文字列に対してどのような操作が可能であるか調べることができます。


> $val = 123
> $val1.GetType().FullName
System.Int32

変数の型

PowerShellでは、明示的に型を指定する方法も準備されています。


[型] 変数名 = 値

型には以下の種類があります。


[byte]$val   = 1         # byte
[int]$val    = 2         # int
[double]$val = 3.14159   # double
[string]$val = "windows" # string

PowerShellの変数スコープ

スコープは以下の形式で指定します。


スコープ:変数

スコープを指定せずに宣言した変数はローカルスコープとして扱われます。

グローバル global スクリプトファイル外からでも読み書き可能
スクリプト script 同一スクリプトファイルに限り、読み書き可能
ローカル local 現在のブロック内、及び子ブロック(ブロック中にブロックを記述する場合)から読み書き可能
プライベート private 現在のブロック内からのみ読み書き可能

下記スクリプトの実行結果は「PRIVATE SCOPE, LOCAL SCOPE, SCRIPT SCOPE」となります。


Function Set-Value {
    $local:val = "LOCAL SCOPE, "
    Set-SubValue
    Write-Host $val
}

Function Set-SubValue {
    $private:val = "PRIVATE SCOPE, "
    Write-Host $val
}

$val = "SCRIPT SCOPE"
Set-Value
Write-Host $val

自動変数(シェル変数)

PowerShell起動直後に「Get-Variable」を実行すれば、自動変数について調べることができます。(詳細は「Get-Help about_automatic_variables」を参考にできます。)

代表的な自動変数は以下の通りです。

$$ 前のコマンド ラインの最後のトークン。
$^ 前のコマンド ラインの最初のトークン。
$? 最後のコマンドの論理値状態。
$_ 現在のパイプライン オブジェクト。
$args スクリプトまたは関数の引数。
$input スクリプトにパイプで連結されているオブジェクトの列挙子。
$Matches -match 演算子で検出された一致結果の連想配列。
$HOME ユーザーのホーム ディレクトリ。
$Error 前のコマンドのエラーの配列。
$MyInvocation スクリプトファイル自身に関する情報

関連ページ