我是PowerShell脚本的新手,不知道如何实现以下目标:
$finalArray = @()
$tempArray0 = 'A'
$tempArray1 = 'B'
$tempArray2 = 'C'
FOR (i=0; i -eq 5; i++) {$finalArray += $tempArray[i]}
$finalArray
输出应该是:
A
B
C
答案 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 ''