It's quite weird that Write-Host doesn't seem to parse variable's property.
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
You could see, $v is a hashtable and
$v.Count
prints 2. But why does
Write-Host "$v.Count"
print out System.Collections.Hashtable.Count? This is not what I expected.
$count = $v.count), use string formatting (Write-Host ("{0} elements" -f $v.Count)) or provide it as separate elements (Write-Host $v.Count "elements")