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は当初、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.0 | 2006年1月 |
Windows PowerShell 2.0 | 2009年10月 |
Windows PowerShell 3.0 | 2012年9月 |
Windows PowerShell 4.0 | 2013年10月 |
Windows PowerShell 5.0 | 2015年12月 |
Windows PowerShell 5.1 | 2016年8月 |
Windows PowerShellは、2006年のリリース以来、Windows OSの管理と自動化を目的として、多くの機能強化と改善が加えられてきました。バージョン1.0から始まり、最終的には5.1まで更新されました。
この間に、スクリプトの実行性能が向上し、セキュリティ機能が強化され、多くのWindowsコンポーネントとの統合が行われました。
PowerShell Coreのバージョン
PowerShell Core Version | リリース年 |
---|---|
PowerShell Core 6.0 | 2018年1月 |
PowerShell Core 6.1 | 2018年9月 |
PowerShell Core 6.2 | 2019年3月 |
PowerShell 7.0 | 2020年3月 |
PowerShell 7.1 | 2020年11月 |
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 PowerShell | PowerShell Core |
---|---|---|
基盤となるフレームワーク | .NET Framework | .NET Core |
クロスプラットフォーム対応 | Windows専用 | Windows, Linux, macOS対応 |
リリース年 | 2006年 (Version 1.0) – 2016年 (Version 5.1) | 2016年 (Version 6.0) – 現在 |
オープンソース | いいえ | はい (GitHubで公開) |
主要な新機能 | Workflows, CIM Cmdlets | Parallel processing, Ternary operators, New operators like null-coalescing |
コミュニティとサポート | 制限されたコミュニティサポート | 広範なコミュニティサポート、アクティブな開発 |
パフォーマンスとセキュリティ | 従来のセキュリティ機能とパフォーマンス | 改善されたセキュリティ機能と高速化 |
旧機能のサポート終了 | すべての旧機能をサポート | 特定の旧機能(Workflowsなど)のサポー |
あとがき
今回は、PowerShellの種類をテーマに、Windows PowerShellとPowerShell Coreについて記事にしました。
Windows PowerShellは標準搭載されているものの、今後はクリティカルバグのみサポートされ、新機能が搭載されることはありません。Microsoftが明言しています。
今後、PowerShellの活用をご検討されている場合には、必然的にPowerShell Core(7)で考える必要があるでしょう。
開発基盤の進化によるパフォーマンスの向上やクロスプラットフォームの対応、オープンソース化による開発の活性化など、多くのメリットがPowerShell Core(7)にはあります。