鷲ノ巣

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

ps1xml のスキーマを書いた話

はじめに

本記事は PowerShell Advent Calendar 2018 の 4 日目です。
PowerShell Advent Calendar 2018 は寄稿して頂ける方を絶賛募集中です。よろしくお願いいたします。
qiita.com

TL; DR

  • ps1xml を書こうぜ。
  • RELAX NG はいいぞ。

ps1xml とは

ps1xml とは、PowerShell と共に利用する、特殊な XML ファイルです。
あからじめ PowerShell に同梱されているものもありますし、ユーザーが作成したモジュールを配布する際に同梱することもできます。

PowerShell に同梱されているものは、Windows PowerShell のインストール ディレクト*1にあります。
ただし、このファイルは過去との互換性のためにあるもので、Windows PowerShell 5.1 では読み込まれないのだそうです。PowerShell Core でも同様です。
ユーザーが自作したものは読み込まれますので、サンプルとしては有用です。

blog.shibata.tech
blog.shibata.tech

ps1xml には、types.ps1xml と format.ps1xml という2つのタイプがあります。

モジュール作りの一環としてこれらを書くにあたって、エラー チェックや入力補完をしてくれる XML スキーマが無いと厳しいので書いたよ、というのが、本記事の趣旨です。
書いたスキーマはここに置いてあります。

github.com

*1:通常は C:\Windows\System32\WindowsPowerShell\v1.0

続きを読む

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

.NET で PowerShell のバイナリ モジュールを作成する際に参照する NuGet パッケージが、いろいろあってよくわからんのでまとめました。

なお、以下のパッケージには、System.Management.Automation.dll や、その他いくつかのアセンブリが含まれますが、これらは実装を含まない参照アセンブリなので、モジュールと一緒に配布すべきものではありません。
配布先で利用されるときには、その配布先に既にインストールされている(はずの)アセンブリが使用されます。
また、System.Management.Automation.dll 以外のアセンブリは、自動的にプロジェクトの参照に追加されたないため、必要であれば手動で追加する必要があります。

続きを読む

Update-Module の罠

いや、別に PowerShell の罠シリーズをやろうとしているわけではないのですが。
あと、今回の罠は、はまる人はあまりいないと思います…。

私は時々、PowerShellGet でインストールしたモジュールを最新版にするために、

Get-InstalledModule | Update-Module

というのをやります。

ところが今回、新しいバージョンが既にリリースされているのに、これをやっても、モジュールが更新されないという現象が起きて、ちょっと調べていました。

続きを読む