鷲ノ巣

C# とか PowerShell とか。当ブログの記事は(特に公開直後は)頻繁に改定される場合があることをご了承ください。

PowerShell の Cmdlet を開発するときに使う NuGet パッケージ

.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

www.nuget.org

.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 が出るだろうと言われています。

github.com

Microsoft.PowerShell.NanoServer.NetCore.Library

www.nuget.org

Windows Nano Server 2016 に搭載されている Windows PowerShell Core 5.1 用のモジュールを開発するためのパッケージです。
PowerShell Core 5.1 が闇に葬り去られそうな感じなので、たぶん使うことはないんじゃないんでしょうか。

System.Management.Automation (myget)

System.Management.Automation

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 で動かすために、地味に重要なことが書かれています。