しばたテックブログ

気分で書いている技術ブログです。

PowerShell 6.0のロードマップに関して

2018/1/10(PST)にPowerShell Core 6.0が正式リリースされました。
詳しくはこちらのエントリをご覧ください。

blog.shibata.tech


先日PowerShell BlogでPowerShell 6.0のロードマップに関するエントリが公開されました。

blogs.msdn.microsoft.com

日本語情報も出ており、例えば窓の杜による情報はこちらになります。

forest.watch.impress.co.jp

このアナウンスはかなりセンシティブな内容を含みますので本ブログでも補足する形でエントリを書いておきます。

はじめに

できる限り正確な情報を書く様に努めていますが、私も英語が完璧にわかるわけではないので不正確なことを記載してしまっている可能性があります。

完璧な正しさを求めるならPowerShell Blogに書かれていることが全てです。
PowerShell Blogの内容を文意通りに解釈してください。

間違いをご指摘いただければ随時訂正します。

PowerShellのエディションに関して

GitHubの情報を追うとわかるのですが、PowerShell TeamはPowerShell 6.0 Alpha 18からPowerShell Coreという表現を使う様になりました。

そして先のPowerShell Blogにある様にWindows PowerShellPowerShell Coreという2つのPowerShellを定義しこれを正式に呼称する様です。
(ただし、ブログ以外での正式なアナウンスおよびドキュメント化はされていません)

Windows PowerShell

  • PowerShell 1.0~5.0、およびDesktop EdtionのPowerShell 5.1
  • Windowsの.NET Framework上で動作するバージョン
  • PowerShell 5.1では $PSVersionTable.PSEdition = 'Desktop'となる

PowerShell Core

  • Nano Server向けのPowerShell 5.1、および現在開発中のPowerShell 6.0
  • (Windowsを含め)プラットフォームを問わず.NET Core上で動作するバージョン
  • $PSVersionTable.PSEdition = 'Core'となる

ざっと図にすると以下の様になります。

(図は https://speakerdeck.com/stknohg/learn-open-source-powershell?slide=14 より)

PowerShell 6.0のリリースに関して

PowerShell Core 6.0のリリース

まず、PowerShell Coreに関しては

That being said, it is our strong desire to ship a high-quality PowerShell Core 6.0 by the end of the year that you can feel confident about deploying in production.

とある様に今年の年末までにはリリースしたい考えを持ち、フィードバックを強く募集しています。

ただし、Beta 1リリース時にアナウンスされた様に、

  1. 6.0.0-betaのマイルストーンに紐づけられたIssueを解決する

  2. 最低80%のコードカバレッジを達成する

  3. バージョン6.0.0に向けたすべてのシナリオを実現する

  4. テレメトリに基づいた利用目標を達成する

の目標がありますので、これらを年内にクリアできるかも課題となっています。

Windows PowerShell 6.0のリリース

こちらについてはコメント欄の質問に対して、

The goal with PowerShell Core 6.0 and all the compatibility shims is to supplant the need for Windows PowerShell 6.0 while converging the ecosystem on PowerShell Core. So no, we currently don’t have any plans to do a Windows PowerShell 6.0.

との回答がなされ、PowerShell Core 6.0と(Windows PowerShellに対する)互換SHIMでWindows PowerShellを置き換えよう*1としており、いまのところWindows PowerShell 6.0をリリースする計画はない様です。

また、

Windows PowerShell 5.1, much like .NET Framework 4.x, will continue to be a built-in, supported component of Windows 10 and Windows Server 2016. However, it will likely not receive major feature updates or lower-priority bug fixes.

とある様にWindows PowerShell 5.1は今後もサポートされますが、大きな機能追加や優先度の低い不具合の修正は行われない可能性があります。

正直現時点のPowerShell Blogの内容だけでWindows PowerShellがどうなっていくのかなんとも言えず、決定的なところに全然触れてくれない感があるのですが、PowerShell Coreに注力していくという事だけは伝わります。

PowerShell Coreの互換性に関して

現時点でPowerShell Coreは.NET Standard 2.0、.NET Core 2.0(Preview 3向けビルド 2.0.0-preview3-25426-01)のアプリケーションになります。

.NET Standard 2.0では.NET Coreと.NET Frameworkの互換性が大幅に強化されており、これを踏まえて、Windows版のPowerShell Coreでは既存のPowerShellモジュールをPowerShell Coreから利用可能にすることを目指し、最終的には前項で触れた様にWindows PowerShellを置き換えていきたい様です。

互換性を確かめてみる


【2018/01/12追記】

先日正式リリースされたPowerShell 6.0ではこのPSModulePathの自動読み込みは撤回され、WindowsPSModulePathモジュールとして別機能に分離されました。(#4056)

以下の様にモジュールをインストールして、Add-WindowsPSModulePathを呼ぶことで従来のPowerShellモジュールが読み込まれます。

Install-Module WindowsPSModulePath -Scope CurrentUser -Force
Add-WindowsPSModulePath

実際にPowerShell Core 6.0 Beta 4では起動時に読み込むPSModulePathが変更され(#4132)、従来のPowerShellモジュールが読み込まれる様になっています。

ここでPowerShell Coreから、

Get-Module -ListAvailable | ? Path -like "C:\WINDOWS\*"

の様Get-Moduleすると、これまでとは異なり従来のPowerShellモジュールが表示されます。

この中から、例としてHyper-Vモジュール(当然Hyper-Vに関する機能は.NET Coreの対象外です)を利用してみると下図の様に普通に動作します。

Import-Module Hyper-V
Get-VM

この場合は単純にGet-VMしただけなので動作しましたが、細かいことをすれば非互換のエラーが出る可能性はあります。
ただPowerShell Coreの目指す方向性を示すには十分かと思います。

補足

.NET Standard 2.0の詳細についてはこちらのブログが詳しいので参考にしてください。

yfakariya.blogspot.jp

その他

補足としてコメント欄のやり取りから気になるものをピックアップしておきます。

  • Q.PowerShell Workflowはどうなるのか?
    → PowerShell WorkflowはWindows PowerShell専用でPowerShell Coreに導入する予定は今のところない。
    ただ、WorkflowではないがPowerShellに並列実行に関して新しいRFCが提案されている。

  • Q.PowerShell CoreがWindowsにプリインストールされて従来のPowerShellを置き換えるのか?
    → まだ何ともいえない。

  • Q.PowerShell CoreでPowershell Web Accessは動作するのか?
    → PowerShell Web AccessはPowerShell Coreのスコープ外。 (#3004)

  • Q.WindowsのPowerShell CoreでDSCはサポートされる様になるのか?
    回答付かず。 コメント欄の回答では無いですが、DSC Coreが発表されました。

*1:実際にはPowerShell Core 6.0 + Windows PowerShell 5.1という構成になるでしょうが...