2019年2月16日土曜日

PowerShellで、そもそもオブジェクトがどんなプロパティを持っているのか知りたい

PowerShellを使っていると、日常的に「オブジェクトをWHERE-OBJECT(?と省略可能)で絞り込む」とか、「SELECT-OBJECT(SELECTと省略可能)で表示したい項目だけを列挙する」という事が起きてきます。

そもそも絞り込んだり、表示したりするための項目(プロパティ)が分からへん!!となってしまうと行き詰まってしまいます。

これ、さすがマイクロソフト、PowerShellを設計する時にそうなる事を重々承知していて、道しるべになるコマンドレット「GET-MEMBER」が用意されているんですねぇ。

安心です。


たとえば、よく使う「GET-CHILDITEM」コマンドレットですが、どんなプロパティを持っているのか知りたい!という時です。



GET-CHILDITEM | GET-MEMBER | ?{$_.MemberType -match "property"}

↑なんや、いきなりMemberTypeって!!と怒られるかも知れませんが、GET-MEMBERの初回だけなので、これだけはしゃあないところ。

GET-MEMBERでざっと全部のメソッドやプロパティが表示されるのですが、これをプロパティだけに絞り込む時は、パイプラインでWHERE-OBJECT(?と省略)にチェーンさせて、プロパティだけに絞り込みます。

PowerShellの正規表現オプション(-match)は標準で大文字小文字を区別しない仕様になっているので、検索に悩まなくて済みます。

もしも、大文字小文字を区別したい時は、-matchオプションではなくて、頭にCを付けた-cmatchオプションにします。

この場合は正確に-cmatch "Property"と書かないとマッチしなくなるので注意が必要です。


↑これでオブジェクトがどんなプロパティを持っているのか分かったので、WHERE-OBJECT(?と省略可能)で絞り込んだり、SELECT-OBJECTで表示したい項目(プロパティ)だけを選択したり、自由自在に出来るようになります。

項目が分からなくなったら、オブジェクト | GET-MEMBERで解決です。