Powershell(v3がインストールされている)で奇妙な動作を観察したとき、私は簡単なデモスクリプトをまとめていました。
$file = ls 'C:\temp' | Where-Object {$_.Extension -eq '.txt'}
$file.FullName
#$file.GetType()
dir 'c:\temp'
かなり良性ですよね?期待どおりに実行されます (その中に txt ファイルがある ac:\temp ディレクトリがあると仮定します)。ただし、$file.GetType() 行のコメントを外すと、それに続く dir 行で単純なディレクトリ リストが表示されなくなります。代わりに、ディレクトリ内のすべてのアイテムの詳細なリストが表示されます。GetType を out-null にパイプしてみましたが、ディレクトリは再び正常に動作しますが、GetType を実行して後でディレクトリを一覧表示することはできないようです。
では、GetType を呼び出すと、他のコマンドレット ダウン ストリームが変更される原因は何なのか知りたいです。誰かがそれを引き起こすメカニズムを説明できますか?
また、他のいくつかの方法を試してみたところ、問題の原因となるもの (GetAccessControl など) とそうでないもの (GetHashCode など) が見つかりました。したがって、メソッドを呼び出すだけではなく、特定のメソッドが動作を引き起こします。