PowerShell中RegistryKey的Property属性是否真为String对象?
问题解答
- 首先可以明确:
$hkeys[0].Property数组的元素确实是String对象,你执行的类型查询结果没有错误。 - 你看到的冒号分隔的键值对,本质是PowerShell格式化输出系统的展示效果,和
Property属性本身的存储内容无关:
- 当你直接输出注册表项对象(比如执行
$hkeys[0])时,PowerShell会自动读取该注册表项的Property数组拿到所有值名称,再逐个调用GetValue()方法获取对应的值,最后拼接成名称 : 值的格式展示在输出的Property列中,这个拼接后的内容并不会存入Property属性里。 - .NET 中
Microsoft.Win32.RegistryKey类的Property属性,原生设计就是仅返回当前注册表项下所有值的名称集合,本身就不包含对应的值内容,所以你取$hkeys[0].Property[0]只会得到第一个值的名称DisplayName,属于正常行为。
- 如果需要获取某个名称对应的值,可以用如下方法:
# 按Property数组的索引取值 $hkeys[0].GetValue($hkeys[0].Property[0]) # 直接指定值名称取值 $hkeys[0].GetValue('DisplayName')
内容的提问来源于stack exchange,提问作者user32882
相关产品推荐
相关产品推荐

