PowerShellの種類│Windows版と最新Core(7)版

PowerShellには、Windowsに標準搭載されている「Windows PowerShell」と、別途インストールが必要な「PowerShell Core(7)」があります。

両ツールはどちらもCLI方式であり、外観上の相違はほとんどありませんが、実際には開発基盤のほか機能面での違いもあります。

これからPowerShellの活用を検討している場合、どのPowerShellを使えばよいのか。Windows PowerShellを使っている場合は、そのままでよいのか。

このような疑問をお持ちではないでしょうか。

この記事では、Windows PowerShellとPowerShell Core(7)の違いについて説明します。

目次

PowerShellの種類 

Windowsには、MS-DOS時代から使われていたCLI「コマンドプロンプト」が搭載されています。

Windowsのコマンドプロンプト

コマンドプロンプトは、非GUIのOSであるMS-DOSの主要なインターフェースですが、GUIベースのWindowsにとっての最適なCLIではありませんでした。

ファイル管理やディレクトリ作成など、簡易的なコマンドしか実行できないためです。

その中で新しいスクリプト言語として開発されたのがWindows PowerShellです。2003年に発表され管理者向けに設計されたPowerShellは、Windowsに標準搭載され一定のユーザー層を獲得しました。

その後、ユーザーからの要望や課題を解消するため、新たな基盤で開発されたのがPowerShell Coreです。PowerShell Coreは2018年に発表されました。

この時点で、Microsoftが提供するPowerShellは「Windows PowerShell」と「PowerShell Core」の2種類となりました。

そして、PowerShell Coreは、2020年、最新のPowerShell 7へと進化します。

PowerShell Coreと7

PowerShell Coreは当初、PowerShell Core6.0としてリリースされました。その後、7がリリースされた時点で「Core」表記が除外され、PowerShell 7となりました。

以降、当記事ではPowerShell CoreをPowerShell 7と表記します。

Windows PowerShell からPowerShell 7へ

この章では、Windows PowerShellからPowerShell 7へ、PowerShellが進化した背景や技術的側面について説明します。なお、PoweShell 7はWindows PowerShellの単純な完全上位互換ではありません。

バージョンの遷移 

Windows PowerShellとPowerShell 7は、現在までに下記のようなバージョンアップを経ています。

Windows PowerShellのバージョン

WIndows PowerShell Versionリリース年
Windows PowerShell 1.02006年1月
Windows PowerShell 2.02009年10月
Windows PowerShell 3.02012年9月
Windows PowerShell 4.02013年10月
Windows PowerShell 5.02015年12月
Windows PowerShell 5.12016年8月
Windows PowerShellのバージョン

Windows PowerShellは、2006年のリリース以来、Windows OSの管理と自動化を目的として、多くの機能強化と改善が加えられてきました。バージョン1.0から始まり、最終的には5.1まで更新されました。

この間に、スクリプトの実行性能が向上し、セキュリティ機能が強化され、多くのWindowsコンポーネントとの統合が行われました。

PowerShell Coreのバージョン

PowerShell Core Versionリリース年
PowerShell Core 6.02018年1月
PowerShell Core 6.12018年9月
PowerShell Core 6.22019年3月
PowerShell 7.02020年3月
PowerShell 7.12020年11月
PowerShell Coreのバージョン

PowerShell Core は、クロスプラットフォームに対応することを目標に設計され、2018年に最初のバージョンであるPowerShell Core6.0がリリースされました。

そして2020年3月、PowerShell Core6.0からPowerShell 7.0へと進化し、同年11月には 7.1 がリリースされています。

この更新で、.NET Coreを基にしたアーキテクチャへの移行が完了し、Linuxや macOS 上でも同等の動作を実行することが可能になりました。

クロスプラットフォームの対応 

PowerShell 7開発の背景には、クラウドの普及によりWindowsとLinuxが混在するサーバー環境が増加したことが挙げられます。

ユーザーから、異なるサーバー環境でも同一のスクリプトを実行したい、という要望が多く寄せられたのです。ただし、従来のWindows PowerShellは.NET Frameworkを基盤としていたため、動作もWindowsに限定されていました。

つまり、世間のクロスプラットフォーム対応の要望に応えるには、基盤も変えて新たなPowerShellを開発する必要があったのです。

