特集
» 2006年07月19日 00時00分 公開

次世代Windowsシェル「Windows PowerShell」を試す特集:Windows PowerShellレビュー(前編)(2/3 ページ)

[遠藤孝信,デジタルアドバンテージ]

プロバイダとして提供される各種ドライブ

 ところで、Remove-Itemコマンドはエイリアスを削除するだけではない。aliasコマンドで表示されるエイリアス一覧をよく見ると、Remove-Itemコマンドのエイリアスには、rm、rmdir、del、erase、rdなどがある。

 実際、Remove-Itemコマンドではファイルやディレクトリも削除することができる。

PS C:\tmp> Remove-Item alias.html

Remove-Itemコマンドによるファイルの削除

 従来のコマンド・プロンプトでも、Cドライブの現在のディレクトリから「alias.html」を削除するのに、次のように記述できるのをご存じだろう。上記の実行で「C:」が省略できたのは、カレント・ドライブが「Cドライブ」だからだ。

PS C:\tmp> Remove-Item C:alias.html

Cドライブにあるalias.htmlファイルの削除

 ここで先ほどの「Alias:c」を思い出してほしい。「C:alias.html」がCドライブのalias.htmlというファイルを示すように、「Alias:c」は、

“Aliasドライブ”*の「c」というエイリアス

を示している。つまりPowerShellでは、エイリアスの各定義を「Aliasドライブのアイテム」として操作できるのである。

* PowerShellのコマンドラインでは大文字・小文字は区別されないが、ここではaliasコマンドと区別するために、エイリアスのドライブ名を「Alias」と記述している。


 そして、Remove-Itemコマンドは、カレント・ドライブのアイテム(項目)を削除するためのものだ。

 名詞部分が「Item」となっているCmdletには、Copy-Item、Move-Item、Get-Item、New-Itemなどがある。これらのコマンドは、ファイルやエイリアス、後述するレジストリの項目などに対しても機能する。

■エイリアスに対するオペレーション

 カレント・ドライブを別のドライブに切り替えるには「Set-Locationコマンド」を使う。ちなみに「cd」はこのコマンドのエイリアスだ(つまり、PowerShellの「cd」は、ディレクトリの変更だけでなく、ドライブの変更もできる)。

 次の例ではカレント・ドライブをAliasドライブに切り替えている。

PS C:\tmp> Set-Location Alias:
PS Alias:\>

Set-Locationコマンドによるドライブの切り替え

 これ以降は、定義されたエイリアス群に対して、dirやtype(=Get-Contentコマンド)、copy(=Copy-Itemコマンド)などが可能になる。以下にその実行例を示す。

PS Alias:\> dir

CommandType     Name                            Definition
-----------     ----                            ----------
Alias           ac                              Add-Content
Alias           asnp                            Add-PSSnapin
Alias           clc                             Clear-Content
Alias           cli                             Clear-Item
Alias           clp                             Clear-ItemProperty
Alias           clv                             Clear-Variable
…… 以下省略 ……

PS Alias:\> type cd
Set-Location
PS Alias:\> copy cd chd
PS Alias:\> type chd
Set-Location

Aliasドライブでのdir、type、copyの実行
ここではエイリアスの「cd」をコピーして「chd」という名前のエイリアスを作成している。

 もちろんカレント・ドライブに関係なく「copy Alias:cd Alias:chd」といった実行も可能だ。

■レジストリに対するオペレーション

 PowerShellでドライブとして扱われるものには、エイリアス以外にも、レジストリ(HKCUおよびHKLM)や環境変数(Env)、後述する関数(Function)、シェル内で定義された変数(Variable)、認証書(Cert)などが標準で用意されている。

 ドライブの一覧は「Get-PSDriveコマンド」で見ることができる。

PS Alias:\> Get-PSDrive

Name       Provider      Root                 CurrentLocation
----       --------      ----                 ---------------
Alias      Alias
C          FileSystem    C:\                              tmp
cert       Certificate   \
D          FileSystem    D:\
E          FileSystem    E:\
Env        Environment
F          FileSystem    F:\
Function   Function
HKCU       Registry      HKEY_CURRENT_USER
HKLM       Registry      HKEY_LOCAL_MACHINE
Variable   Variable

