PowerShell: ◆Compare-Objectは難しい?で思い通りの出力結果にならず思い悩んだが、S.K.さんからコメントを頂き、問題の本質が見えてきた。
001 002 003 004 005 | $oldps = ps notepad $newps = ps diff $oldps $newps diff $oldps $newps | gm |
此の様に書いたとき、Get-Memberの出力が表示されず悩んでいたのだが、これはPowerShell: ◆コンソール出力のオブジェクトマージ機能を回避するで書いたのと同様の問題のようだ。
以下のようにOut-Hostを追加することで期待通りの結果が得られた。
001 002 003 004 005 | $oldps = ps notepad $newps = ps diff $oldps $newps diff $oldps $newps | gm | Out-Host |
出力オブジェクトが同じ型の時にマージされるのが本当だと思うのだが、diffの結果として出力されるPSCustomObjectはそれ以降の出力オブジェクトをすべて巻き込んでしまう。
すなわち、PSCunsomObjet以降の出力はすべて同じ型であると判定されているようだ。
試しに同じPSCunsomObjetを出力するImport-CSVコマンドレットを使って以下のように書いてみた。
結果は先頭にCSVの内容を表示した後、空白行が続く。
001 002 003 004 005 006 007 008 009 010 | #"★dir表示" #dir | select -First 2 #"★ps表示" #ps | select -First 2 "★★★CSV表示" Import-Csv d:\Desktop\test.csv "★dir表示" dir | select -First 2 "★ps表示" ps | select -First 2 |
期待通りの結果になる。
先頭にPSCustomObjectが来るとダメっぽい。
これが仕様だとすると、嵌ること請け合いの仕様だ。
思い通りに出力されないときは「Out-Host」と覚えておこうっと。
0 件のコメント:
コメントを投稿