.NET Framework から.NET Coreへ

Microsoftは、クロスプラットフォーム対応のニーズに応える.NETの基盤として、.NET Coreを開発しました。

このフレームワークは、PowerShellに限らず、幅広いアプリケーションをサポートする目的で、完全に新しい設計で構築されています。.NET Coreの設計目標の一つは、WindowsだけでなくLinuxやmacOSを含む複数のプラットフォームで動作することでした。

.NET Coreの発表により、PowerShellも含めた多くのアプリケーションがさまざまなプラットフォームで一貫した機能とパフォーマンスを実行できるようになりました。

クローズドソース からオープンソースへ

Windows PoweShellのソースコードは公開されていないため、ユーザー側からは機能や開発状況について把握することはできませんでした。

一方、PowerShell Coreは、2016年にGitHubにおいてオープンソースで公開されました。現在、開発には、Microsoftのみではなくコミュニティ開発者も参加しています。

問題点や改善点などがGitHubで共有され解消することで、より利便性の高いCLIに進化することが期待されます。

今後のアップデートについて

Windows PowerShellは、今後、致命的なバグの修正は行われますが、メジャーアップデートは行われません。Microsoftとしては、本来の「PowerShell」の役割である管理や自動化を、PowerShell 7に引き継いだと解釈できます。

PowerShell 7は引き続き、オープンソース化により活性化された開発環境で、さまざまな新機能が追加されることが期待されます。

ただし、PowerShell 7はWindows PowerShellの完全上位互換ではありません。これは、.NET開発環境の相違に起因するもので、一部のWindows PowerShellの機能は、PowerShell 7で使うことができません。

PowerShell 7で失われた機能 

この章では、PowerShell 7で対応していないWindows PowerShell固有の機能について紹介します。PowerShell 7で失われた機能の中には、.NET Frameworkに依存していたもの等があります。

1. WorkFlowの非サポート

PowerShell 7では、Windows PowerShell 3.0で導入されたPowerShell WorkFlow機能が削除されました。WorkFlowはタスクの並列実行や障害による中断後の再開実行が可能であり、またスクリプトの再利用性が高くタスク管理に効果的なため、一部の企業にとっては重宝されていました。

WorkFlowの機能は、PowerShell 7の開発基盤である.NET Core自体に移植されていないため、今後の対応への見通しも明るくありません。

2. SnapInの非サポート

PowerShell Core以降、Windows PowerShell初期から搭載されていたSnapInのサポートも終了しました。元々、SnapInはより柔軟性の高い「モジュール」に役割を取られていましたが、PowerShell 7でもサポートはされません。


PowerShell 7で失われた機能に対し、現実的に取りうる対策については、別記事で紹介します。

PowerShellの比較表 

Windows PowerShellとPowerShell Core(7)の比較には、さまざまな観点が存在しますが、基本的な項目の比較は下記の通りです。

特徴Windows PowerShellPowerShell Core
基盤となるフレームワーク.NET Framework.NET Core
クロスプラットフォーム対応Windows専用Windows, Linux, macOS対応
リリース年2006年 (Version 1.0) – 2016年 (Version 5.1)2016年 (Version 6.0) – 現在
オープンソースいいえはい (GitHubで公開)
主要な新機能Workflows, CIM CmdletsParallel processing, Ternary operators, New operators like null-coalescing
コミュニティとサポート制限されたコミュニティサポート広範なコミュニティサポート、アクティブな開発
パフォーマンスとセキュリティ従来のセキュリティ機能とパフォーマンス改善されたセキュリティ機能と高速化
旧機能のサポート終了すべての旧機能をサポート特定の旧機能(Workflowsなど)のサポー
PowerShell の種類

あとがき 

今回は、PowerShellの種類をテーマに、Windows PowerShellとPowerShell Coreについて記事にしました。

Windows PowerShellは標準搭載されているものの、今後はクリティカルバグのみサポートされ、新機能が搭載されることはありません。Microsoftが明言しています。

今後、PowerShellの活用をご検討されている場合には、必然的にPowerShell Core(7)で考える必要があるでしょう。

開発基盤の進化によるパフォーマンスの向上やクロスプラットフォームの対応、オープンソース化による開発の活性化など、多くのメリットがPowerShell Core(7)にはあります。

目次