しばたテックブログ

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

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という構成になるでしょうが...

オープンソースカンファレンス2017 Hokkaidoで登壇しました

先日行われたオープンソースカンファレンス2017 HokkaidoオープンソースになったPowerShellを学ぼうというタイトルでPowerShell入門的なお話をさせて頂きました。

朝一番のセッションにもかかわらず多くの方に来ていただき本当に嬉しかったです。
ありがとうございます。

ボリューム的にちょっと駆け足になってしまいましたが、皆さんがこれからPowerShellを学ぶにあたって何か一つでも役に立つことがあれば幸いです。

セッション資料

スライドおよびスライド中で紹介したコードはこちらになります。

github.com

セッション内容に関する補足

このセッションの内容は過去に登壇した際の資料をベースに、現状の情報にアップデート+PowerShellの基礎入門的な内容を加筆したものになります。

本セッションと併せて、

blog.shibata.tech

blog.shibata.tech

blog.shibata.tech

のエントリもPowerShell学習の参考になるかと思います。

セッション内容の訂正に関して

【2017/12/09追記】

本セッションの内容で"配列リテラル"に関する説明に誤りがありました。

blog.shibata.tech

で誤りに対する訂正と説明をしていますのでこちらも併せてご覧ください。

セッション後に頂いた批判に関して

登壇後にSNS上で、

「オープンソースになったのでソースを眺めてみましょう」みたいな内容は1ミリも無い

という旨の批判を頂きました。

本セッションは「オープンソースになりクロスプラットフォーム化したPowerShellを普段LinuxやMacを使う人やPowerShellになじみのない人にも学んでもらおう。」という趣旨で行いました。
イベントがオープンソースカンファレンスであったため、クロスプラットフォームよりはオープンソースという単語を表に出した方が通りが良いだろうと思いこの様なタイトルにしたのですが、確かに配慮に欠ける部分がありました。
結果論ではありますが、「クロスプラットフォームになったPowerShellを学ぼう(Linux/Macユーザー向けのPowerShell入門)」といったタイトルの方が正確だったと思います。

本セッションに参加していただいた方の中に上記の様なソースコードに対する解説やソースコードリーディングを期待した方がいたら申し訳ありませんでした。


当初の趣旨とは外れているのでセッションでは触れませんでしたが、実際にソースコードを読んで挙動を確かめるというのはPowerShellを学ぶ上でとても重要です。

本ブログでもいくつかのエントリでソースコードから実際の挙動を確かめるといった事をしています*1ので、セッションで触れなかった代わりにこちらで紹介させて頂きます。

blog.shibata.tech

blog.shibata.tech

blog.shibata.tech

*1:まだまだソースコードの読み込みが甘くレベルが低いので精進します...

PowerPointにハイライトされたソースコードを載せるにはVisual Studio Codeを使うと便利だった話

週末のオープンソースカンファレンス 2017 Hokkaidoに向けて鋭意準備中なのですが、息抜きに小ネタを書きます。

PowerPointにハイライトされたソースコードを載せるにはVisual Studio Codeを使うと便利

はい、そのまんまです。

Visual Studio Code上で書いたコードをコピーするとクリップボードにHTML Formatで保存されるので、書式を保持したままペーストしてやればきれいにハイライトされたコードを載せることができます。


適当なテキストボックスを用意して、

f:id:stknohg:20170713011728p:plain


Visual Studio CodeのコードをコピーしてPowerPointにペースト

f:id:stknohg:20170713011804p:plain


インデントがちょっと狂ってますがハイライトされたコードを貼り付けできます。

f:id:stknohg:20170713011832p:plain

別にVisual Studio Codeでなくても

Visual Studio Codeなくても、例えば、PowerShell ISEや普通のVisual Studioでもエディタ上のテキストをコピーするとRich Text Formatで保存されるのでハイライトされたコードをPowerPointに貼り付けることができます。

ただ、Visual Studio Codeだと配色テーマを比較的自由に設定できるので他のエディタやIDEよりお手軽かと思います。