連載
» 2018年01月16日 05時00分 公開

Dev Basics/Keyword:PowerShell Core

PowerShell Coreは、ランタイムを.NET Coreとすることで、クロスプラットフォームで動作するようになったPowerShellエディションである。

[かわさきしんじ,Insider.NET編集部]
「Dev Basics/Keyword」のインデックス

連載「Dev Basics/Keyword」

 PowerShell Coreは、Windows/macOS/Linuxで動作するPowerShellのエディション。名前から分かる通り、.NET Coreをランタイムとして使用する。2018年1月10日にPowerShell Core 6.0の一般提供が開始されている。

Windows上でPowerShell Coreを実行しているところ Windows上でPowerShell Coreを実行しているところ

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でも利用できるかどうかを確認しながら、緩やかな移行を検討しておこう。

「Dev Basics/Keyword」のインデックス

Dev Basics/Keyword

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。