2016-11-24 54 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

相關問題