Powershell 捕获动态变量并添加到数组

Powershell catch dynamic variable and add to array

我寻求帮助来弄清楚如何捕获新的动态变量并将它们添加到数组中。

下面是创建变量的示例代码。

foreach ($user in $users) {
    New-Variable -Name "$($user)_pwString"  -Value ([System.Web.Security.Membership]::GeneratePassword(10,4)) -Force
}

这将创建几个这样的变量:
$Guest01_pwString
$Guest02_pwString
$Guest03_pwString

如何捕获它创建的每个变量并将它们添加到数组中。

我认为可行的方法:

$secureStrings = @()
foreach ($user in $users) {
    $secureStrings += (New-Variable -Name "$($user)_pwString"  -Value ([System.Web.Security.Membership]::GeneratePassword(10,4)) -Force)
}

您需要 -PassThru 开关才能将新创建的变量对象传递到输出流,您可以使用该对象的 .Value 属性 来访问变量的值:

$secureStrings = @()
foreach ($user in $users) {
  $secureStrings += (New-Variable -PassThru -Name "$($user)_pwString"  -Value ([System.Web.Security.Membership]::GeneratePassword(10,4)) -Force).Value
}

您可以简化命令如下:

[array] $secureStrings = 
  foreach ($user in $users) {
    (Set-Variable -PassThru -Name "${user}_pwString"  -Value ([System.Web.Security.Membership]::GeneratePassword(10, 4))).Value
  }

退一步:与其创建单独的变量,不如考虑使用(有序的)hashtable:

$secureStrings = [ordered] @{}
foreach ($user in $users) {
  $secureStrings[$user] = [System.Web.Security.Membership]::GeneratePassword(10, 4)
}

然后您可以使用 $secureStrings.Values 仅提取密码。