有人可以解释,为什么这(PowerShell 2.0)
$wmi=Get-WmiObject Win32_UserProfile $wmi|select *; $wmi|select SID; $wmi|select LocalPath;
给出预期的结果(select一切,然后selectSID,然后LocalPaths),而这两个给出
$wmi=Get-WmiObject Win32_UserProfile $wmi|select LocalPath; $wmi|select SID; $wmi|select LocalPath;
LocalPaths,什么都不是,LocalPaths
Get-WmiObject Win32_UserProfile|select SID; "separator"; gwmi win32_UserProfile|select LocalPath; "separator" gwmi Win32_UserAccount|select *;
SID,没有,SID再次是否只有一个select的实例?
你遇到了一个怪异的例子,如何在PowerShell的输出格式工作。 请参阅Jeffrey Snover对此问题的描述。
我只能在一行中运行命令时重现此行为,如下所示:
$wmi=Get-WmiObject Win32_UserProfile; $wmi | select localpath;$wmi|select SID; $wmi | select localpath
这必须是(在这里推测),因为整个行被批量提交给Out-Default; 如果您单独运行每个命令,则不会看到此行为。
但通过一次调用Out-Default,它首先看到Selected.System.Management.ManagementObject具有一个属性“LocalPath”,因此它为“LocalPath”创build一个具有一列的表。 一旦你得到了一些具有'SID'属性的Selected.System.ManagementObjects,它们作为空值出现在表中,因为它们的'LocalPath'属性(唯一一个Format-Table知道要显示的)是空的。
在第一个例子中,这个问题不会发生,因为'select *'会导致Out-DefaultselectFormat-List作为格式化程序,这样的损失要小得多。
我希望这有助于 – 我链接的博客文章解释得很好。