我正在尝试动态填充哈希表。
创建空哈希表(这工作正常)
New-Variable -Name $summary_$count -Value @{}
现在添加到这个哈希表(这不起作用)
${summary_$count}.Add($name, $value)
问题是它没有读取 ${summary_$count} 作为我之前设置的变量名。只是为了澄清,这是通过一个柜台运行的,所以我最终会得到
$summary_01
$summary_02
等等等等
我正在尝试动态填充哈希表。
创建空哈希表(这工作正常)
New-Variable -Name $summary_$count -Value @{}
现在添加到这个哈希表(这不起作用)
${summary_$count}.Add($name, $value)
问题是它没有读取 ${summary_$count} 作为我之前设置的变量名。只是为了澄清,这是通过一个柜台运行的,所以我最终会得到
$summary_01
$summary_02
等等等等
尝试像这样创建变量:
New-Variable ${summary}_${count} -Value @{}
您可以看到 PowerShell 如何像这样解释您的原始文件:
Write-Host $summary_$count
如果您想稍后使用组成变量访问该变量的值,请像这样访问它:
$ht = Get-Variable ${summary}_${count}
或者只是使用 -PassThru 从新变量中获取它,例如:
$ht = New-Variable ${summary}_${count} -Value @{} -PassThru
$ht.Add($name, $value)
考虑到所有这些,尚不清楚为什么引用哈希表的变量需要动态命名。另一种方法是创建哈希表的哈希表,例如:
$ht = @{"${summary}_${count}" = @{}}
$ht["${summary}_${count}"].Add($name, $value)
Can you just have an array of hash tables? Or even better use [PSCustomObject]
with 3 properties; name, value, and count. That's just me.
for($i=0;$i-lt100;$i++){
$summary += @([PSCustomObject]@{Name=$name;Value=$value;Count=$i})
}
$summary | sort -property count
You do point out an interesting question.
foreach($count in (1..10)){
New-Variable -Name "Summary_$count" -Value @{}
#Now how do you access the variable you just created?
#Check out Get-Help Set-Variable -Full
Set-Variable -Name "Summary_$count" -Value @{$name,$count}
}
我的 2 美分:
PS C:\ps> $summary = "Summary"
PS C:\ps> $count = 1
PS C:\ps> $name = "John"
PS C:\ps> $value = 10
PS C:\ps> New-Variable -Name $summary`_$count -Value @{} # note the escaped underscore!
PS C:\ps> iex "`$$summary`_$count.add('$name',$value)"
PS C:\ps> $Summary_1
Name Value
---- -----
John 10
必须对下划线进行转义,以让 powershell 解析器知道第一个变量在哪里结束,第二个变量在哪里开始,否则它会尝试查找名为$summary_
但没有找到它的变量
据我所知,您应该使用以下代码创建变量
New-Variable -Name "summary_$count" -Value @{}