1

我需要创建然后使用数组,但我需要动态创建。我正在开发脚本来获取应用程序池内存,但是当我们有超过 1 个工作进程时,我需要将内存存储在数组中,然后计算平均值。

我正在使用它来创建它

New-Variable -Name "Array_$($AppPoolName)" -Value @()

但我不知道如何使用动态名称将数据添加到数组中,就像使用固定名称 ( $var += <Value>) 时那样。

4

4 回答 4

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
于 2013-07-29T15:56:40.600 回答
2

您可以使用Get-Variable

$var = Get-Variable -Name "Array1_$($AppPoolName)" -ValueOnly
$var += <Value>

注意-ValueOnly最后。否则你会得到一个变量PSObject。来自技术网

Get-Variable cmdlet 在当前控制台中获取 Windows PowerShell 变量。您可以通过指定ValueOnly参数仅检索变量的值...

于 2013-07-29T15:57:52.983 回答
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'"
于 2013-07-29T16:09:36.550 回答
0

您可以在没有哈希表和 Invoke-Expression 的情况下执行此操作:

New-Variable -Name "Array_$($AppPoolName)" -Value @()
( Get-Variable -Name "Array_$($AppPoolName)" ).Value += <Value>
于 2018-07-18T17:02:56.417 回答