Windows PowerShell

del.icio.us del.icio.us
Digg Digg
Furl Furl
Reddit Reddit
Rojo Rojo
Add to OnlyWire
Windows PowerShell

開発元 Microsoft Corporation
最新版 1.0 / 2006年11月14日
最新評価版 2.0 CTP / 2007年11月6日
対応OS Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008
プラットフォーム x86, x86-64, Itanium
種別 シェル
ライセンス MS-EULA
公式サイト Windows PowerShell
  

Windows PowerShellは、マイクロソフトが開発した拡張可能なコマンドラインインターフェース(CLI)シェルおよびスクリプト言語である。オブジェクト指向に基づいて設計されており、.NET Framework 2.0を基盤としている。

かつてはMicrosoft Shell(MSH、コードネームMonad)と呼ばれていた。

Windows XPWindows Server 2003Windows Vistaに対応しており、Windows Server 2008に含まれることが予定されている。

目次

歴史

マイクロソフトによるOSには、MS-DOSからWindowsに至るまで、どのバージョンにもコマンドラインツールが付属した。それは、かつてはCOMMAND.COMであり、NTベースのOSにおいてはcmd.exeであった。これらのツールは、GUIで提供されるような管理機能の自動化や再利用に必ずしも長けているとは言えなかった。これはコマンドライン内の制限によるものであり、マイクロソフトが高品質なコマンドラインツールを提供しなかったためでもあった。Windows Server 2003では状況は改善されたが、それでもユーザは適切なドキュメントやコマンドライン機能の不足に苦しんだ。

マイクロソフトは、コマンドラインツールの短所を補うものとして、1998年、Windows 98Windows Script Host(WSH)を提供した。これは様々なスクリプト言語を実装するための新しいスクリプティングレイヤーであった。しかし、WSHはシェルに統合されていないという欠点があり、ドキュメントも非常に使いにくいものだった。また、WSHの持つセキュリティ上の欠陥をつくコンピューターウイルスがいくつか出現したため、システム上の脆弱性とみなされたこともあり、広く普及するには至らなかった。

マイクロソフトによるコマンドラインツール改善の試みとしては、Windows Server 2003と一部のバージョンのWindows XP向けの、CScript.exeと呼ばれるコマンドラインベースのスクリプト環境も存在する(本質的にはWSHの一部分である)が、既存のシェル(cmd.exe)には統合されなかった。これらのOSには、他にもアドホックなコマンドラインインターフェース(例えばnetsh)が存在したが、やはり統合はされなかった。

2004年、マイクロソフトはMonadMSH)と呼ばれる新しいシェルの開発に着手した。この新しいシェルは、広範囲にわたる管理タスクの自動化が可能であるように設計された。

マイクロソフトは2005年6月、2005年9月、2006年1月にそれぞれベータ版をリリースした。

2006年4月、マイクロソフトはMonadをWindows PowerShellと改名し、マイクロソフトの管理技術において重要な役割を担うものと位置づけた。同時にリリース候補(RC)1がリリースされた。

2006年9月、RC2がリリースされた。

2006年11月、Windows PowerShell 1.0がウェブ上でリリースされた(RTW)。

2007年1月、PowerShell for Vistaがリリースされた。

マイクロソフトはこれからの主なGUIツールはPowerShell上に構築されると表明し、主な管理機能がスクリプト可能になるとした。例えば、Exchange Server 2007の管理ツールはPowerShellの上に構築されている。多くの日常的な場面でPowerShellはCMD.EXEやWSHを置き換えるものとして利用できる。しかし、後方互換性のためにCMD.EXEやWSHのいずれも将来のWindowsでサポートされると思われる。

基本的な概念

PowerShellは、基本的な機能をもつ様々なコンポーネントを組み合わせたタスクによって構成される。これは、PowerShellのコードネームであるMonadが、ゴットフリート・ライプニッツ単子論(monadology)、すなわち宇宙は予定調和によって調和されたモナドと呼ばれる基本的な元素から構成される、という哲学に由来することにも現れている。PowerShellのコンポーネントは、cmdlet(コマンドレット)と呼ばれるプログラムであり、その実体は.NETのクラスである。

