既に日本語情報も出回っていますが、2018/1/10(PST)*1にPowerShell 6.0が正式リリースされました。
公式情報は以下になります。
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といったパッケージ管理ツールからのインストールも可能です。
PowerShellのエディションと下位互換について
以前にも説明しましたが、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'となる
バージョン番号は連続していますがアプリケーション基盤が異なるため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追記】
破壊的変更についてまとめました。
【追記ここまで】
今後の方針としてPowerShell CoreでWindows PowerShellを置き換えていきたい展望はある様ですが、現時点ではとてもその水準には達していないのが率直なところです。
このためWindows環境においてはWindows PoweShell + PowerShell Coreと併用して運用し、少しずつPowerShell Coreへのシフトを図っていくのが良いでしょう。
(個人的にはクロスプラットフォーム化を意識する必要がないのであれば いまのところは 無理にPowerShell Coreに手を出さなくても良いと思っています。ただWindows PowerShellは今後大きな変更はなされないため先を見据えておくこと自体は必要でしょう。)
PowerShell 6.0の新機能について
PowerShell 6.0の新機能については以下にまとめられています。
(量が多いので近いうちに別エントリでまとめたいですね...まとめました。)
【2018/02/09追記】
新機能についてまとめました。
【追記ここまで】
本ブログでもその一部についてエントリを起こしているので参考にしてください。
- PowerShell 6.0からジョブの実行に & が使える様になります - しばたテックブログ
- PowerShell 6.0で範囲演算子(..演算子)が拡張される話 - しばたテックブログ
- PowerShell 6.0からファイル出力に関わるエンコーディングが変わります - しばたテックブログ
- PowerShell 6.0からPowerShellのプログラム名がpwshに変わります - しばたテックブログ
- PowerShell 6.0でアイコンが新しくなる話とPosh-ChanことPowerShellさんについて - しばたテックブログ
- PowerShell on Linuxに普通にPSRemotingしてみる - その3 - しばたテックブログ
- PowerShell Remoting over SSHを試す - しばたテックブログ
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に更新しておくのが良いでしょう。
最後に
まだまだお伝えしなければならないことは多いのですが1エントリでまとめるには流石に厳しいので本エントリはこの辺にしておきます。
これからも新しく生まれ変わったPowerShellの情報をできる限りお伝えしていきたいと思います。
*1:日本時刻だと2018/1/11