.NET で PowerShell のバイナリ モジュールを作成する際に参照する NuGet パッケージが、いろいろあってよくわからんのでまとめました。
なお、以下のパッケージには、System.Management.Automation.dll や、その他いくつかのアセンブリが含まれますが、これらは実装を含まない参照アセンブリなので、モジュールと一緒に配布すべきものではありません。
配布先で利用されるときには、その配布先に既にインストールされている(はずの)アセンブリが使用されます。
また、System.Management.Automation.dll 以外のアセンブリは、自動的にプロジェクトの参照に追加されたないため、必要であれば手動で追加する必要があります。
Microsoft.PowerShell.X.ReferenceAssemblies
www.nuget.org
www.nuget.org
www.nuget.org
www.nuget.org
Windows PowerShell をターゲットにした Cmdlet を開発するためのパッケージです。
それぞれ、ターゲットにする PowerShell の最低バージョンに対応したものをインストールします。
たとえば、Microsoft.PowerShell.4.ReferenceAssemblies をインストールすると、Windows PowerShell 4.0 以降で実装された機能が使えますが、もちろん、Windows PowerShell 4.0 以降でしか動かないものになります。
PowerShellStandard.Library
.NET Standard に倣って、Windows PowerShell と、クロス プラットフォームの PowerShell Core の両方で動くモジュールの仕様を PowerShell Standard と呼ぶことにしたようです。
その PowerShell Standard 準拠のモジュールを開発するためのパッケージがこれです。
今後はこれが主流になると思われます。
.NET Standard 2.0 以降が必要になります。
本稿執筆時点で、3.0.0-preview1 というバージョンがリリースされています(preview なので、インストール時には -Pre フラグが必要です)。
これは、Windows PowerShell 3.0 相当の機能が使えるということです。
今後、5.x および 6.0 が出るだろうと言われています。
Microsoft.PowerShell.NanoServer.NetCore.Library
Windows Nano Server 2016 に搭載されている Windows PowerShell Core 5.1 用のモジュールを開発するためのパッケージです。
PowerShell Core 5.1 が闇に葬り去られそうな感じなので、たぶん使うことはないんじゃないんでしょうか。
System.Management.Automation (myget)
PowerShell Core 6.0 専用のモジュールを開発するためのパッケージです。
まだ NuGet.org にはリリースされていないので、今後もこの名前で提供されるのかどうかは分かりません。
なお、NuGet.org にある同名のパッケージは、だいぶ古いものなので、上記の myget のパッケージとは別物だと思われます。
www.nuget.org
参考資料
Building a C# Cmdlet with Visual Studio
Visual Studio を使って PowerShell Core / PowerShell Standard をターゲットにしたモジュールを開発する方法です。
Creating a cross-platform binary module with the .NET Core command-line interface tools
dotnet CLI を使って PowerShell Standard 対応のモジュールを開発する方法です。
PowerShell Standard 対応モジュールを Windows PowerShell で動かすために、地味に重要なことが書かれています。