Get-PSDriveコマンドによるドライブの一覧表示
ハードディスクであるC、D、E以外に、レジストリ(HKCUおよびHKLM)や環境変数(Env)、関数(Function)、シェル変数(Variable)、認証書(Cert)などのドライブが存在する。

 次の実行例はレジストリにドライブを切り替え、目的のキーのある位置まで移動し、そのキーの値とそのデータを表示させてから、「ExecutionPolicy」という値のデータを書き換えているところだ。キーのデータを書き換えるには「Set-ItemPropertyコマンド」を使用する。また、キーに含まれる値は「-Nameオプション」で指定する。

PS Alias:\> cd HKLM:
PS HKLM:\> cd \SOFTWARE\Microsoft\PowerShell\1\ShellIds
PS HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds> dir

   Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\
   SOFTWARE\Microsoft\PowerShell\1\ShellIds

SKC  VC Name                           Property
---  -- ----                           --------
  0   2 Microsoft.PowerShell           {Path, ExecutionPolicy}

PS HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds> Get-ItemProperty Microsoft.PowerShell

PSPath          : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_
MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
PSParentPath    : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_
MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds
PSChildName     : Microsoft.PowerShell
PSDrive         : HKLM
PSProvider      : Microsoft.PowerShell.Core\Registry
Path            : C:\Program Files\Windows PowerShell\v1.0\powershell.exe
ExecutionPolicy : Restricted

PS HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds> Set-ItemProperty Microsoft.PowerShell -Name ExecutionPolicy Unrestricted

レジストリ・ドライブにおけるキー・データの書き換え
ここでは、キー「Microsoft.PowerShell」の値「ExecutionPolicy」のデータを「Restricted」から「Unrestricted」に変更している。

 レジストリの項目名に対しても、ファイルやディレクトリと同様に[TAB]キーによる補完が利き便利である。

 ちなみに、Cmdlet名自体の補完に対しては、例えば「Set-」までを入力して[TAB]キーを押せば、名詞部分が補完される。また、Cmdlet名を入力した後、「-」に続き[TAB]キーを押すと、そのCmdletで利用可能なオプションも補完できるようになっている。

 以下の画面は、上記の操作の結果をレジストリ・エディタで確認しているところだ。もともと「Restricted」だった「ExecutionPolicy」のデータを「Unrestricted」に書き換えた。

PowerShellで書き換えたデータの確認
もともと「Restricted」だった「ExecutionPolicy」のデータを「Unrestricted」に書き換えている。ちなみにこのデータはPowerShellでスクリプト・ファイルを実行するときのポリシーである。デフォルトの「Restricted」ではスクリプト・ファイルの実行は禁止されている。「Unrestricted」はすべてのスクリプト・ファイルが実行可能となる。なお、このデータの書き換えは通常「Set- ExecutionPolicyコマンド」により行う。

 種類の異なるドライブで同じコマンドが共通に使えるということにはそれほど大した意味はないが、レジストリの操作がコマンドラインから行えるということは、システム管理の面で大きな意味があるだろう。

■ドライブの実体はプロバイダ

 ユーザーにはドライブとして見える「C」「D」や「Alias」「HKLM」などは、PowerShell内部では「プロバイダ」として実装されている。実装されているプロバイダの一覧は「Get-PSProviderコマンド」で見ることができる。

PS C:\tmp> Get-PSProvider

Name                 Capabilities                  Drives
----                 ------------                  ------
Alias                ShouldProcess                 {Alias}
Environment          ShouldProcess                 {Env}
FileSystem           Filter, ShouldProcess         {C, D, E, F...}
Function             ShouldProcess                 {Function}
Registry             ShouldProcess                 {HKLM, HKCU}
Variable             ShouldProcess                 {Variable}
Certificate          ShouldProcess                 {cert}

Get-PSProviderによるプロバイダの一覧表示

 この一覧からも分かるように、例えば「FileSystemプロバイダ」がCやDといったドライブへのアクセスを提供している。

 Cmdletと同様にプロバイダも追加可能であり、C#やVBで作成できる。プロバイダの例としてはデータベースやFTPへアクセスするものなど多数考えられる。今後はさまざまなPowerShell用のプロバイダが登場するだろう。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。