Windows PowerShell
| この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。 出典を追加して記事の信頼性向上にご協力ください。(2015年7月) |
| Windows PowerShell Microsoft Windows コンポーネント |
|
|---|---|
| 詳細 | |
| 種別 | コマンドライン シェル |
| 標準提供 | Windows 7 Windows 8 Windows 8.1 Windows 10 Windows Server 2008 R2 Windows Server 2012 Windows Server 2012 R2 Hyper-V Server 2008 R2 |
| 追加提供 | Windows XP Windows Vista Windows Server 2003 Windows Server 2008 |
| 関連コンポーネント | |
| cmd.exe | |
| パラダイム | 命令型、パイプライン、オブジェクト指向、関数型、リフレクション |
|---|---|
| 登場時期 | 2006年 |
| 設計者 | Jeffrey Snover、Bruce Payette、James Truher、他 |
| 開発者 | マイクロソフト |
| 型付け | 強い型付け、型推論、動的型付け |
| 影響を受けた言語 | Tcl/Tk[1]、Ksh、Perl、C#、CL、DCL、SQL |
| プラットフォーム | Microsoft Windows |
Windows PowerShell は、マイクロソフトが開発した拡張可能なコマンドラインインターフェース (CLI) シェルおよびスクリプト言語である。オブジェクト指向に基づいて設計されており、.NET Frameworkを基盤としている。
かつては Microsoft Shell(MSH、コードネーム Monad)と呼ばれていた。
Windows 7以降のOSには標準で搭載されている。
歴史[編集]
マイクロソフトによるオペレーティングシステムには、MS-DOSからWindowsに至るまで、どのバージョンにもコマンドラインツールが付属した。それは、かつてはCOMMAND.COMであり、Microsoft Windows NT ベースの製品においては cmd.exe であった。これらのツールは、GUIで提供されるような管理機能の自動化や再利用に必ずしも長けているとは言えなかった。これはコマンドライン内の制限によるものであり、マイクロソフトが高品質なコマンドラインツールを提供しなかったためでもあった。
マイクロソフトは、コマンドラインツールの短所を補うものとして、1998年、Windows 98 で Windows Script Host (WSH) を提供した。これは様々なスクリプト言語を実装するための新しいソフトウェアであった。しかし、WSHはシェルに統合されていないという欠点があり、ドキュメントも非常に使いにくいものだった。また、WSHの持つセキュリティ上の欠陥をつくコンピュータウイルスがいくつか出現したため、システム上の脆弱性とみなされたこともあり、広く普及するには至らなかった。
そして2003年、マイクロソフトは、Windows OSやMicrosoft製品のシステム管理や自動化を行うための新世代シェルとして、またスクリプトとして実行可能なプログラミング言語として、Monad(後のPowerShell)を発表した。
2015年9月現在、Windows PowerShellの正式な最新バージョンは5.0であり、Windows 10に標準搭載されている[2]。Windows 8.1に標準搭載されているバージョンは4.0、Windows 8に標準搭載されているバージョンは3.0、Windows 7に標準搭載されているバージョンは2.0となる[3]。
沿革・バージョン[編集]
| 年月日 | 出来事 |
|---|---|
| 2003年9月 | コードネームMonadが公開された。 |
| 2006年4月 | 正式名称がWindows PowerShellとなることが発表され、リリース候補 (RC) 1がリリースされた。 |
| 2006年9月 | RC2がリリースされた。 |
| 2006年11月 | Windows PowerShell 1.0 がウェブ上でリリースされた (RTW)。動作には.NET Framework 2.0を必要とする。 |
| 2007年1月 | PowerShell 1.0 for Vista がリリースされた。 |
| 2009年10月 | Windows PowerShell 2.0 がリリースされた。 |
| 2012年9月 | Windows PowerShell 3.0 がリリースされた。動作には.NET Framework 4を必要とする。 |
| 2013年10月 | Windows PowerShell 4.0 がリリースされた。動作には.NET Framework 4.5を必要とする。 |
マイクロソフトはこれからの主なGUIツールは PowerShell 上に構築されると表明し、主な管理機能がスクリプト可能になるとした。例えば、Exchange Server 2007 の管理ツールは PowerShell の上に構築されている。多くの日常的な場面で PowerShell は CMD.EXE や WSH を置き換えるものとして利用できる。
| 項目 | 1.0 | 2.0 | 3.0 | 4.0 |
|---|---|---|---|---|
| Windows Server 2003 | ○SP1 | ○SP2 | × | × |
| Windows Server 2003 R2 | ○SP1 | ○SP2 | × | × |
| Windows Server 2008 | → | ○SP1 | ○SP2 | × |
| Windows Server 2008 R2 | → | ◎ | ○SP1 | ○SP1 |
| Windows Server 2012 | → | → | ◎ | ○ |
| Windows Server 2012 R2 | → | → | → | ◎ |
| Windows XP x64 | ○ | × | × | × |
| Windows XP | ○SP2 | ○SP3 | × | × |
| Windows Vista | ○ | ○SP1 | × | × |
| Windows 7 | → | ◎ | ○SP1 | ○SP1 |
| Windows 8 | → | → | ◎ | × |
| Windows 8.1 | → | → | → | ◎ |
「◎」標準搭載、「○」インストールして利用可能、「→」上位バージョン標準搭載、「×」利用不可
基本的な概念[編集]
PowerShell は、基本的な機能をもつ様々なコンポーネントを組み合わせたタスクによって構成される[4]。コンポーネントは、コマンドレット(cmdlet)と呼ばれるプログラムであり、その実体は .NET のクラスである。
コマンドレット間でのデータの受け渡しは、古典的な UNIX 型アプローチ(テキスト入出力をパイプする)とは異なり、オブジェクト(構造化されたデータ)で行なわれる。コマンドラインから個別にアクセスされた場合、コマンドレットの出力は自動的にテキストに変換されるが、出力が他のコマンドレットに渡されるのであれば、そのコマンドレットの入力として最も適切な形式に変換され、渡される。これにより、UNIX 型システムで一般的なテキスト処理ユーティリティ(grepやawkなど)が不要となり、インタラクティブに、またはスクリプト環境(より複雑なプログラミング言語が必要)の中で、様々なコマンドレットを結合することができる。例えば、プロセスの一覧を出力する場合、それらは単なるテキストの一覧ではなく、プロセスの情報を表すオブジェクトの一覧である。従ってそれらのオブジェクトに対して、明示的に外部の構造やライブラリを使用することなく、直接的にメソッドを適用することができる。
機能[編集]
PowerShell 1.0 には次の機能が含まれる。
- スクリプト言語。ハッシュテーブル、正規表現による
switch文、配列のスライシング、匿名メソッドなどの機能。ループ構文 (for、foreach、while)、条件文 (if、switch)、変数のスコープ (global、script、local)、関数の定義などがサポートされる。 - ユーザがエラー処理方法などといった共通の設定を指定するため、コマンドレットは一定のオプションを継承する。副作用のあるコマンドレットは
-WhatIf、-Confirmオプションをサポートする。-WhatIfは何が起こるかをユーザに通知するが、実際には何も行わない。-Confirmは何が起こるのかユーザに通知し、実行するかどうか確認を求める。 - エラー処理を制御するオプションに「一時停止」機能がある。これは、ユーザが新しいコマンドシェルに入ることで問題を分析し、もとのコマンドに復帰できるようにするというものである。こうした状況で表示されるプロンプトをユーザが定義することもできる。
- 拡張可能な「プロバイダ」モデルにより、ファイルシステムなどの階層的データ構造の処理をすることができる。例えば、PowerShell にはシステムのレジストリにアクセスするレジストリプロバイダが存在する。これを用いれば、例えばシェルプロンプトで次のようなコマンドを打つことによってレジストリの内容を表示することができる。
dir HKLM:SOFTWARE\Microsoft
- PowerShell には認証ストア、環境変数、シェル機能とエイリアスなどのプロバイダが存在する。プロバイダモデルはコマンドレットと同様に拡張可能であり、第三者が独自のプロバイダを作成して 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()
"internal"という文字列の5文字目の直後に"natio"という文字列を挿入し、結果として"international"を得る。
PS> "internal".Insert(5, "natio")
- 指定した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
脚注[編集]
- ^ Snover, Jeffrey (2008年5月25日). “PowerShell and WPF: WTF”. 2010年10月24日閲覧。
- ^ Cool Stuff about PowerShell 5 in Windows 10 - Hey, Scripting Guy! Blog - Site Home - TechNet Blogs
- ^ Windows PowerShell System Requirements
- ^ これは、PowerShell のコードネームである Monad が、ゴットフリート・ライプニッツの単子論(英: monadology)、すなわち宇宙は予定調和によって調和されたモナドと呼ばれる基本的な元素から構成される、という哲学に由来することにも現れている。
外部リンク[編集]
- Windows PowerShell (ja-JP) - Microsoft TechNet wiki
- Windows PowerShell でのスクリプティング - Microsoft TechNet
- Windows PowerShell 徹底解説 - ITpro
- Windows PowerShell - Windows PowerShell 開発チームのブログ。 (英語)
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
|
||||||||||||||||||||