2016-11-24 53 views
0

我是新来的PowerShell脚本和不知道如何实现如下:如何使用FOR循环变量来帮助定义另一个变量

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

$finalArray 

输出应该是:

A 
B 
C 
+0

初始化数组首先出循环,然后您可以添加更多的元素。 $ finalArray =新对象System.Collections.Generic.List [System.Object] – Junaid

+0

对不起,忘了添加我已经这样做了,将编辑最初的帖子来显示我有什么。 – veggyaurus

+0

[从CSV创建变量]可能的重复(http://stackoverflow.com/questions/40477171/create-variable-from-csv) – TessellatingHeckler

回答

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 

如果はNT到创建变量与变量名,使用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]而不是变量变量名 - 它们通常是过于复杂的,并且无论如何你最终会得到不必要的代码,因为你需要计算吃变量名至少两次(在创建过程中,再次读取值时)。

从评论,这听起来像你试图为密码生成器生成输入。这可以大大简化,而不诉诸于变量变量名称:

# 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 '' 
+0

完美的thx,我可以在for循环中使用相同的Get变量来创建3个tempArrays? “$ tempArray(Get-Variable $ i -ValueOnly)”=新对象PSCustomObject – veggyaurus

+0

@veggyaurus更新回答 –

+0

冠军!谢谢, – veggyaurus

相关问题