前々回に「.NET」の話をしたので(「あらためて「.NET」について整理する」)、ついでと言ってはなんだが、今回はPowerShellについても経緯と現状をまとめてみることにする。
例によって、また用語の話からで恐縮だが、「PowerShell」には「Windows PowerShell」と「PowerShell Core」があり、「PowerShell Core」は、Ver.7.0から「PowerShell 7」という名称が正式になった。
基本的に「Windows PowerShell」はWindowsに付属している「PowerShell」のことで、「PowerShell Core」はオープンソースでマルチプラットフォーム(LinuxとmacOSに対応)の「PowerShell」と考えれば間違いない。ただしPowerShell 7は、現在Windowsに標準添付されているWindows PowerShellの後継となる予定で、Windows PowerShellは、マイナーアップデートはあるかもしれないが終了す る方向だ。
PowerShellの登場からこれまで
Windowsの標準的なコマンドラインインタープリター(シェル)であるCMD.EXEは、MS-DOSのCOMMAND.COMをそのまま32bit化することで作られた。しかし、MS-DOS時代のメモリが潤沢に利用できない環境向けに作られたCOMMAND.COMは簡易なものだった。それでもバッチファイルの互換性などから、大幅な仕様変更は困難だった。
MicrosoftはWindows 95以降でCOMによるコンポーネント化を進めたが、CMD.EXEはそれに追従することができなかった。そこで開発されたのがWindows Scripting Host(WSH)だ。WSHは、COMを直接扱うことができ、さまざまなシステムプログラミングも可能なスクリプト言語だったが、ファイルに書かれたスクリプトを実行する言語システムであったため、コマンドラインインタープリターはCMD.EXEが引き続き使われた。そのために実行できるスクリプトは高度になったものの、コマンドライン自体は変わらなかった。
こうした反省から、Windows Vistaの開発では、新しいコマンドラインインタープリターが作られることになった。コードネーム「Monad」として発表されたシェルが、PowerShellと呼ばれることになる。
PowerShellの目的には大きく2つある。1つは高度なコマンドラインインタープリターとして動作すること、もう1つは.NET Frameworkを簡単に呼び出して処理を記述できることである。CMD.EXEでは、機械語プログラムを利用しないと、Win32APIを利用するコマンドを作成できなかった。このために新機能が搭載されると、管理用のコマンドも作成する必要があった。これをカバーしようとしたのがWSHだったが、シェルではなかったため、作業環境はMS-DOS時代とほとんど変わらなかった。
特に問題になったのが、Windows Serverの管理ツールだ。Unixの経験がある管理者は、コマンドラインでの処理を望んだし、管理ツールをすべてGUI化して用意するのも簡単ではない。Windows 2000のときにネットワーク管理専用のNetShが作られたが、シェルというわりには、ネットワーク関連の設定コマンドしか実行できず、複雑なコマンドを1つのプログラムにまとめたものでしかなかった。
PowerShellは、Vistaの開発期間中にプレビューなどが開始されたが、Vistaの開発がドタバタしたためか、最初のリリースには含まれず、あとからダウンロードする形になった。しかしそれ以降は、Windowsには必ずPowerShellが搭載されるようになり、Windows 8では、CMD.EXEの代わりにするかを選択できるようになった。
.NET Frameworkの機能を機械語プログラムで書かずに呼び出しできることを想定したPowerShellは、Windows 8.1まではWindowsのバージョンアップと連動してバージョンがあがった。ただし、1つ前のWindowsでも利用できるように、.NET Frameworkのバージョンをあとから追いかけるようになっていた。たとえば、Windows 8に搭載されたPowerShell 3.0は、.NET Framework 4.0で動作する。しかし、Windows 8に搭載されていた.NET FrameworkはVer.4.5だった。
PowerShellの大きな転機になったのは、PowerShell Coreの開発とオープンソース化である。2016年に現在使われているWindows PowerShell 5.1が登場したが、これを.NET Coreで開発した「Core」エディションが同時に登場している。.NET Frameworkで開発されたWindows PowerShellは、Desktopエディションと呼ばれる。
同年にPowerShell Coreは、オープンソース化されLinuxなどへの対応が発表された。正式版となるPowerShell Coreには、バージョン番号として6.0が付けられた。この時点で、Windows PowerShellをPowerShell Coreに置き換えることが構想されていたのだと考えられる。ただし、Windows PowerShell 5.1の後継となることが正式に発表されたのは2019年、PowerShell 7のプレビュー期間中のことである。
この連載の記事
-
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 -
第449回
PC
WSLはプレビュー版でGUIでの設定が加わった! リリース2.3.xの新機能を見る -
第448回
PC
PowerShellで面倒なオブジェクトはPSCustomObjectに変換するのが早道 - この連載の一覧へ