ところで、Remove-Itemコマンドはエイリアスを削除するだけではない。aliasコマンドで表示されるエイリアス一覧をよく見ると、Remove-Itemコマンドのエイリアスには、rm、rmdir、del、erase、rdなどがある。
実際、Remove-Itemコマンドではファイルやディレクトリも削除することができる。
PS C:\tmp> Remove-Item alias.html
従来のコマンド・プロンプトでも、Cドライブの現在のディレクトリから「alias.html」を削除するのに、次のように記述できるのをご存じだろう。上記の実行で「C:」が省略できたのは、カレント・ドライブが「Cドライブ」だからだ。
PS C:\tmp> Remove-Item 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:\>
これ以降は、定義されたエイリアス群に対して、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
もちろんカレント・ドライブに関係なく「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
次の実行例はレジストリにドライブを切り替え、目的のキーのある位置まで移動し、そのキーの値とそのデータを表示させてから、「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
レジストリの項目名に対しても、ファイルやディレクトリと同様に[TAB]キーによる補完が利き便利である。
ちなみに、Cmdlet名自体の補完に対しては、例えば「Set-」までを入力して[TAB]キーを押せば、名詞部分が補完される。また、Cmdlet名を入力した後、「-」に続き[TAB]キーを押すと、そのCmdletで利用可能なオプションも補完できるようになっている。
以下の画面は、上記の操作の結果をレジストリ・エディタで確認しているところだ。もともと「Restricted」だった「ExecutionPolicy」のデータを「Unrestricted」に書き換えた。
種類の異なるドライブで同じコマンドが共通に使えるということにはそれほど大した意味はないが、レジストリの操作がコマンドラインから行えるということは、システム管理の面で大きな意味があるだろう。
■ドライブの実体はプロバイダ
ユーザーにはドライブとして見える「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}
この一覧からも分かるように、例えば「FileSystemプロバイダ」がCやDといったドライブへのアクセスを提供している。
Cmdletと同様にプロバイダも追加可能であり、C#やVBで作成できる。プロバイダの例としてはデータベースやFTPへアクセスするものなど多数考えられる。今後はさまざまなPowerShell用のプロバイダが登場するだろう。
Copyright© Digital Advantage Corp. All Rights Reserved.