PowerShell Core:Dev Basics/Keyword
PowerShell Coreは、ランタイムを.NET Coreとすることで、クロスプラットフォームで動作するようになったPowerShellエディションである。
PowerShell Coreは、Windows/macOS/Linuxで動作するPowerShellのエディション。名前から分かる通り、.NET Coreをランタイムとして使用する。2018年1月10日にPowerShell Core 6.0の一般提供が開始されている。
Windows PowerShellとPowerShell Core
現在、PowerShellには以下の2つのエディションが存在している。
- Windows PowerShell
- PowerShell Core
名前からも分かる通り、Windows PowerShellはWindowsでのみ動作するPowerShellであり、ランタイムには.NET Frameworkが使用される。最新のバージョンは5.1。
一方のPowerShell Coreは.NET Coreをランタイムとすることで、Windowsに加えてmacOSや各種のLinux環境でも動作するクロスプラットフォームバージョンである(ただし、Windows Nano Serverだけに向けてPowerShell Core 5.0/5.1もリリースされている。こちらも.NET Core上で動作する)。最新のバージョンは上述したように6.0。
両者の違いをざっくりと以下の表にまとめる。
Windows PowerShell | PowerShell Core | |
---|---|---|
ランタイム | .NET Framework | .NET Core |
プラットフォーム | Windowsのみ | Windows/macOS/Linux |
起動するコマンド | powershell.exe | pwsh.exe/pwsh |
$PSVersionTable.PSEditionの値 | Desktop | Core |
Windows PowerShellとPowerShellの概要 |
ランタイムが異なることからサポートされるプラットフォームも異なることに加えて、PowerShell Coreでは起動するコマンドがpowershell.exeからpwsh(.exe)に変更されている(Windows PowerShellとPowerShell Coreはサイドバイサイドにインストール/実行できるので、コマンド名が異なるものとすることで、どちらのエディションを起動するかを明示的に指定できる)。スクリプトを実行している環境は$PSVersionTable.PSEditionの値で判別できる。プラットフォームに合わせて動作を切り替える場合にはこの値が使えるだろう。
PowerShell Coreは、Windows PowerShellとの互換性を可能な限り維持することを目的ともしている。そのため、PowerShell Coreでは.NET Standard 2.0を利用して、既存の.NETアセンブリとの互換性を提供するようにしている。Windows PowerShell向けに作成したPowerShellモジュールが依存している.NETアセンブリが.NET Standard 2.0に準拠していれば、それらはPowerShell Coreでも利用できるということだ。とはいえ、PowerShell Core向けに移植されていないPowerShellモジュールも多くは利用できるかもしれないが、それらは正式に動作が確認されたり、サポートされたりしたわけではないことには注意しておく必要がある。
なお、WindowsとともにリリースされているPowerShellモジュールをPowerShell Coreで利用するには、WindowsPSModulePathモジュールをインストールして、Add-WindowsPSModulePathコマンドレットを実行する。詳しい手順は「Backwards compatibility with Windows PowerShell」を参照のこと。
互換性を維持するために多くの労力が割かれている一方で、PowerShell Coreでは以下のような機能が削除されている。
- PowerShell Workflowの削除
- スナップイン
- WMI v1コマンドレット
また、PowerShell Coreでは構成管理を自動化する技術であるPowerShell DSC(Desired State configuration)もまだサポートされていないが、これについてはDSC Coreが計画されている。
PowerShell Core 6.0で行われた破壊的変更の詳細については「Breaking Changes for PowerShell 6.0」を参照されたい。
「PowerShell 6.0 Roadmap: CoreCLR, Backwards Compatibility, and More!」および「PowerShell Core 6.0: Generally Available (GA) and Supported!」によれば、Windows PowerShell 6.0の予定はなく、5.1が最終バージョンとなるようだ(ただし、サポートは続くし、Windows 10やWindows Server 2016における組み込みコンポーネントでもあり続ける)。Windows PowerShellへの新機能の追加の予定もない。Microsoftが今後注力する対象はPowerShell Coreということだ。
では、Windows PowerShellのユーザーがすぐにでもPowerShell Coreへ移行するのがよいかというと必ずしもそうではないだろう。上でも述べたように、PowerShell Coreにはない機能もあるし、Windows PowerShellもサポートは続けられる。これまでに作成してきたPowerShell資産を利用するための安定的なプラットフォームとしては、Windows PowerShellはまだまだ利用できる。こうしたことから、Windows PowerShellを使いながら、PowerShell Coreについてもウォッチし(移行について検討し)ておくのがよいだろう。
PowerShell Coreは、ランタイムを.NET Coreとすることで、クロスプラットフォームで動作するようになったPowerShellエディションである。従来のWindows PowerShellとの互換性を可能な限り維持するように注力されている一方で、破壊的な変更も行われている。これまでのPowerShell資産がPowerShell Coreでも利用できるかどうかを確認しながら、緩やかな移行を検討しておこう。
参考資料
Copyright© Digital Advantage Corp. All Rights Reserved.