引數驗證
在 PowerShell 中,有多種方法可以驗證引數輸入。
如果傳遞無效值,這些 ParameterAttributes 將丟擲,而不是在函式或指令碼中編寫程式碼來驗證引數值。
ValidateSet
有時我們需要限制引數可以接受的可能值。假設我們只想在指令碼或函式中為 $Color
引數僅允許紅色,綠色和藍色。
我們可以使用 ValidateSet
引數屬性來限制它。它具有在設定此引數時允許選項卡完成的額外好處(在某些環境中)。
param(
[ValidateSet('red','green','blue',IgnoreCase)]
[string]$Color
)
你還可以指定 IgnoreCase
以禁用區分大小寫。
ValidateRange
這種引數驗證方法採用最小和最大 Int32 值,並要求引數在該範圍內。
param(
[ValidateRange(0,120)]
[Int]$Age
)
ValidatePattern
此引數驗證方法接受與指定的正規表示式模式匹配的引數。
param(
[ValidatePattern("\w{4-6}\d{2}")]
[string]$UserName
)
ValidateLength
這種引數驗證方法測試傳遞的字串的長度。
param(
[ValidateLength(0,15)]
[String]$PhoneNumber
)
ValidateCount
這種引數驗證方法測試傳入的引數數量,例如,字串陣列。
param(
[ValidateCount(1,5)]
[String[]]$ComputerName
)
ValidateScript
最後,ValidateScript 方法非常靈活,使用一個 scriptblock 並使用$ _來表示它,以表示傳遞的引數。然後,如果結果為$ true(包括任何輸出為有效),則傳遞引數。
這可用於測試檔案是否存在:
param(
[ValidateScript({Test-Path $_})]
[IO.FileInfo]$Path
)
要檢查 AD 中是否存在使用者:
param(
[ValidateScript({Get-ADUser $_})]
[String]$UserName
)
幾乎任何你能寫的東西(因為它不僅限於 oneliners):
param(
[ValidateScript({
$AnHourAgo = (Get-Date).AddHours(-1)
if ($_ -lt $AnHourAgo.AddMinutes(5) -and $_ -gt $AnHourAgo.AddMinutes(-5)) {
$true
} else {
throw "That's not within five minutes. Try again."
}
})]
[String]$TimeAboutAnHourAgo
)