如何从包含“Keys”和“Values”文本的哈希表中检索所有键?

ren*_*egm 5 syntax powershell properties hashtable key

Hashtable在 PowerShell 中,您可以使用以下属性获取所有密钥Keys

$ht=@{
    "1"="10";
    "2"="20";
}
$ht.Keys
Run Code Online (Sandbox Code Playgroud)

这将返回:

2
1
Run Code Online (Sandbox Code Playgroud)

但是这个:

$ht=@{
    "Keys"="Keys text";
    "text1"="text1111"
}
$ht.Keys
Run Code Online (Sandbox Code Playgroud)

将返回Keys text(项目的值Keys

有没有办法强制.Keys返回Keys属性而不是Keys项目的值?

BAC*_*CON 5

这似乎是一个错误,因为检索条目的语法Keys正在取代 的HashTable属性Keys,尽管我可以看到有人期望它以任何一种方式表现。根据GitHub 上的向哈希表添加“键”键会破坏对 .Keys 属性的访问问题,这一个错误,但需要进行重大更改才能纠正,因此将以下解决方法添加到文档中。

根据about_Hash_Tables

如果键名称与 HashTable 类型的属性名称之一冲突,您可以使用PSBase来访问这些属性。例如,如果键名称是,keys并且您想要返回键的集合,请使用以下语法:

$hashtable.PSBase.Keys

您还可以通过反射检索属性值...

PS> $ht.GetType().GetProperty('Keys').GetValue($ht)
text1
Keys
Run Code Online (Sandbox Code Playgroud)


Nas*_*Nas 5

$ht | Select-Object -ExpandProperty Keys
Run Code Online (Sandbox Code Playgroud)