一見便利そうであるが、背景を理解せずに無闇につかうのもどうかと思うので、個人的な解説を述べる。(あくまでも個人的な)
本来Powershellではパイプラインで渡すのは、これまでのように文字列ではなくオブジェクトだよっていうのが一番の売りなので無闇に文字列にして処理するのはナンセンス。(当然これを作った人はそれを理解した上で文字列で検索すると便利なこともあるよと言っているのだが)
Powershell的に上記処理を行うのであれば、
PS>Get-Service | ?{$_.Status -like "Run*"} Status Name DisplayName |
とやるのが普通。
まぁ、それでもプロパティ名を調べるのが面倒とか、もともと文字列でしか結果が帰ってこないコマンドもあるので一律文字列で検索るような上記Filterは有効とは思う。
ただし、文字列を検索するならSelet-Stringという専用のコマンドレットの使用も検討したほうが良いだろう。
以下はByPropertyNameなパラメータを文字列で検索している。
PS>Get-Help dir -full | Out-String -Stream | Select-String -Pattern "ByPropertyName" -Context 7,0 -LiteralPath <string[]> 必須 true -Path <string[]> 必須 false |
ByPropertyNameを含んだ行だけを表示しても何のパラメータか判らないので、該当行の前7行を一緒に表示させている。「>」付きで表示されている行が実際にヒットした行である。
当初のFilterをContext機能付きに書き換えてみた。
001 002 003 004 005 006 007 | filter grep($keyword,$context=(0,0)) { $_ | Out-String -Stream | Select-String -Pattern $keyword -Context $context } gsv | grep Running Get-Help dir -Full | grep bypropertyname 8,0 |
0 件のコメント:
コメントを投稿