特集

次世代WindowsシェルMSH(コード名:Monad)を試す(前編)

デジタルアドバンテージ 遠藤 孝信
2006/04/12

Page1 Page2 Page3

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

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

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

MSH C:\tmp> remove-item alias.html
remove-itemコマンドによるファイルの削除

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

MSH C:\tmp> remove-item c:alias.html
Cドライブにあるalias.htmlファイルの削除

 ここで先ほどの「alias:c」を思い出してほしい。「c:alias.html」がCドライブのalias.htmlというファイルを示すように、「alias:c」はAliasドライブ*の「c」というエイリアスを示している。つまりMSHでは、エイリアスの各項目はAliasドライブのアイテムとして操作できるのである。

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

 そして、remove-itemはカレント・ドライブのアイテム(項目)を削除するためのものだ。名詞部分が「item」となっているCmdletには、copy-item、move-item、get-item、new-itemなどがある。これらのコマンドはファイルやエイリアスや、後述するようにレジストリの項目などに対しても機能する。

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

 カレント・ドライブを別のドライブに切り替えるには「set-locationコマンド」を使う。ちなみに「cd」はこのコマンドのエイリアスだ(MSHでは「cd」によって、ディレクトリの変更だけでなく、ドライブの変更もできる)。次の例ではカレント・ドライブをAliasドライブに切り替えている。

MSH C:\tmp> set-location alias:
MSH Alias:\>
set-locationコマンドによるドライブの切り替え

 これ以降は、定義されたエイリアスに対して、dir(get-childitem)やtype(get-content)、copy(copy-item)などが可能になる。以下にその実行例を示す。

MSH Alias:\> dir

CommandType     Name                            Definition
-----------     ----                            ----------
Alias           ac                              add-content
Alias           clc                             clear-content
Alias           cli                             clear-item
Alias           clp                             clear-property
Alias           clv                             clear-variable
…… 以下省略 ……

MSH Alias:\> type cd
set-location
MSH Alias:\> copy cd chd
MSH Alias:\> type chd
set-location
Aliasドライブでのdir、type、copyの実行

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

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

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

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

MSH Alias:\> get-drive

Name       Provider      Root                CurrentLocation
----       --------      ----                ---------------
Alias      Microsoft....
C          Microsoft.... C:\                             tmp
cert       Microsoft.... \
D          Microsoft.... D:\
E          Microsoft.... E:\
Env        Microsoft....
F          Microsoft.... F:\
Function   Microsoft....
HKCU       Microsoft.... HKEY_CURRENT_USER
HKLM       Microsoft.... HKEY_LOCAL_MACHINE
Variable   Microsoft....
get-driveコマンドによるドライブの一覧表示

 次の実行例はレジストリにドライブを切り替え、目的のキーの位置まで移動し、そのキーの値のデータを書き換えているところだ。キーのデータを書き換えるには「set-propertyコマンド」を使用する。

MSH C:\tmp> cd hklm:
MSH HKLM:\> cd \SOFTWARE\Microsoft\MSH\1\ShellIds
MSH HKLM:\SOFTWARE\Microsoft\MSH\1\ShellIds> dir

   Hive: Microsoft.Management.Automation.Core\Registry::HKEY_LOC
   AL_MACHINE\SOFTWARE\Microsoft\MSH\1\ShellIds

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

MSH HKLM:\SOFTWARE\Microsoft\MSH\1\ShellIds> set-property Microsoft.Management.Automation.msh -property ExecutionPolicy -value Unrestricted
レジストリ・ドライブにおけるキー・データの書き換え

 レジストリに対しても、ファイルやディレクトリと同様に[TAB]キーによる補完が利く。ちなみにCmdletに対しては、例えば「set-」までを入力して[TAB]キーを押せば、名詞部分が補完される。

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

MSHで書き換えたデータの確認
もともと「Restricted」だった「ExecutionPolicy」のデータを「Unrestricted」に書き換えている。ちなみにこのデータはMSHでスクリプト・ファイルを実行するときのポリシーである。デフォルトのRestrictedではスクリプト・ファイルの実行は禁止されている。Unrestrictedはすべてのスクリプト・ファイルが実行可能となる。詳細は「help about_signing」で表示されるヘルプ画面を参照してほしい

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

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

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

MSH C:\tmp> get-provider

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-providerによるプロバイダの一覧表示

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

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


 INDEX
  [特集] 次世代WindowsシェルMSH(コード名:Monad)を試す(前編)
    1. エイリアスが基本となるオペレーション
  2. プロバイダとして提供される各種ドライブ
    3. Cmdlet(コマンドレット)と関数(Function)
 


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間