Windows PowerShell
PowerShell | |
---|---|
パラダイム | 命令型、パイプライン、オブジェクト指向、関数型、リフレクション |
登場時期 | 2006年 |
設計者 | Jeffrey Snover、Bruce Payette、James Truher、他 |
開発者 | マイクロソフト |
型付け | 強い型付け、型推論、動的型付け |
影響を受けた言語 | Tcl/Tk[1]、Ksh、Perl、C#、CL、DCL、SQL |
プラットフォーム | Windows, macOS, Linux |
Windows PowerShell はマイクロソフトが開発した拡張可能なコマンドラインインターフェース (CLI) シェルおよびスクリプト言語である。オブジェクト指向に基づいて設計されており、.NET Frameworkを基盤としている。
かつてはMicrosoft Shell(MSH、コードネーム Monad)と呼ばれていた。
Windows 7以降のオペレーティングシステム (OS) には標準で搭載されている。
歴史
マイクロソフトによるOSにはMS-DOSからWindowsに至るまで、どのバージョンにもコマンドラインツールが付属した。それは、かつてはCOMMAND.COM
であり、Microsoft Windows NTベースの製品においてはcmd.exe
であった。これらのツールはグラフィカルユーザインタフェース (GUI) で提供されるような管理機能の自動化や再利用に必ずしも長けているとは言えなかった。これはコマンドライン内の制限によるものであり、マイクロソフトが高品質なコマンドラインツールを提供しなかったためでもあった。
マイクロソフトはコマンドラインツールの短所を補うものとして、1998年にWindows 98でWindows Script Host (WSH) を提供した。これは様々なスクリプト言語を実装するための新しいソフトウェアであった。しかしWSHはシェルに統合されていないという欠点があり、ドキュメントも非常に使いにくいものだった。またWSHの持つセキュリティ上の欠陥をつくコンピュータウイルスがいくつか出現したため、システム上の脆弱性とみなされたこともあり、広く普及するには至らなかった。
そして2003年、マイクロソフトはWindowsや自社製品のシステム管理・自動化を行うための新世代シェルとして、またスクリプトとして実行可能なプログラミング言語として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]。
2016年8月には、PowerShellのオープンソース化、並びにLinuxとOS Xへの移植が発表された。これは同年6月にリリースされたオープンソースの.NET Coreに続くものとなった。[4]
沿革・バージョン
年月日 | 出来事 |
---|---|
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を必要とする。 |
2015年12月 | Windows PowerShell 5.0がリリースされた[5] [6] [7] [8]。動作には.NET Framework 4.5を必要とする。 |
2016年8月 | オープンソース化、Linux/OS Xへの移植を発表。[4] |
マイクロソフトはこれからの主なGUIツールはPowerShell上に構築されると表明し、主な管理機能がスクリプト可能になるとした。例えば、Exchange Server 2007の管理ツールはPowerShellの上に構築されている。多くの日常的な場面でPowerShellはcmd.exe
やWSHを置き換えるものとして利用できる。
項目 | 1.0 | 2.0 | 3.0 | 4.0 | 5.0 |
---|---|---|---|---|---|
Windows Server 2003 | ○SP1 | ○SP2 | × | × | × |
Windows Server 2003 R2 | ○SP1 | ○SP2 | × | × | × |
Windows Server 2008 | → | ○SP1 | ○SP2 | × | × |
Windows Server 2008 R2 | → | ◎ | ○SP1 | ○SP1 | ○SP1 |
Windows Server 2012 | → | → | ◎ | ○ | ○ |
Windows Server 2012 R2 | → | → | → | ◎ | ○ |
Windows XP x64 | ○ | × | × | × | × |
Windows XP | ○SP2 | ○SP3 | × | × | × |
Windows Vista | ○ | ○SP1 | × | × | × |
Windows 7 | → | ◎ | ○SP1 | ○SP1 | ○SP1 |
Windows 8 | → | → | ◎ | × | × |
Windows 8.1 | → | → | → | ◎ | ○ |
Windows 10 | → | → | → | → | ◎ |
「◎」標準搭載、「○」インストールして利用可能、「→」上位バージョン標準搭載、「×」利用不可
基本的な概念
PowerShellは基本的な機能をもつ様々なコンポーネントを組み合わせたタスクによって構成される。[9]コンポーネントは、コマンドレット (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閲覧.
- ↑ Cool Stuff about PowerShell 5 in Windows 10 - Hey, Scripting Guy! Blog - Site Home - TechNet Blogs
- ↑ Windows PowerShell System Requirements
- ↑ 4.0 4.1 “Microsoft、「PowerShell」をオープンソース化。LinuxやOS Xにも対応”. OSDN (2016年8月19日). . 2016閲覧.
- ↑ Windows PowerShell 5.0はWindows Management Framework (WMF) 5.0に含まれる。2015年7月にリリースされたWindows 10に標準で含まれていたPowerShell 5.0/WMF 5.0に存在していた不具合が修正され、さらに以前のバージョンのOSにも対応したRTM版となっている。なおWMF 5.0のインストーラーには不具合があったため、2015年12月23日にいったん同社のダウンロードセンターから取り除かれ、2016年1月12日に再公開されている。
- ↑ Windows Management Framework (WMF) 5.0 RTM is now available - Windows PowerShell Blog - Site Home - MSDN Blogs
- ↑ Windows Management Framework (WMF) 5.0 currently removed from Download Center - Windows PowerShell Blog - Site Home - MSDN Blogs
- ↑ Download Windows Management Framework 5.0 from Official Microsoft Download Center
- ↑ これは、PowerShellのコードネームであるMonadが、ゴットフリート・ライプニッツの単子論(英: monadology)、すなわち宇宙は予定調和によって調和されたモナドと呼ばれる基本的な元素から構成される、という哲学に由来することにも現れている。
外部リンク
- Windows PowerShell (ja-JP) - Microsoft TechNet wiki
- Windows PowerShell でのスクリプティング - Microsoft TechNet
- Windows PowerShell 徹底解説 - ITpro
- Windows PowerShell - Windows PowerShell 開発チームのブログ。 (英語)