我需要创建然后使用数组,但我需要动态创建。我正在开发脚本以获取应用程序池内存,但是当我们有多个工作进程时,我需要在内存中存储数据,然后计算平均值。
我正在使用它来创建它
New-Variable -Name "Array_$($AppPoolName)" -Value @()
但是我不知道如何使用动态名称向数组添加数据,就像我使用固定名称($var += <Value>
)时那样。
答案 0 :(得分:2)
使用Get-Variable
检索动态命名的变量,例如:
$var = Get-Variable "Array_$AppPoolName" -ValueOnly
$var += <value>
为了完整性,您还可以使用Set-Variable但不直接支持数组concat语法,例如:
Set-Variable "Array_$AppPoolName" (Get-Variable "Array_$AppPoolName" -ValueOnly) += <value>)
是的,这是一个呕吐。也许更好的选择是使用哈希表:
$ht = @{"Array_$($AppPoolName)" = @()}
$ht."Array_$($AppPoolName)" += 1,2,3
答案 1 :(得分:2)
您可以使用Get-Variable:
$var = Get-Variable -Name "Array1_$($AppPoolName)" -ValueOnly
$var += <Value>
最后注意-ValueOnly
。否则,您将获得变量PSObject
。来自technet:
Get-Variable cmdlet在当前控制台中获取Windows PowerShell变量。您可以通过指定 ValueOnly 参数...
来仅检索变量的值
答案 2 :(得分:1)
您可以先将动态名称存储在变量中,然后使用 Invoke-Expression 添加到变量中,如下所示:
$dynamicname = "Array1_$AppPoolName"
New-Variable -Name $dynamicname -Value @()
Invoke-Expression "`$$dynamicname += 'new value'"
(请注意, $ AppPoolName 周围不需要 $();您可以自行插入变量。)
或者,您可以使用 Invoke-Expression 重新派生动态名称并修改具有该派生名称的变量:
New-Variable -Name "Array_$AppPoolName" -Value @()
Invoke-Expression "`$Array1_$AppPoolName += 'new value'"
答案 3 :(得分:0)
您可以在没有哈希表且没有Invoke-Expression的情况下执行此操作:
New-Variable -Name "Array_$($AppPoolName)" -Value @()
( Get-Variable -Name "Array_$($AppPoolName)" ).Value += <Value>