使用名称中的变量调用/设置变量

时间:2013-05-23 21:03:26

标签: powershell

我正在尝试动态填充哈希表。

创建空哈希表(这样可以正常工作)

New-Variable -Name $summary_$count -Value @{}

现在添加到此哈希表(这不起作用)

${summary_$count}.Add($name, $value)

问题是它没有读取$ {summary_ $ count}作为我之前设置的变量名。只是为了澄清这是通过一个计数器,所以我最终将结束

$summary_01
$summary_02

等等。

4 个答案:

答案 0 :(得分:3)

尝试像这样创建变量:

New-Variable ${summary}_${count} -Value @{}

您可以看到PowerShell如何解释原文:

Write-Host $summary_$count

如果您想稍后使用组成变量访问该变量的值,请按以下方式访问它:

$ht = Get-Variable ${summary}_${count}

或者只需使用-PassThru从New-Variable中获取它,例如:

$ht = New-Variable ${summary}_${count} -Value @{} -PassThru
$ht.Add($name, $value)

考虑到这一点,不清楚为什么引用哈希表的变量需要动态命名。另一种方法是创建哈希表的哈希表,例如:

$ht = @{"${summary}_${count}" = @{}}
$ht["${summary}_${count}"].Add($name, $value)

答案 1 :(得分:0)

据我所见,您应该使用以下代码创建变量

New-Variable -Name "summary_$count" -Value @{}

答案 2 :(得分:0)

你能拥有一组哈希表吗?或者甚至更好地使用[PSCustomObject] 3个属性;名称,价值和计数。那只是我。

for($i=0;$i-lt100;$i++){
    $summary += @([PSCustomObject]@{Name=$name;Value=$value;Count=$i})
}
$summary | sort -property count

你确实指出了一个有趣的问题。

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}
}

答案 3 :(得分:0)

我的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_的变量而不查找它

相关问题