[PowerShell] AWSPowerShell.NetCore モジュールがPowerShell Standardをサポートする実装となりました

2019.04.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

しばたです。

手元の開発環境を2019年3月28日にリリースされたAWS Tools for PowerShell Ver.3.3.485.0に更新して変更履歴を確認したところ、

  • AWSPowerShell.NetCore now targets PowerShell Standard (https://github.com/PowerShell/PowerShellStandard). As a preview feature, you can test using the AWSPowerShell.NetCore module under older version of PowerShell starting with PowerShell 3.0 when at least .NET Framework 4.7.2 is installed.

とあり、このバージョンから.NET Core版のAWSPowerShell.NetCoreモジュールがPowerShell Standardをサポートする様になっていました。

また、これに関してAWS Developer Blogから以下の記事が発表されていました。

本記事ではこの詳細を解説します。

PowerShell Standardとは

まずPowerShell Standardについてですが、こちらはPowerShellのモジュール開発者以外には馴染みのない言葉だと思います。

PowerShell Standardを一言でいうと「Windows PowerShell(.NET Framework)とPowerShell Core(.NET Core)の両方で動作するPowerShellモジュールを作るためのライブラリ」です。

PowerShell Coreの基盤である.NET Coreは.NET Frameworkを元に作られているものの100%の互換はない別の実装です。
このため.NET Coreと.NET Frameworkのどちらでも動作するアプリケーションを作成するためには両者で互換のある機能だけでアプリケーションが構成されている必要があり、それを満たすための仕様が.NET Standardと呼ばれています。

PowerShell Standardはこの.NET Standardに従って.NET実装に依存しないPowerShellモジュールを作るためのライブラリ(PowerShellStandard.Library)とビルド設定(TargetFramework=netstandard2.0)の組み合わせがその実体となっています。

この変更による影響

AWSPowerShell.NetCoreモジュールがPowerShell StandardをサポートするということはWindows PowerShellとPowerShell Coreの両方で動作するモジュールになったということです。

最初の引用で

you can test using the AWSPowerShell.NetCore module under older version of PowerShell starting with PowerShell 3.0 when at least .NET Framework 4.7.2 is installed.

とある様にVer.3.3.485.0からはAWSPowerShell.NetCoreモジュールを.NET Framework 4.7.2以降がインストールされたPowerShell 3.0~5.1環境でも利用することが可能になります。
(ただし現在はプレビュー機能扱いです)

これにより環境によってはAWSPowerShellモジュールが不要となりAWSPowerShell.NetCoreモジュールだけで済むことになります。
この点だけ見ると利用者にとってはあまり旨味の無いはなしで、わざわざ変更するほどのものかという感情もあるでしょうが、将来的にAWSPowerShellモジュールとAWSPowerShell.NetCoreの統合を見据えているのかなと予想されます。

【2019.04.03追記】

モジュール統合に関してですが、AWS Developer Blogで

Based on the feedback from the AWS PowerShell community, we’ll consider making the AWSPowerShell module targeting PowerShell Standard our default offering for any PowerShell version starting with 3.0

と「コミュニティからのフィードバックに基づいてAWSPowerShellに統合することも考えていく」とはっきり言ってますね。
統合するとPowerShell 2.0の環境が動作対象外となりますが、すでにPowerShell 2.0は非推奨ですし単純に時間の問題かなと思います。

【追記ここまで】

最後に、最初に紹介したAWS Developer Blogの記事にもありますが、現在のAWS Tools for PowerShellモジュールを利用できるPowerShellのバージョンをまとめて終わりにします。

モジュール 利用可能なバージョン 試験的に利用可能なバージョン
AWSPowerShell PowerShell 2.0 ~ 5.1
AWSPowerShell.NetCore PowerShell Core 6.0 ~ 6.1 PowerShell 3.0 ~ 5.1 + .NET Framework 4.7.2

余談

こちらは余談なのですが今回のリリースと合わせる形でAWS Tools for PowerShellのGitHubリポジトリが公開されました。

リポジトリではソースコードは公開されないものの変更履歴が公開されIssueでバグレポートやフィードバックを受け付けてくれる様になっています。
AWS Tools for PowerShellをお使いの方はじゃんじゃんフィードバックをすると良いと思います。