Write-Host не может проанализировать свойство переменной

Это довольно странно, что Write-Host похоже, не разбирает свойство переменной.

PS C:\Users\x> $v=@{item1="kkk";item2="aaa"}
PS C:\Users\x> $v.Keys|%{$v.Item($_)}
kkk
aaa
PS C:\Users\x> Write-Host "$v.Count elements"
System.Collections.Hashtable.Count elements
PS C:\Users\x> $v.Count
2
PS C:\Users\x> $v
Name                           Value
----                           -----
item1                          kkk
item2                          aaa

Вы могли видеть, $v это хеш-таблица и

$v.Count

печатает 2. Но почему

Write-Host "$v.Count"

распечатывать System.Collections.Hashtable.Count? Это не то, что я ожидал.

1 ответ

Текстовое представление $v является System.Collections.Hashtable ([string]$v или же "$v"). А также "$v.Count elements" средства {text representation of $v}.Count elements не {text representation of $v.Count} elementsтак что для меня ожидается, что вы получите System.Collections.Hashtable.Count elements в результате.

Write-Host не несет ответственности за расширение строк в двойных кавычках. Это делается PowerShell до его вызова Write-Host,

"$v.Count" 

отпечатки 2

Для меня это печатает System.Collections.Hashtable.Count, 2 напечатано $v.Count не "$v.Count",

Вы должны использовать "$($v.Count) elements" чтобы получить ожидаемый результат.

Другие вопросы по тегам