最近は、もっぱらRespClientがお気に入りで欲しいと思ったものをちょいちょい追加しています。
Cmdletなので、VSでC# となります。
PowerShell ISEでのfunctionデバッグといえば、まぁごにょごにょ。
これが、Cmdletとなるとどうやるのかをちらっと見てみましょう。
手順
いたってふつーです。
- Cnmdletを書く
- ビルドしたdllをてきとーに配置
- PowreShell.exeを開く
- VSでプロセスをアタッチ
Import-Module .\dllの名前.dllでモジュールをインポート- ブレークポイントをテキトーにはってCmdletを実行
これで、VS内で設定したブレークポイントで停止、デバッグが可能になります。
Cmdlet を書く
書いてください。
ビルドしたdll をテキトーに配置
はい、てきとーです。

PowerShell.exeを開く
dllのパスで、File > Open PowerShellが楽でしょう。

VS でプロセスをアタッチ
PowerShell.exeを開いたら開いたPowerShellプロセスをVSにアタッチしましょう。


これでみんな大好きウォッチ式も使えます。

.dll からモジュールをインポート
.dllと同一パスでPowershell.exeを開いていれば簡単でしょう。
Import-Module .\RespClient.dll

ブレークポイントをテキトーにはってCmdletを実行
VSでテキトーにブレークポイントを貼ります。

PowerShell.exeでCmdletを実行しましょう。
VSで張ったブレークポイントにフォーカスが遷移して止まったはずです。

ローカルも、ウォッチ式も使えますねー。


あとは、F10やF11など、ステップイン/アウトを使ったりブレークポイントをずらしたりしてはかどってください。
注意点
Add-Typeなどで気づかれている方も多いかと思いますが、PowerShell.exeやPowerShell ISEは、そのプロセスでインポートしたモジュール.dllやスナップインとして読み込んだ.dllをハンドルしっぱなしになります。
そのため、ビルドしなおしてdllを再配置使用としたらファイルロックと怒られたりします。 えー、やだー
PowerShellスクリプトで書いた、スクリプトモジュールはハンドルしないのにふぇぇです。
そのため、「一度 .dllを読み込んだら、プロセスを終了しないと .dllがハンドルされる」ことを覚えておいてください。うざいですね。
Roslynや .NET Native 、 vNextなどが出て来たら改善するんでしょうか? *1
まとめ
VSのデバッグは、間違いなくISEよりはかどります。
PowerShell ScriptをISEやVSで書くよりもはかどったりするので、ぜひぜひどうぞ。
*1:いやしないだろう