しばたテックブログ

PowerShellを中心に気分で書いている技術ブログです。

PowerShell 6.0がリリースされました

既に日本語情報も出回っていますが、2018/1/10(PST)*1にPowerShell 6.0が正式リリースされました。

f:id:stknohg:20180115003255p:plain

公式情報は以下になります。

blogs.msdn.microsoft.com

2016年にPowerShellがオープンソースになりPowerShell 6.0のアルファ版がリリースされてから約1年半経ってのリリースとなりました。
ここ最近のPowerShellの変化についていろいろと思うところはあるのですが、それはひとまず置いておいてこのリリースを祝いたいと思います。

本エントリでは先のPowerShell Team Blogの内容をベースにPowerShell 6.0の新機能などについて触れていきます。

PowerShell 6.0のインストール

PowerShell 6.0は.NET Coreを基盤としたクロスプラットフォームなアプリケーションになりました。
WindowsだけでなくLinuxやMacにもインストール可能となり、

  • Windows 7, 8.1, and 10
  • Windows Server 2008 R2, 2012 R2, 2016
  • Windows Server Semi-Annual Channel
  • Ubuntu 14.04, 16.04, and 17.04
  • Debian 8.7+, and 9
  • CentOS 7
  • Red Hat Enterprise Linux 7
  • OpenSUSE 42.2
  • Fedora 25, 26
  • macOS 10.12+

といったプラットフォームをサポートしています。
また、まだ公式なサポートはしていませんが、

  • Arch Linux
  • Kali Linux
  • AppImage (works on multiple Linux platforms)
  • Windows on ARM32/ARM64
  • Raspbian (Stretch)

でも動作させることが可能です。

インストール方法についてはこちらから各プラットフォーム毎のインストーラーを入手することができます。

WindowsではMSIインストーラーからのインストール、LinuxではYumやApt、MacではHomebrew Caskといったパッケージ管理ツールからのインストールも可能です。

blog.shibata.tech

blog.shibata.tech

blog.shibata.tech

PowerShellのエディションと下位互換について

blog.shibata.tech

以前にも説明しましたが、PowerShellは従来のWindows PowerShellと.NET CoreをベースとしたPowerShell Coreに分類され、PowerShell 6.0はPowerShell Coreのみのリリースとなります。

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'となる

f:id:stknohg:20170719234440p:plain

バージョン番号は連続していますがアプリケーション基盤が異なるためPowerShell 6.0はこれまでのPowerShellとは実質別物です。

基盤となる.NET Core自体が.NET Frameworkのサブセットということもあり、できるだけ互換性を維持する様にされているものの、これまでのWindows PowerShellに対して多くの点で互換性の不足、破壊的変更がなされれています。

たとえばPowerShell 6.0では以下の機能が削除されました。

  • PowerShell Workflows
  • PowerShell Snap-ins
  • WMIv1 Cmdlets (Get-WmiObject, Invoke-WmiMethod, etc.) : 代わりにCIM Cmdlets(Get-CimInstance, Invoke-CimMethod, etc.)を使います
  • DSCリソースの実行基盤 : 代わりにDSC Coreがリリースされる予定です

そして、PowerShell 6.0における破壊的変更については以下にまとめられています。

* https://github.com/PowerShell/PowerShell/blob/master/docs/BREAKINGCHANGES.md

【2018/02/11追記】

破壊的変更についてまとめました。

blog.shibata.tech

【追記ここまで】

今後の方針としてPowerShell CoreでWindows PowerShellを置き換えていきたい展望はある様ですが、現時点ではとてもその水準には達していないのが率直なところです。

このためWindows環境においてはWindows PoweShell + PowerShell Coreと併用して運用し、少しずつPowerShell Coreへのシフトを図っていくのが良いでしょう。
(個人的にはクロスプラットフォーム化を意識する必要がないのであれば いまのところは 無理にPowerShell Coreに手を出さなくても良いと思っています。ただWindows PowerShellは今後大きな変更はなされないため先を見据えておくこと自体は必要でしょう。)

PowerShell 6.0の新機能について

PowerShell 6.0の新機能については以下にまとめられています。
(量が多いので近いうちに別エントリでまとめたいですね...まとめました。)

【2018/02/09追記】

新機能についてまとめました。

blog.shibata.tech

【追記ここまで】

本ブログでもその一部についてエントリを起こしているので参考にしてください。

PowerShell Coreのサポートサイクルについて

PowerShell CoreのサポートはMicrosoft Modern Lifecycle Policyに準じる様になり、基本的には、

  • 従来の有償サポートを受けるには最新版のプログラムを使用しておくこと
  • コミュニティサポートはGitHubで行う(なお、Windows PowerShellについては従来通りUserVoiceを使う)
  • PowerShell 6.xは約半年毎に更新され新しいバージョン(6.1、6.2...)をリリースする予定

といった方針になるそうです。

細かい話はPowerShell Core Support Lifecycleをご覧ください。

Windows PowerShellのサポートサイクルについて

【2018/01/16追記】

Windows PowerShellは今後大きな機能追加や優先度の低い不具合の修正は行われませんがサポート自体はOSのサポートと共に引き続きます。
(つまりOSのサポート終了までWindows PowerShellはサポートされます)

ただし、PowerShell 2.0の利用はすでに非推奨となっています ので最新のPowerShell 5.1に更新しておくのが良いでしょう。

blogs.msdn.microsoft.com

最後に

まだまだお伝えしなければならないことは多いのですが1エントリでまとめるには流石に厳しいので本エントリはこの辺にしておきます。

これからも新しく生まれ変わったPowerShellの情報をできる限りお伝えしていきたいと思います。

*1:日本時刻だと2018/1/11