我試圖創建一個「開關」語句,將有大量的選擇基於返回的對象的數量。Powershell開關 - 設置基於數組元素數量的選擇量
第一示例:
[array]$A1 = ("QWERTY", "ASDFGH")
因此 「開關」 功能將看起來像這樣:
Switch ($Login = read-Host -Prompt Login) {
1 { $Login = "QWERTY" }
2 { $Login = "ASDFGH" }
}
第二示例:
[array]$A2 = ("A", "B", "C", "D")
所以「開關「功能確定這樣的:
Switch ($Login = read-Host -Prompt Login) {
1 { $Login = "A" }
2 { $Login = "B" }
3 { $Login = "C" }
4 { $Login = "D" }
}
,所以我想一些foreach循環來創建簡單的字符串,然後從字符串命令運行。我奶源要做到這一點,但我無法運行我的生成的字符串命令:
[array]$AR1 = ("QWERTY", "ASDFGH")
$q1 = "switch (Read-Host -Prompt Login) {"
$q2 = " }"
$Number = 0
$Script:ArrayFull = $null
$AR1 | % {
$_
$ArrayElement = $null
$NameOfTheLoginVariable = '$Script:User_Login'
$NumberOfArrayElements = $AR1.count
if ($NumberOfArrayElements -ne 0) {
$Number = $Number+1
$NumberOfArrayElements = $NumberOfArrayElements-1
$ArrayElement = "$Number { $NameOfTheLoginVariable = '$_' }"
$ArrayElement
$Script:ArrayFull += $ArrayElement
}
}
$SwitchCommand = $q1+$ArrayFull+$q2
$SwitchCommand = $SwitchCommand.ToString()
$Test1 = "switch (Read-Host) {1 { $Script:User_Login = 'QWERTY' }1 { $Script:User_Login = 'ASDFGH' } }"
#switch (Read-Host -Prompt Login) {1 { $Script:User_Login = 'QWERTY' }1 { $Script:User_Login = 'ASDFGH' } }
#& $Test1
& $SwitchCommand
但是,即使這個代碼產生正確的「開關」語句作爲字符串,我不能執行它。爲什麼?
無論如何,這種方法真的很醜,所以也許有更好的方法嗎?
你有使用'switch'語句的原因嗎?對我而言,'$ Login = $ A1 [(Read-Host -Prompt Login) - 1]'更有意義。 – SpellingD 2013-04-25 16:20:00
非常好! '[array] $ A1 =(「QWERTY」,「ASDFGH」) $ A1 | %{ $ i = $ A1.IndexOf($ _)+1 Write-Host「$ i $ _」 } $ Login = $ A1 [(Read-Host -Prompt Login) - 1] $ Login' – ALIENQuake 2013-06-17 18:32:54