特集

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

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

Page1 Page2 Page3

 Windowsのシェルといえばコマンド・プロンプト(cmd.exe)であるが、その機能はUNIXなどのシェルと比較するとまったく貧弱なものである。WindowsではMMC(Microsoft Management Console)などのGUIによるシステム管理/設定のインターフェイスはリッチだが、運用や管理や自動実行が容易なスクリプトによるインターフェイスは弱い。

 これはアプリケーションやサービスの設定がファイル・ベースであるUNIXなどに対して、Windowsがレジストリ・ベースであることも1つの要因だろう。またコマンド・プロンプトの機能を補うために、WSH(VBScriptおよびJScript)やWindows Services for UNIX、あるいはWMI(Windows Management Instrumentation)なども用意されているが、逆にそれらがWindowsのシステム管理を複雑化させていることも否めない。

 このような問題を一掃すべく、現在Microsoftはまったく新しいシェルを開発中だ。それが、「Microsoft Command Shell(MSH、開発コード名:Monad)」である。MSHは.NET Frameworkをベースにして設計された次世代Windows用のシェルだ。

 多くのシェルがそうであるように、MSHは次の2つの機能を提供する。

  • 対話式シェルによるオペレーション
  • シェル・スクリプトの実行(スクリプト言語)

 もちろんこれら2つは別々のものではない。MSHではシェル・スクリプトは.mshファイルとして記述して実行するが、その記述内容は対話式シェルで直接入力しても実行できるし、対話式シェルで実行する一連のコマンドを1つのシェル・スクリプトとして記述し、1つのコマンドとして実行することもできる。

 上述したようにMSHの本来の目的は、強力なシェル・スクリプトによるシステムの管理や運用であるが、本稿ではまず対話式シェルとしてMSHを使いながら、MSHの機能や仕組みを俯瞰(ふかん)してみる。

 MSHについての詳細な情報は以下のサイトから得ることができる。

 なお、本稿ではつい先日に公開された「Windows "Monad" Shell Beta 3.1 (for .NET Framework 2.0 RTM) x86」をベースに執筆している。使用している環境はWindows XP Professional SP2+.NET Framework 2.0である。

エイリアスが基本となるオペレーション

 以下の画面はMSHを起動し、まずはおなじみの「dir」を実行したところである。ドライブの空き領域などは表示されないが、ディレクトリのリストは正しく表示できている。


MSHを起動しdirコマンドを実行した画面

 UNIXではdirと同等のコマンドは「ls」であるが、MSHではこのコマンドも使える(以下ではMSHの実行結果を画面のキャプチャではなく、画面からコピーしたテキストで示す。また太字はキーボードからの入力を示している)。

MSH C:\Documents and Settings\taka-e> ls

    Directory: Microsoft.Management.Automation.Core\FileSystem::C:\Documents and Settings\taka-e

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2006/04/06     14:48       7697 readme.html
-a---        2006/04/06     15:11       7701 test.txt
d---s        2006/04/11      3:24            Cookies
d-r--        2006/04/11      3:16            Favorites
d-r--        2006/04/07      3:34            My Documents
d---s        2006/02/03     18:13            UserData
d-r--        2006/02/15      3:20            スタート メニュー
d----        2006/04/11      2:50            デスクトップ
lsコマンドの実行結果
この実行結果はdirのそれとまったく同じである。

 dirとlsの実行結果はまったく同じだが、実はこれらはどちらも既存のコマンドのエイリアス(別名)だ。これらが何のエイリアスかは「aliasコマンド」により分かる。

MSH C:\Documents and Settings\taka-e> alias dir

CommandType     Name                            Definition
-----------     ----                            ----------
Alias           dir                             get-childitem

MSH C:\Documents and Settings\taka-e> alias ls

