当我在 Powershell(安装了 v3)中观察到一些奇怪的行为时,我正在整理一个简单的演示脚本。
$file = ls 'C:\temp' | Where-Object {$_.Extension -eq '.txt'}
$file.FullName
#$file.GetType()
dir 'c:\temp'
相当良性对吧?它按预期运行(假设您有 ac:\temp 目录,其中包含 txt 文件)。但是,当您取消注释 $file.GetType() 行时,它后面的 dir 行不再提供简单的目录列表。相反,它将给出目录中所有项目的详细列表。我尝试通过管道将 GetType 设置为 out-null,然后目录再次正常工作,但我似乎无法对 GetType 执行操作并随后列出目录。
所以我很好奇调用 GetType 会导致下游其他 cmdlet 发生变化的原因是什么?谁能解释造成它的机制?
此外,我尝试了其他一些方法,发现一些导致问题的原因(如 GetAccessControl)而其他方法则没有(如 GetHashCode)。所以这不仅仅是通过调用一个方法,某些方法会导致这种行为。