Windows PowerShell
| Windows PowerShell Microsoft Windows コンポーネント |
|
|---|---|
| 詳細 | |
| 種別 | コマンドライン シェル |
| 標準提供 | Windows Server 2008 Windows 7 Windows Server 2008 R2 Hyper-V Server 2008 R2 |
| 追加提供 | Windows XP Windows Vista |
| 関連コンポーネント | |
| cmd.exe | |
Windows PowerShellは、マイクロソフトが開発した拡張可能なコマンドラインインターフェース (CLI) シェルおよびスクリプト言語である。オブジェクト指向に基づいて設計されており、.NET Framework 2.0を基盤としている。
かつてはMicrosoft Shell(MSH、コードネームMonad)と呼ばれていた。
Windows XP、Windows Vistaに対応しており、Microsoft Windows 7 から標準で含まれている。
目次 |
[編集] 歴史
マイクロソフトによるOSには、MS-DOSからWindowsに至るまで、どのバージョンにもコマンドラインツールが付属した。それは、かつてはCOMMAND.COMであり、NTベースのOSにおいてはcmd.exeであった。これらのツールは、GUIで提供されるような管理機能の自動化や再利用に必ずしも長けているとは言えなかった。これはコマンドライン内の制限によるものであり、マイクロソフトが高品質なコマンドラインツールを提供しなかったためでもあった。
マイクロソフトは、コマンドラインツールの短所を補うものとして、1998年、Windows 98でWindows Script Host (WSH) を提供した。これは様々なスクリプト言語を実装するための新しいスクリプティングレイヤーであった。しかし、WSHはシェルに統合されていないという欠点があり、ドキュメントも非常に使いにくいものだった。また、WSHの持つセキュリティ上の欠陥をつくコンピューターウイルスがいくつか出現したため、システム上の脆弱性とみなされたこともあり、広く普及するには至らなかった。
[編集] 沿革
2006年リリース候補 (RC) 1がリリースされた。
2006年9月、RC2がリリースされた。
2006年11月、Windows PowerShell 1.0がウェブ上でリリースされた (RTW)。
2007年1月、PowerShell for Vistaがリリースされた。
2009年10月27日、Windows PowerShell 2.0がリリースされた。
マイクロソフトはこれからの主なGUIツールはPowerShell上に構築されると表明し、主な管理機能がスクリプト可能になるとした。例えば、Exchange Server 2007の管理ツールはPowerShellの上に構築されている。多くの日常的な場面でPowerShellはCMD.EXEやWSHを置き換えるものとして利用できる。
[編集] 基本的な概念
PowerShellは、基本的な機能をもつ様々なコンポーネントを組み合わせたタスクによって構成される。これは、PowerShellのコードネームであるMonadが、ゴットフリート・ライプニッツの単子論 (monadology)、すなわち宇宙は予定調和によって調和されたモナドと呼ばれる基本的な元素から構成される、という哲学に由来することにも現れている。PowerShellのコンポーネントは、cmdlet(コマンドレット)と呼ばれるプログラムであり、その実体は.NETのクラスである。
cmdlet間でのデータの受け渡しは、古典的なUNIX型アプローチ(テキスト入出力をパイプする)とは異なり、オブジェクト(構造化されたデータ)で行なわれる。コマンドラインから個別にアクセスされた場合、cmdletの出力は自動的にテキストに変換されるが、出力が他のcmdletに渡されるのであれば、そのcmdletの入力として最も適切な形式に変換され、渡される。これにより、UNIX型システムで一般的なテキスト処理ユーティリティ(grepやawkなど)が不要となり、インタラクティブに、またはスクリプト環境(より複雑なプログラミング言語が必要)の中で、様々なcmdletを結合することができる。例えば、プロセスの一覧を出力する場合、それらは単なるテキストの一覧ではなく、プロセスの情報を表すオブジェクトの一覧である。従ってそれらのオブジェクトに対して、明示的に外部の構造やライブラリを使用することなく、直接的にメソッドを適用することができる。
[編集] 機能
PowerShell 1.0には次の機能が含まれる。
- スクリプト言語。ハッシュテーブル、正規表現によるswitch文、配列のスライシング、匿名メソッドなどの機能。ループ構文 (for、foreach、while)、条件文 (if、switch)、変数のスコープ (global、script、local)、関数の定義などがサポートされる。
- ユーザがエラー処理方法などといった共通の設定を指定するため、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> "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
[編集] 外部リンク
- Windows PowerShell でのスクリプティング - Microsoft TechNet
- Windows PowerShell徹底解説 - ITpro
- Windows PowerShell - Windows PowerShell開発チームのブログ。 (英語)
|
||||||||||||||||||||