Windows PowerShell の操作のベースはオブジェクトです。Windows PowerShell では、出力結果を後で使用できるように変数 (名前の付いたオブジェクト) に保存できます。普段、他のシェルで変数を使う機会の多い方は、Windows PowerShell の変数はテキストではなくオブジェクトであるという点に注意してください。
変数の先頭には常に $ 文字が付きます。変数名には、任意の英数字およびアンダースコアを使用できます。
変数の作成
変数を作成するには、変数名として有効な名前を入力します。
PS> $loc PS>
このとき、$loc には値が存在しないため、結果は返されません。変数の作成と値の代入を同時に行うこともできます。変数が作成されるのは、まだその変数が存在しない場合だけです。存在した場合は、指定した値が既存の変数に代入されます。現在の場所を変数 $loc に格納するには、次のように入力します。
$loc = Get-Location
出力は $loc に渡されるため、このコマンドを入力しても出力結果は表示されません。Windows PowerShell では、他に渡す対象が存在しなければ、出力データが常に画面に送られます。「$loc」とだけ入力すると、現在の場所が表示されます。
PS> $loc Path ---- C:\temp
変数の内容に関する情報を表示するには、Get-Member を使用します。$loc をパイプで Get-Member に渡すと、Get-Location の出力を渡した場合とまったく同じように、この変数が PathInfo オブジェクトであることを確認できます。
PS> $loc | Get-Member -MemberType Property TypeName: System.Management.Automation.PathInfo Name MemberType Definition ---- ---------- ---------- Drive Property System.Management.Automation.PSDriveInfo Drive {get;} Path Property System.String Path {get;} Provider Property System.Management.Automation.ProviderInfo Provider {... ProviderPath Property System.String ProviderPath {get;}
変数の操作
Windows PowerShell には、変数を操作するための各種コマンドが用意されています。次のように入力すると、これを見やすい形式で一覧表示できます。
Get-Command -Noun Variable | Format-Table -Property Name,Definition -AutoSize -Wrap
変数には、現在の Windows PowerShell セッションを対象に作成される変数の他に、システム定義の変数も存在します。Remove-Variable コマンドレットを使用すると、Windows PowerShell によって制御されていないすべての変数を削除できます。次のコマンドを入力すると、すべての変数が削除されます。
Remove-Variable -Name * -Force -ErrorAction SilentlyContinue
次のような確認メッセージが表示されます。
Confirm Are you sure you want to perform this action? Performing operation "Remove Variable" on Target "Name: Error". [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):A
次に、Get-Variable コマンドレットを実行すると、残りの Windows PowerShell 変数が表示されます。"variable" という Windows PowerShell ドライブも存在するので、次のように入力して、Windows PowerShell のすべての変数を表示することもできます。
Get-ChildItem variable:
Cmd.exe の変数の使用
Windows PowerShell と Cmd.exe はまったく別のものですが、コマンド シェル環境で動作するという点では共通しています。そのため、Windows PowerShell でも、Windows のあらゆる環境変数を使用できます。これらの変数は、env: というドライブ名を通じて公開されています。次のように入力すると、これらの変数を表示できます。
Get-ChildItem env:
標準的な変数コマンドレットは、env: 変数を直接扱うようには設計されていませんが、env: というプレフィックスを指定することにより操作できます。たとえば、オペレーティング システムのルート ディレクトリを表示する場合、次のように入力することにより、Windows PowerShell 内から、コマンド シェルの %SystemRoot% 変数を使用できます。
PS> $env:SystemRoot C:\WINDOWS
Windows PowerShell 内から環境変数の作成および変更を行うこともできます。Windows PowerShell からアクセスする環境変数にも、Windows の環境変数としての通常の規則が適用されます。