鷲ノ巣

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

ぼくがかんがえたさいきょうの PowerShell モジュール仕様 6.0

本記事は PowerShell Advent Calendar 2016 の 5 日目の記事です。
昨日は arachan さんの PowerShellで遠隔操作の準備です。
明日は stknohg さんの PowerShell上でdockerコマンドの自動補完を行うposh-dockerモジュールについてです。

さて、2016 年も終わりが見えてまいりました。
今年は PowerShell にとってはいろいろとあった年でした。
何があったかは、1 日目の牟田口さんの記事 2016年のPowerShellを軽く振り返ってみるをご覧頂くのが良いと思います。

PowerShell も公開から 10 年、バージョン 5.1 が公開されるまでになりました。
長く使っていると、いろいろと不満も溜まってくるものです。
そろそろ、こう、どーんと大きな改革があってもいい頃なんじゃないでしょうか。ねぇ。
というわけで、こんな風になったらいいのにな、という妄想を書き連ねてみたのがこの記事です。
正直、何か改革をするなら、Linux 版が出るこのタイミングは絶好なのではないか、と思います。Linux 版や Mac 版のユーザーには最初から新しい仕様を使ってもらえるわけですし。
しかし、今のところ、そうした改革が行われる気配はありません。なので、この記事は完全に妄想です

なお、C# 等の言語を使ってバイナリ モジュールを作る場合を主に想定しております。

続きを読む

PowerShell でオブジェクトの表示方法をカスタマイズする

Test-Connection という、対象のサーバーが生きてるかどうか Ping を投げてチェックするコマンドがあるわけですが、どうもこれが遅いらしいと。
原因と対策は、こちらのブログを見て頂くとして。

stknohg.hatenablog.jp

その対策に、週末にコメントすると言っといて、まだしていなかったので、慌てて書いているわけです。はい。

続きを読む

PowerShell コマンドを C# で書くときに便利な拡張メソッド

たまにはね、会社ブログの報告ばかりじゃなくて、自前の記事も書きましょうね。
リハビリというわけじゃないですが、軽めの記事をひとつ。

よくある話

PowerShell Cmdlet で、あるパラメーターが指定されているかどうかで処理を分けることはよくあります。
スクリプトだと $PSBoundParameters を見て判断するんですが、C# では PSCmdlet.MyInvocation.BoundParameters を使って実現できます。
ただ、この辞書にアクセスするのに、パラメーター名を文字列で指定しなければいけないというのはよろしくありません。
基本的に、リテラルは書いたら負けです。許容できても一度までです。

というわけで、こんな拡張メソッドを作っておくと、タイプミスもなくせて大変便利です。
PowerShell Cmdlet では、パラメーター名はメンバー名ですからね。

続きを読む

パイプライン処理の後始末をしよう

パイプライン対応、してますか?

軽めの記事をもう一つ。

関数内を begin - process - end の 3 つのブロックに区切って、パイプラインから配列を渡してやると、

  1. begin ブロックが 1 回実行される
  2. process ブロックが、パイプラインから渡した配列の要素数分、繰り返し実行される
  3. end ブロックが 1 回実行される

という流れになります。

続きを読む