我需要创建然后使用数组,但我需要动态创建。我正在开发脚本来获取应用程序池内存,但是当我们有超过 1 个工作进程时,我需要将内存存储在数组中,然后计算平均值。
我正在使用它来创建它
New-Variable -Name "Array_$($AppPoolName)" -Value @()
但我不知道如何使用动态名称将数据添加到数组中,就像使用固定名称 ( $var += <Value>
) 时那样。
我需要创建然后使用数组,但我需要动态创建。我正在开发脚本来获取应用程序池内存,但是当我们有超过 1 个工作进程时,我需要将内存存储在数组中,然后计算平均值。
我正在使用它来创建它
New-Variable -Name "Array_$($AppPoolName)" -Value @()
但我不知道如何使用动态名称将数据添加到数组中,就像使用固定名称 ( $var += <Value>
) 时那样。
用于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
您可以使用Get-Variable:
$var = Get-Variable -Name "Array1_$($AppPoolName)" -ValueOnly
$var += <Value>
注意-ValueOnly
最后。否则你会得到一个变量PSObject
。来自技术网:
Get-Variable cmdlet 在当前控制台中获取 Windows PowerShell 变量。您可以通过指定ValueOnly参数仅检索变量的值...
您可以先将动态名称存储在变量中,然后使用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'"
您可以在没有哈希表和 Invoke-Expression 的情况下执行此操作:
New-Variable -Name "Array_$($AppPoolName)" -Value @()
( Get-Variable -Name "Array_$($AppPoolName)" ).Value += <Value>