PowerShell

PowerShell（パワーシェル）は、マイクロソフトが開発した拡張可能なコマンドラインインターフェイス (CLI) シェルおよびスクリプト言語である。オブジェクト指向に基づいて設計されており、.NET Framework (Windows PowerShell 5系以前) あるいは.NET Core (PowerShell Core 6系以降) を基盤としている。
かつては（MSH、コードネーム ）と呼ばれていた。
以降のオペレーティングシステム (OS) には標準で搭載されている。
歴史.
マイクロソフトによるOSにはからに至るまで、どのバージョンにもコマンドラインシェルが付属した。それは、かつてはcodice_1であり、ベースの製品においてはcodice_2であった。これらのツールはグラフィカルユーザインタフェース (GUI) で提供されるような管理機能の自動化や再利用に必ずしも長けているとは言えなかった。これはコマンドライン内の制限によるものであり、マイクロソフトが高品質なコマンドラインツールを提供しなかったためでもあった。
マイクロソフトはコマンドラインツールの短所を補うものとして、1998年にで (WSH) を提供した。これは様々なスクリプト言語を実装するための新しいソフトウェアであった。しかしWSHはシェルに統合されていないという欠点があり、ドキュメントも非常に使いにくいものだった。またWSHの持つセキュリティ上の欠陥をつくコンピュータウイルスがいくつか出現したため、システム上の脆弱性とみなされたこともあり、広く普及するには至らなかった。
そして2003年、マイクロソフトはや自社製品のシステム管理・自動化を行うための新世代シェルとして、またスクリプトとして実行可能なプログラミング言語として（後の ）を発表した。
2015年9月現在、の正式な最新バージョンは5.0であり、に標準搭載されている。8.1に標準搭載されているバージョンは4.0、に標準搭載されているバージョンは3.0、に標準搭載されているバージョンは2.0となる。
2016年8月には、PowerShellのオープンソース化、並びにLinuxとOS Xへの移植が発表された。これは同年6月にリリースされたオープンソースの.NET Coreに続くものとなった。
変遷.
Windows PowerShell.
1.0.
2003年9月、コードネーム が公開された。2006年4月、正式名称がとなることが発表され、リリース候補 (RC) 1がリリースされた。2006年9月、RC2リリース。
2006年11月、 1.0がウェブ上でリリースされた (RTW)。動作には 2.0を必要とする。2007年1月、がリリースされた。
マイクロソフトはこれからの主なGUIツールは上に構築されると表明し、主な管理機能がスクリプト可能になるとした。例えば、の管理ツールはの上に構築されている。多くの日常的な場面ではcodice_2やWSHを置き換えるものとして利用できる。
2.0.
2009年10月リリース。
3.0.
2012年9月リリース。動作には 4を必要とする。
4.0.
2013年10月リリース。動作には 4.5を必要とする。
5.0.
2015年12月リリース。動作には 4.5を必要とする。
5.1.
2016年8月リリース。Windows 10 Anniversary Update及びWindows Server 2016の標準バージョン。
 5.1は"Desktop"と"Core"の2つのエディションを提供する。"Desktop" Editionは従来どおりので、"Core" EditionはNano Serverで実行するために、.NET Core上に構築され、いくつかの機能が削減されている。
「◎」標準搭載、「○」インストールして利用可能、「→」上位バージョン標準搭載、「×」利用不可
PowerShell Core.
6.0.
2016年8月、オープンソース化、Linux/OS Xへの移植を発表。
2018年1月、PowerShell Core 6.0リリース。ランタイムとして.NET Frameworkに代わり.NET Core 2.0を使用する。これによりPowerShell Core6はWindows、macOS、Linuxで動作が可能になった。
6.1.
2018年9月、PowerShell Core 6.1リリース。
Windows 10およびWindows Server 2019との互換性強化、サポートプラットフォームの強化が図られている。.NET Core 2.1を使用する。
6.2.
2019年3月、PowerShell Core 6.2リリース。
7.0.
2020年3月、PowerShell 7.0リリース。.NET Core 3.1を使用する。
7.1.
2020年11月、PowerShell 7.1リリース。.NET 5.0を使用する。
基本的な概念.
はオブジェクト指向言語であり、基本的な機能をもつ様々なコンポーネントを組み合わせたタスクによって構成される。コンポーネントは、コマンドレット () と呼ばれるプログラムであり、その実体はのクラスである。
コマンドレット間でのデータの受け渡しは、古典的な型アプローチ（テキスト入出力をパイプする）とは異なり、オブジェクト（構造化されたデータ）で行なわれる。コマンドラインから個別にアクセスされた場合、コマンドレットの出力は自動的にテキストに変換されるが、出力が他のコマンドレットに渡されるのであれば、そのコマンドレットの入力として最も適切な形式に変換され、渡される。これにより、型システムで一般的なテキスト処理ユーティリティ（やなど）が不要となり、インタラクティブに、またはスクリプト環境（より複雑なプログラミング言語が必要）の中で、様々なコマンドレットを結合することができる。例えば、プロセスの一覧を出力する場合、それらは単なるテキストの一覧ではなく、プロセスの情報を表すオブジェクトの一覧である。従ってそれらのオブジェクトに対して、明示的に外部の構造やライブラリを使用することなく、直接的にメソッドを適用することができる。
特徴・機能.
Windows PowerShell/PowerShell Coreには次の機能が含まれる。
$bad = Get-ChildItem "1個のサイズ1024バイトのファイルがあるディレクトリ" 
$bad.Length
1024 # !?
$good = @(Get-ChildItem "1個のサイズ1024バイトのファイルがあるディレクトリ" )
$good.Length
1
使用例.
「p」で始まるプロセスを全て停止する。
PS> Get-Process p* | Stop-Process
1000 MB以上のメモリを占有するプロセスを検索し、停止する。
PS> Get-Process | Where { $_.WS -gt 1000MB } | Stop-Process
ディレクトリ中に含まれる全ファイルの合計サイズを計算して出力する。
PS> Get-Childitem | Measure-Object -property length -sum
文字列に含まれる小文字を大文字に変換した文字列を作る。
PS> "hello, world!".ToUpper()
codice_26という文字列の5文字目の直後にcodice_27という文字列を挿入し、結果としてcodice_28を得る。
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