Это потому, что ваш ISE будет перечислять коллекцию, чтобы создать переменный-TreeView, а объекты вернулись из HashtableEnumerator
, которые вы получаете от $var.GetEnumerator()
являются DictionaryEntry
-Объектами.
$var = @{a=1;b=2}
#Collection is a Hashtable
$var | Get-Member -MemberType Properties
TypeName: System.Collections.Hashtable
Name MemberType Definition
---- ---------- ----------
Count Property int Count {get;}
IsFixedSize Property bool IsFixedSize {get;}
IsReadOnly Property bool IsReadOnly {get;}
IsSynchronized Property bool IsSynchronized {get;}
Keys Property System.Collections.ICollection Keys {get;}
SyncRoot Property System.Object SyncRoot {get;}
Values Property System.Collections.ICollection Values {get;}
#Enumerated objects (is that a word?) are DictionaryEntry(-ies)
$var.GetEnumerator() | Get-Member -MemberType Properties
TypeName: System.Collections.DictionaryEntry
Name MemberType Definition
---- ---------- ----------
Name AliasProperty Name = Key
Key Property System.Object Key {get;set;}
Value Property System.Object Value {get;set;}
Вы значение (1 и 2) хранится в Value
-свойстве в объектах, пока они Key
это идентификатор вы использовали (а и б).
Вам нужно только об этом заботиться, когда вам нужно перечислить хеш-таблицу, например. Когда вы перебираете каждый элемент. Для нормального использования это за кадром-волшебство, поэтому вы можете использовать $var["a"]
.
Как вы определяете это значение? Что вы делаете, чтобы увидеть этот результат? – briantist
Я использовал PowerGUI, но похоже, что это связано с этим приложением, потому что оно работает в консоли Powershell. – Bobazonski