如果我只是做
Get-Item "HKLM:\SOFTWARE\MozillaPlugins\@microsoft.com/GENUINE"
我在控制台上得到了这个
NAME
----
@microsoft.com/GENUINE
但是,这个
$test = Get-Item "HKLM:\SOFTWARE\MozillaPlugins\@microsoft.com/GENUINE"
Write-Host "$($test.name)"
返回完整路径,而不仅仅是密钥的名称。
这是一个错误吗?预期的行为?我做错了什么?
答案 0 :(得分:4)
这是一个错误吗?预期的行为?我做错了什么?
中间人。
PowerShell格式化文件(默认情况下位于$pshome
中定义的目录中的* .format.ps1xml)解释了这里的区别。在默认输出方案中,PowerShell会检查已知格式定义,这些定义是从上述文件加载的,用于给定的对象类型。如果存在,它将使用那些来管理哪些数据以及如何输出数据。
因此,在您的情况下,您有Microsoft.Win32.RegistryKey
个对象。其格式定义存储在registry.format.ps1xml中。只是显示该文件的截断部分,以便您可以看到如何创建顶部示例。
.... output truncated ....
<TableControl>
<TableHeaders>
<TableColumnHeader>
<Width>30</Width>
<Label>Name</Label>
</TableColumnHeader>
<TableColumnHeader>
<Label>Property</Label>
</TableColumnHeader>
</TableHeaders>
<TableRowEntries>
<TableRowEntry>
<Wrap/>
<TableColumnItems>
<TableColumnItem>
<PropertyName>PSChildName</PropertyName>
.... output truncated ....
因此,这定义了一个包含2列的输出表:name,property。 name列实际上是对象pschildname属性。这与对象的实际名称属性是分开的。这就是为什么你得到你上面看到的差异。
在PS世界中也有其他这种误解的例子。你知道的越多。
格式化文件的首选资源是about_format.ps1xml。如果您对默认格式有疑问并且对简单Select-Object
不满意,那么您可以从副本创建自己的格式。
FWIW你可以通过像
那样找到这两个属性Get-Item "HKLM:\SOFTWARE\MozillaPlugins\@microsoft.com/GENUINE" | Format-List *
这会强制显示所有属性,您会看到name
和pschildname
。