PowerShell関連のドキュメントやヘルプを読み進めていくと頻繁に登場するのが、この「ドライブ」というキーワードだ。ドライブとは、ファイル・システムにおけるドライブと同様、PowerShell上のコマンドレットからアクセス可能な「データの保管場所」のことである。ファイル・システムのドライブからフォルダやファイルにアクセスできるのと同様に、(例えば)レジストリドライブからはレジストリ項目に、環境変数ドライブからは環境変数に、それぞれアクセスできるというわけだ。
デフォルトで、どのようなドライブが公開されているのかを確認するには、Get-PSDriveコマンドレットを使用する。
※PowerShellで利用可能なドライブを一覧表示させる
PS > Get-PSDrive
Name Provider Root
---- -------- ----
Alias Alias
C FileSystem C:\
cert Certificate \
D FileSystem D:\
E FileSystem E:\
Env Environment
Function Function
HKCU Registry HKEY_CURRENT_USER
HKLM Registry HKEY_LOCAL_MACHINE
Variable Variable
Z FileSystem Z:\
このように、おなじみのファイル・システムのドライブ(C:ドライブやD:ドライブ)のほかに、Alias:ドライブ(エイリアス)、HKCU:ドライブ(レジストリのHKEY_CURRENT_USER)、Env:ドライブ(環境変数)など、さまざまなドライブが用意されていることが確認できる。なお、.NET Frameworkによるプログラミングの知識が必要になるため、本稿では割愛するが、これらドライブはユーザーが自前で追加することも可能だ。従って、例えばPowerShell上からデータベースにアクセスするようなドライブを追加することも可能だ。このための具体的なコードは以下のページでも紹介されている。難解ではあるが、興味のある方は一読をお勧めする。
これらドライブを切り替えることで、1つのコマンドレットでさまざまなデータストアにアクセスできるのも、PowerShellの大きな特徴の1つだ。
例えば、先ほどのGet-ChildItemコマンドレットも、デフォルトではカレント・ドライブがファイル・システムのドライブとなっているために、たまたまカレント・フォルダのファイル一覧を表示していたにすぎないわけで、ドライブを変更しさえすれば、レジストリや環境変数、エイリアスなどの情報にアクセスすることも可能だ。例えば、以下はGet-ChildItemコマンドレットで、現在定義されている環境変数を一覧表示する例だ。
※定義済みの環境変数を一覧表示する
PS C:\Documents and Settings\Yamada> Set-Location Env:
PS Env:\> Get-ChildItem
Name Value
---- -----
Path C:\WINDOWS\system32;C:\WINDOWS;
C:\WINDOWS\system32\WBEM;C:\Program Files\Intel\DMIX;C...
TEMP C:\DOCUME~1\Yamada\LOCALS~1\Temp
SESSIONNAME Console
PATHEXT .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;
.WSF;.WSH;.PSC1
USERDOMAIN DIMENSION5100C
PROCESSOR_ARCHITECTURE x86
SystemDrive C:
TZ JST-9
……(以下省略)……
Set-Locationは、従来のコマンド・プロンプトにおけるcdコマンドに相当するコマンドレットだ。つまり、ここではカレントのドライブを、デフォルトのCドライブからEnv(環境変数)ドライブに切り替えているというわけだ。実際、ここではプロンプトの表示を省略せずに掲載しているが、もともとの「PS C:\Documents and Settings\Yamada >」から「PS Env:\>」に変更されていることが確認できるだろう。あとは、Get-ChildItemコマンドを実行することで、カレント・ドライブ配下の情報として、ここでは環境変数名と対応する値の一覧を表示することができる。
同様に、レジストリのHKEY_CURRENT_USER配下にアクセスしたいならば、まったく同じ要領で以下のように記述すればよい。
PS > Set-Location HKCU:
PS > Get-ChildItem
Hive: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER
SKC VC Name Property
--- -- ---- --------
2 0 AppEvents {}
0 32 Console {ColorTable00, ColorTable01, ColorTable02, ColorTable03...}
24 1 Control Panel {Opened}
……(以下省略)……
ここでは、Get-ChildItem/Set-Locationコマンドレットを一例に説明したが、もちろん、ほかの主要なコマンドレットでもドライブを切り替えることで、同一のコマンドレットで異なるデータストアにアクセスすることが可能になる。
PowerShellのドキュメントを眺めていると、ドライバと並んで、よく登場するのが「プロバイダ」というキーワードだ。もっとも、またもや新しい概念かと身構える必要はない。プロバイダとは、ドライバの実装だと思っていただければよいだろう。ドライバの機能を実際に提供している.NET Frameworkベースのクラス・ライブラリが、プロバイダなのである。
先ほど、Get-PSDriveコマンドレット(リスト「※PowerShellで利用可能なドライブを一覧表示させる」参照)で、PowerShell標準で提供されているドライバを確認したが、その出力項目に「Provider」というプロパティが含まれているのに気付いた方もいたかもしれない。これがそれぞれのドライブに対応するプロバイダの名前となる。これを確認すると、例えばC:、D:、E:などのドライブはFileSystemプロバイダで、HKCU:、HKLM:などのドライブはRegistryプロバイダで提供されていることが確認できる。
以上、今回はPowerShellを利用するうえで知っておきたい基本的なキーワードとして、「コマンドレット」「.NETオブジェクト」「ドライバ(プロバイダ)」について紹介した。従来のコマンド・プロンプトと比べると、PowerShellはさまざまな点で進化を遂げているが、実のところ、底辺のところで押さえなければならないポイントはそれほどに多くはない。今回紹介したキーワードを確実に理解してさえいれば、あとは付属のドキュメントや、そのほかの書籍/記事などから理解を深めていくことは、それほど難しくはないはずだ。
さて、今回、対話型シェル環境としてのPowerShellについて理解したところで、後編ではPowerShellのスクリプティング実行環境としての機能を見ていく。どうぞお楽しみに。
Copyright© Digital Advantage Corp. All Rights Reserved.