流程控制
「流量控制」是指您的程式碼在主控台或指令碼中的執行方式。 其描述程式碼遵循的「流量」,以及您控制流量的方式。 有各種可用的建構可協助您控制流程。 程式碼可以執行所有陳述式或只執行其中一些。 其也可以重複特定的陳述式,直到符合特定條件為止。
讓我們來看看這些流量控制的建構,以瞭解其功能:
清理輸入。 如果您在指令碼中使用參數,您必須確保參數保留合理的值,讓您的指令碼能如預期運作。 撰寫程式碼來管理這個過程,稱為「淨化」輸入。
控制執行流程。 先前的技巧可確保您取得合理且正確的輸入資料。 這項技術更多的是關於決定如何執行程式碼。 設定的值可以決定執行哪個群組中的陳述句。
逐一查看資料。 有時候您的資料會採用陣列的形式,也就是包含許多項目的資料結構。 針對這類資料,您可能需要檢查每一個項目,並對每個項目執行作業。 PowerShell 中的許多建構都可協助您處理該流程。
備註
對陣列進行迭代不在此模組的範疇之內。 有許多建構可以處理 PowerShell 中的流量控制。 我們無法將其全部命名,但我們會討論您可能會在所讀取或寫入的指令碼中遇到的一些重要的問題。
使用 If、ElseIf 和 Else來管理輸入和執行流程
您可以使用 If 建構來判斷運算式是否為 True 或 False。 根據該判斷,您可能會執行 If 建構所定義的陳述式。 If 的語法如下所示:
If (<expression that evaluates to True or False>)
{
# Statement that runs only if the preceding expression is $True.
}
操作員
PowerShell 有兩個內建參數,可判斷運算式是 True 或 False:
$True表示運算式為True。$False表示運算式為False。
您可以使用運算子來判斷運算式是否為 True 或 False。 有幾個運算子。 基本概念通常是要判斷運算子左邊的某個項目是否與右邊相符 (指定運算子的條件)。 運算子可以表達條件,例如某個物件是否等於其他物件、大於其他物件,或符合正規表示式。
以下是使用運算子的範例。 -le 運算子用於確定左邊的值是否小於或等於右邊的值。
$Value = 3
If ($Value -le 0)
{
Write-Host "Is negative"
}
此程式碼不會顯示任何值,因為運算式會評估為 False。 值 3 顯然是正面的。
Else
只有當 If 建構評估為 True 時,才會執行陳述式。 如果您想要處理評估為 False 的案例,該怎麼辦? 這就是當您使用 Else 建構的時候。 If 表示「如果此特定案例為 true,請執行此語句。」Else 不接受表達式。 其會擷取 If 子句評估為 False 的所有案例。 當 If 和 Else 結合時,程式碼會在這兩個建構的其中一個執行陳述式。 讓我們修改先前的程式碼,以包含 Else 建構:
$Value = 3
If ($Value -le 0)
{
Write-Host "Is negative"
} Else {
Write-Host "Is Positive"
}
由於我們將 Else 放在 If 的結束大括弧旁,因此我們建立了一個聯結的建構,可作為一個整體來使用。 如果您在主控台中執行此程式碼,您會看到 Is Positive 的列印。 這是因為 If 會評估為 False,但 Else 會評估為 True。 因此,Else 列印其陳述式。
備註
只有在其上方定義 Else 建構時,才能使用 If。
ElseIf
If 和 Else 非常適合用來涵蓋所有程式碼可採用的路徑。 ElseIf 是另一種可能很實用的建構。 ElseIf 就是要與 If 一起使用。 其顯示「如果前述 If 陳述式評估為 False,就會評估此建構中的運算式。」就像 If 一樣,ElseIf 可以採用運算式,所以就可以將 ElseIf 視為「次要」。
以下是使用 ElseIf 的範例:
# _FullyTax.ps1_
# Possible values: 'Minor', 'Adult', 'Senior Citizen'
$Status = 'Minor'
If ($Status -eq 'Minor')
{
Write-Host $False
} ElseIf ($Status -eq 'Adult') {
Write-Host $True
} Else {
Write-Host $False
}
您可以使用更精簡的方式來寫入此程式碼,但這種方式確實示範了 ElseIf 的使用方式。 其會顯示如何先評估 If,然後再評估 ElseIf 和 Else。
備註
Else 也是同樣的,如果您未在上面定義 ElseIf,就無法使用 If。