如何使用FOR循环变量来帮助定义另一个变量

时间:2016-11-24 21:42:55

标签: powershell

我是PowerShell脚本的新手,不知道如何实现以下目标:

$finalArray = @()
$tempArray0 = 'A'
$tempArray1 = 'B'
$tempArray2 = 'C'
FOR (i=0; i -eq 5; i++) {$finalArray += $tempArray[i]}

$finalArray

输出应该是:

A
B
C

1 个答案:

答案 0 :(得分:4)

如果变量名本身是变量,则您必须使用Get-Variable cmdlet来检索其值:

$finalArray = @()
$tempArray0 = 'A'
$tempArray1 = 'B'
$tempArray2 = 'C'

for($i=0; $i -le 2; $i++) {
    $finalArray += (Get-Variable "temparray$i" -ValueOnly)
}

$finalArray

如果要使用变量名创建变量,请使用New-Variable cmdlet:

$Values = 'A','B','C'
for($i = 0; $i -lt $Values.Count; $i++){
    New-Variable -Name "tempvalue$i" -Value $Values[$i]
}

会导致:

PS C:\> $tempvalue1
B

虽然以上内容将解决您所提供的示例,但我可以想到很少会出现使用[hashtable]代替变量变量名称更好的情况 - 他们&#39 ;通常是过度复杂化,并且你最终会得到不必要的代码,因为你需要至少两次计算变量名称(在创建过程中和读取值时再次)。

从评论中,听起来您正在尝试为密码生成器生成输入。这可以大大简化,而不需要使用变量变量名称:

# Create a hashtable and generate the characters 
$CharArrays = @{
    Letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray()
    Numbers = 0..9
}

# Generate some letters for the  password
$PasswordChars = $CharArrays['Letters'] |Get-Random -Count 10

# Generate a few digits
$PasswordChars += $CharArrays['Numbers'] |Get-Random -Count 4

# Shuffle them around a bit
$PasswordChars = $PasswordChars |Sort-Object {Get-Random}

# Create your password
$Password = $PasswordChars -join ''