Windows PowerShell

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索
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
PowerShell
パラダイム 命令型、パイプライン、オブジェクト指向関数型リフレクション
登場時期 2006年
設計者 Jeffrey Snover、Bruce Payette、James Truher、他
開発者 マイクロソフト
型付け 強い型付け、型推論動的型付け
影響を受けた言語 Tcl/Tk[1]KshPerlC#、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 98Windows Script Host (WSH) を提供した。これは様々なスクリプト言語を実装するための新しいソフトウェアであった。しかし、WSHはシェルに統合されていないという欠点があり、ドキュメントも非常に使いにくいものだった。また、WSHの持つセキュリティ上の欠陥をつくコンピュータウイルスがいくつか出現したため、システム上の脆弱性とみなされたこともあり、広く普及するには至らなかった。

そして2003年、マイクロソフトは、Windows OSMicrosoft 製品のシステム管理や自動化を行うための新世代シェルとして、またスクリプトとして実行可能なプログラミング言語として、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を必要とする。
2015年12月 Windows PowerShell 5.0 がリリースされた[4] [5] [6] [7]。動作には .NET Framework 4.5を必要とする。

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

PowerShell のバージョンと対応OS
項目 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 は、基本的な機能をもつ様々なコンポーネントを組み合わせたタスクによって構成される。[8]コンポーネントは、コマンドレットcmdlet)と呼ばれるプログラムであり、その実体は .NET のクラスである。

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

機能[編集]

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

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

脚注[編集]

  1. ^ Snover, Jeffrey (2008年5月25日). “PowerShell and WPF: WTF”. 2010年10月24日閲覧。
  2. ^ Cool Stuff about PowerShell 5 in Windows 10 - Hey, Scripting Guy! Blog - Site Home - TechNet Blogs
  3. ^ Windows PowerShell System Requirements
  4. ^ 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日に再公開されている。
  5. ^ Windows Management Framework (WMF) 5.0 RTM is now available - Windows PowerShell Blog - Site Home - MSDN Blogs
  6. ^ Windows Management Framework (WMF) 5.0 currently removed from Download Center - Windows PowerShell Blog - Site Home - MSDN Blogs
  7. ^ Download Windows Management Framework 5.0 from Official Microsoft Download Center
  8. ^ これは、PowerShell のコードネームである Monad が、ゴットフリート・ライプニッツ単子論: monadology)、すなわち宇宙は予定調和によって調和されたモナドと呼ばれる基本的な元素から構成される、という哲学に由来することにも現れている。

外部リンク[編集]