【2/17】今年は「濃厚」技術トーク!@ITメールセミナー スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
 

特集:Windows PowerShellレビュー(前編)

次世代Windowsシェル「Windows PowerShell」を試す

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

Page1 Page2 Page3

 本稿は2006年4月12日に公開された「次世代WindowsシェルMSH(コード名:Monad)を試す(前編)」の改訂版です。Windows PowerShell RC1版のリリースに合わせて、Monadシェルの正式名称は「Windows PowerShell」となりました。MSHおよびMonadという名称はもはや使用されません。
 Monadベータ版からの変更点の詳細については本稿冒頭で言及しているWindows PowerShell本体のファイル「PowerShell_i386.zip」に含まれる「Windows PowerShell RC1 release notes.htm」に記載されています。

 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はまったく新しいシェルを開発中だ。それが、「Windows PowerShell」(以下、単にPowerShell)である*。PowerShellは.NET Frameworkをベースにして設計された次世代Windows用のシェルだ。

* RC1版以前は「Microsoft Command Shell(開発コード名:Monad)」という名称が付けられていた。

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

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

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

* 拡張子「.ps1」は、そのスクリプトがPowerShellバージョン1.0用のものであることを示す。

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

 なお、PowerShellのダウンロード・ページや関連する情報ページは以下にまとめておいた(すべて英語のページ)。

Windows PowerShell本体のダウンロード:
 Windows PowerShell RC1 (for .NET Framework 2.0 RTM) x86

Windows PowerShellドキュメントのダウンロード:
 Windows PowerShell RC1 Documentation Pack(「Getting Started.doc」「PowerShell User Guide.doc」「TracingQuickStart.doc」が含まれる)

開発者向けのドキュメント:
 MSDNのPowerShellドキュメント(「Getting Started Guide」「Programmer's Guide」「SDK」の3つの項目が含まれる)

スクリプト言語構文の早見表:
 Channel9:Windows Power Shell Quick Start

FAQ集:
 Channel9:Windows Power Shell Faq

サンプル・スクリプト集:
 The Script Center Script Repository: Sample Windows PowerShell Scripts

目的別の使い方:
 What Can I Do With Windows PowerShell?

 PowerShellの実行には.NET Framework 2.0が必要となる。本稿では上記のリンク先からダウンロードできる「Windows PowerShell RC1」(公開は2006/5/5)をベースに執筆している。また、実行環境としてはWindows XP Professional SP2日本語版+.NET Framework 2.0を使用している。

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

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

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

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

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

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

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2006/06/29     15:38     389109 PowerShellDocumentationPack.zip
-a---        2006/06/29     15:39    2338379 PowerShell_i386.zip
d----        2006/06/21     14:45            Contacts
d---s        2006/06/29     16:37            Cookies
d-r--        2006/06/29     14:53            Favorites
d-r--        2006/06/26     20:13            My Documents
d---s        2006/01/11     19:25            UserData
d----        2006/01/12     21:08            VSWebCache
d----        2006/06/13     18:33            WINDOWS
d-r--        2006/01/11     20:10            スタート メニュー
d----        2006/06/29     15:39            デスクトップ
lsコマンドの実行結果
この実行結果はdirのそれとまったく同じである。

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

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

CommandType     Name                            Definition
-----------     ----                            ----------
Alias           dir                             Get-ChildItem

PS 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(コマンドレット)」と呼ばれるPowerShellの内蔵コマンドの1つの種類だ。Cmdletには基本的に「動詞-名詞」の形式のコマンド名が付けられる。また、コマンド名に含まれる単語の先頭の文字は大文字となる(これに対して、エイリアス名はすべて小文字とするのがPowerShellでのルールのようである。ただし、コマンドの実行に際してはコマンド名の大文字・小文字は区別されない)。

 Cmdletは内蔵コマンドであるが、ユーザーがC#やVBでコマンドを自作して追加することもできる。Cmdletの詳細については後述する。

■エイリアス定義の一覧

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

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

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
Alias           cpi                             Copy-Item
Alias           cpp                             Copy-ItemProperty
……以下省略……
aliasコマンドの実行結果
すべてのエイリアスの一覧が表示される。現在のPowerShellのバージョンではデフォルトで合計101個のエイリアスがあらかじめ定義されているが、これらはすべてハードコーディングされているようだ。ちなみにaliasコマンド自体は「Get-Aliasコマンド」のエイリアスだが、このエイリアスだけは特殊なようでエイリアス一覧には表示されない。

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

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

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

* 「selectコマンド」と「sortコマンド」が小文字になっていることからも分かるように、これらはCmdletである「Select-Objectコマンド」と「Sort-Objectコマンド」のエイリアスである。

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

Cmdlet
Windowsコマンド
へのエイリアス
UNIXコマンド
へのエイリアス
Set-Location
cd
cd
Get-CildItem
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のコマンドへのエイリアス

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

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

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

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

PS C:\Documents and Settings\taka-e> Set-Alias c Clear-Host
PS C:\Documents and Settings\taka-e> alias c

CommandType     Name                            Definition
-----------     ----                            ----------
Alias           c                               Clear-Host
Set-Aliasコマンドによるエイリアスの追加

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

PS C:\Documents and Settings\taka-e> Remove-Item Alias:c
Remove-Itemコマンドによるエイリアスの削除

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

 

 INDEX
  [特集]Windows PowerShellレビュー
  [前編]次世代Windowsシェル「Windows PowerShell」を試す
  1.エイリアスが基本となるオペレーション
    2.プロバイダとして提供される各種ドライブ
    3.Cmdlet(コマンドレット)と関数(Function)
 
  [後編]Windows PowerShellのパワーの源は.NETオブジェクト
    1.コマンドの実行結果はオブジェクト
    2.オブジェクトが流れるパイプ
    3.クラス・ライブラリの活用
 

ホワイトペーパーTechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  企業の仮想化に足りない“発想”とは?
仮想化運用管理のキモは意外なところに!

New!
  操作もマニュアルも分かりやすい!
ユーザー視点で開発されたPC管理ツール

New!
  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  セキュリティを知り尽くす上野氏が登壇!
@ITメールソリューションLive! in Tokyo

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  世界に通用するストレージの作り方とは?
製品に込めた思いを富士通の開発者に聞く

  OSSで手間も時間も、障害も減った――
「マピオンの事例」オープンソース活用法

  「ノートPCの持ち出し禁止」で大丈夫?
情報漏えいを防ぐ管理手法とインフラは?

  1日の処理を1秒に――MySQLの達人が語る
「コスト削減」できるチューニング

  ドキュメント作成を自動化して、SEの作業
効率を大幅アップ! Visio 2007の魅力

  急速に広がるHyper-Vでのサーバ仮想化
そのベストプラクティスをデルが解説

  @IT主催セミナーで語られた、「担当者に
求められるセキュリティ対策」をレポート

  @IT「Windows 7」 特設サイトオープン!
最新情報・移行ノウハウを公開しています