CommandType     Name                            Definition
-----------     ----                            ----------
Alias           ls                              get-childitem
aliasコマンドの実行結果
「alias エイリアス名」で、エイリアス定義されている元のコマンドを見ることができる。dirもlsも「get-childitemコマンド」の別名である。

 このように、dirやlsは「get-childitemコマンド」の別名である。

 このget-childitemコマンドは、「Cmdlet(コマンドレット)」と呼ばれるMSHの内蔵コマンドの1つである。Cmdletには基本的に「動詞-名詞」の形式のコマンド名が付けられる。内蔵コマンドであるが、ユーザーがC#やVBでコマンドを自作して追加することもできる。Cmdletについては後述する。

■エイリアス定義の一覧

 現在実行中のMSHで定義されているエイリアスの一覧を見るには、パラメータなしでaliasコマンドを実行すればよい。

MSH C:\Documents and Settings\taka-e> alias

CommandType     Name                            Definition
-----------     ----                            ----------
Alias           ac                              add-content
Alias           clc                             clear-content
Alias           cli                             clear-item
Alias           clp                             clear-property
Alias           clv                             clear-variable
Alias           cpi                             copy-item
Alias           cpp                             copy-property
…… 以下省略 ……
aliasコマンドの実行結果
すべてのエイリアスの一覧が表示される。現在のMSHのバージョンではデフォルトで合計93個のエイリアスがあらかじめ定義されているが、これらはすべてハードコーディングされているようだ。

 デフォルトで定義されているすべてのエイリアスの一覧を別ページ「alias.html」で用意した。ちなみにこのalias.htmlは次のようなコマンドで作成したものだ(ただし手動で<table>タグに「border=1」を追加している)。

alias | select name, definition | sort name | convert-html > alias.html
エイリアスの一覧をalias.htmlに出力

 これは「alias」の出力から、「selectコマンド」により「name」と「definition」の項目を選択し、その結果を「sortコマンド」により「name」の項目でソートし、さらにその結果を「convert-htmlコマンド」によりHTML化したものをファイル「alias.html」に出力している。パイプライン「|」の働きは既存のシェルとは少々異なるのだが、これについては次回で触れる予定だ。

 以下に、Cmdletと基本的なWindowsおよびUNIXのコマンドへのエイリアスとの対応を抜き出してみた。

Cmdlet Windowsコマンドへの
エイリアス
UNIXコマンドへの
エイリアス
set-location cd cd
get-childitem dir ls
get-content type cat
rename-item ren mv
copy-item copy cp
remove-item del rm
clear-host cls clear
Cmdletと基本的なWindowsおよびUNIXのコマンドへのエイリアス

 少し無理やりな感じのするものもあるが、MSHではエイリアスを多用することにより、既存のWindowsユーザーだけでなく、UNIX系ユーザーにもある程度使いやすいように配慮しているようだ。

 ちなみにファイルのパスの区切りは、日本語版Windowsでは円マーク「\」だが、MSHではUNIXと同様にスラッシュ「/」も使えるようになっている。これに伴い、コマンドのパラメータ(オプション)の指定は、スラッシュではなく、UNIXと同様にハイフン「-」で指定する(例:dir -Recurse)。

■エイリアスの追加と削除

 もう少しaliasコマンドの使い方について見ておこう。エイリアスの定義の追加は「set-aliasコマンド」によって行う。次の例は、clear-hostコマンドを「c」にエイリアスしている。これで「c」を実行するだけで画面をクリアできる。

MSH C:\Documents and Settings\taka-e> set-alias c clear-host
MSH C:\Documents and Settings\taka-e> alias c

CommandType     Name                            Definition
-----------     ----                            ----------
Alias           c                               clear-host
set-aliasコマンドによるエイリアスの追加

 エイリアスの削除は「remove-itemコマンド」により、次のようにして行える。

MSH C:\Documents and Settings\taka-e> remove-item alias:c
remove-itemコマンドによるエイリアスの削除

 ここで「alias:c」は、エイリアスとして定義されている「c」を意味する。

 

 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 記事ランキング

本日 月間