Write-Host无法解析变量的属性

Imm*_*ant 1 variables powershell properties 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
Run Code Online (Sandbox Code Playgroud)

您会看到,它$v是一个哈希表,

$v.Count
Run Code Online (Sandbox Code Playgroud)

打印2。但是为什么

Write-Host "$v.Count"
Run Code Online (Sandbox Code Playgroud)

打印出来System.Collections.Hashtable.Count?这不是我所期望的。

use*_*407 5

$vis 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" 
Run Code Online (Sandbox Code Playgroud)

版画2

对我来说,它打印System.Collections.Hashtable.Count2$v.Count而不是由印刷"$v.Count"

您应该使用"$($v.Count) elements"以获得预期的结果。