cmdlet間でのデータの受け渡しは、古典的なUNIX型アプローチ(テキスト入出力をパイプする)とは異なり、オブジェクト(構造化されたデータ)で行なわれる。コマンドラインから個別にアクセスされた場合、cmdletの出力は自動的にテキストに変換されるが、出力が他のcmdletに渡されるのであれば、そのcmdletの入力として最も適切な形式に変換され、渡される。これにより、UNIX型システムで一般的なテキスト処理ユーティリティ(grepawkなど)が不要となり、インタラクティブに、またはスクリプト環境(より複雑なプログラミング言語が必要)の中で、様々なcmdletを結合することができる。例えば、プロセスの一覧を出力する場合、それらは単なるテキストの一覧ではなく、プロセスの情報を表すオブジェクトの一覧である。従ってそれらのオブジェクトに対して、明示的に外部の構造やライブラリを使用することなく、直接的にメソッドを適用することができる。

機能

PowerShell 1.0には次の機能が含まれる。

  • C#スタイルのスクリプト言語。ハッシュテーブル正規表現によるswitch文配列スライシング、匿名メソッドなどの機能。ループ構文(forforeachwhile)、条件文(ifswitch)、変数のスコープglobalscriptlocal)、関数の定義などがサポートされる。
  • ユーザがエラー処理方法などといった共通の設定を指定するため、cmdletは一定のオプションを継承する。副作用のあるcmdletは-WhatIf-Confirmオプションをサポートする。-WhatIfは何が起こるかをユーザに通知するが、実際には何も行わない。-Confirmは何が起こるのかユーザに通知し、実行するかどうか確認を求める。
  • エラー処理を制御するオプションに「一時停止」機能がある。これは、ユーザが新しいコマンドシェルに入ることで問題を分析し、もとのコマンドに復帰できるようにするというものである。こうした状況で表示されるプロンプトをユーザが定義することもできる。
  • 拡張可能な「プロバイダ(provider)」モデルにより、ファイルシステムなどの階層的データ構造の処理をすることができる。例えば、PowerShellにはシステムのレジストリにアクセスするレジストリプロバイダが存在する。これを用いれば、例えばシェルプロンプトで次のようなコマンドを打つことによってレジストリの内容を表示することができる。
dir HKLM:SOFTWARE\Microsoft
PowerShellには認証ストア、環境変数、シェル機能とエイリアスなどのプロバイダが存在する。プロバイダモデルはcmdletと同様に拡張可能であり、第三者が独自のプロバイダを作成してPowerShellに組み込むことができる。
  • 「実行ポリシー(execution policies)」という概念により、PowerShellによるスクリプトの実行に対して大まかなセキュリティ上の制約を課すことができる。実行ポリシーはPowerShellが設定ファイルを読み込み、スクリプトを実行するための制約を定義する。Restricted、AllSigned、RemoteSigned、Unrestrictedという四つの実行ポリシーが存在する。
  • スクリプト作成者の識別や、スクリプトの安全性の保証のため、デジタル署名によってスクリプトに署名することができる。
  • 通常、コマンドラインオプションは省略せずに完全な英単語を用いるが、曖昧でない範囲で文字数を小さくすることができる。例えば、-show-detailed-informationオプションは他に「s」で始まるオプションがなければ-sと指定することができる。
  • ユーザ定義のタブ補完機能が利用できる。Windowsのcmd.exeはファイル名やディレクトリ名しか補完できなかった。
  • コマンドの出力を変数に代入することができる。この変数はオブジェクトやオブジェクトの配列であり、後に任意の方法で処理することができる。

使用例

  • "p"で始まるプロセスを全て停止する。
PS> get-process p* | stop-process
  • 1000MB以上のメモリを占有するプロセスを検索し、停止する。
PS> get-process | where { $_.WS -gt 1000MB } | stop-process
  • ディレクトリ中に含まれる全ファイルの合計サイズを計算して出力する。
PS> get-childitem | measure-object -property length -sum
  • 指定したプロセスが終了するまで待機する。
PS> $processToWatch = get-process notepad
PS> $processToWatch.WaitForExit()
  • 文字列に含まれる小文字を大文字に変換する。
PS> "hello, world!".ToUpper()
  • "string"という文字列の一文字目の後に"ABC"という文字列を挿入し、結果として"sABCtring"を得る。
PS> "string".Insert(1, "ABC")
  • 指定したRSSフィードをダウンロードし、最新の8エントリーのタイトルを表示する。
PS> $rssUrl = "http://blogs.msdn.com/powershell/rss.aspx"
PS> $blog = [xml](new-object System.Net.WebClient).DownloadString($rssUrl)
PS> $blog.rss.channel.item | select title -first 8
  • 変数$UserProfileにUserProfile環境変数の値をセットする。
PS> $UserProfile = $env:UserProfile

外部リンク

This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.


Giant Panda

Mercedes Car
James Bond Guide
This site monitored by SitePinger.net