3

当我在 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)。所以这不仅仅是通过调用一个方法,某些方法会导致这种行为。

4

1 回答 1

3

在我看来,这只是默认格式化程序变得混乱并切换到格式列表显示而不是格式表的问题。

如果您取消注释 GetType(),然后将目录列表显式传输到 FT,它就会恢复正常。

于 2013-04-23T17:57:38.523 回答