使用 PowerShell 測試變數的資料型別
我們通常使用的 PowerShell 中的一種技術是獲取使用者輸入並將其儲存在變數中。但是,在某些情況下,從使用者那裡獲取的使用者輸入與我們預期的資料型別不同。
一個例子是一個使用者輸入了他的名字,一個 String
資料型別,而不是他的年齡,它是一個 Int
或整數資料型別。在本文中,我們將討論如何處理可變資料型別不匹配的幾種方法,以及如何使用 PowerShell 充分糾正它們。
使用 PowerShell 測試變數
我們將向你展示處理可變資料型別不匹配的三個示例。讓我們從使用引數開始。
使用引數測試變數
要求使用者輸入的一種方法是在指令碼執行期間預先配置強制引數。在預先確定引數時,我們可以新增一個資料型別來支援該引數。
這樣,指令碼可以在指令碼開始之前判斷使用者是否傳遞了有效變數。讓我們看一下這個例子。
假設我們需要執行指令碼的使用者的年齡。我們可以執行下面的指令碼來強制指令碼只接受整數值。
示例程式碼(param.ps1):
param(
[Parameter(Mandatory)]
[Int]$age
)
Write-Output $age
假設使用者已經使用 .\param.ps1 -age 2
執行了它,指令碼應該將它與數字的輸出一起返回。
輸入:
Supply values for the following parameters:
age: 2
輸出:
2
但是,如果使用者嘗試使用除整數之外的資料型別傳遞不同的值,例如 .\param.ps1 -age "hello"
,指令碼將丟擲錯誤。
輸入:
Supply values for the following parameters:
age: hello
輸出:
"System.Int32". Error: "Input string was not in a correct format."
也許我們正在指令碼執行期間處理使用者輸入。以下方法將在指令碼執行過程中檢查變數的資料型別。
使用運算子測試變數
檢查變數資料型別的另一種方法是使用條件運算子。條件運算子是將兩個或多個值匹配在一起產生布林變數的函式。
我們將在本文中使用條件運算子 -is
。在這種情況下,我們可以通過將變數直接與資料型別匹配來使用 -is
運算子。
示例程式碼:
$age -is [Int]
輸出:
True
例如,使用下面的程式碼片段,如果變數具有整數值,指令碼將輸出 True
的值。否則,假
。由於這些輸出匯出一個布林值,我們可以使用條件語句來執行特定的操作,例如,也許使用 -as
運算子轉換變數的資料型別。
示例程式碼:
if($age -is [Int]){
Write-Output "Age $age is an integer"
}else{
Write-Output "Age is not an integer... Converting"
try{
$age = $age -as [Int]
Write-Output "Converted! Age $age is now an integer"
}catch{
Write-Output "Input is a string, could not be converted."
}
}
輸出:
Age is not an integer... Converting
Converted! Age 2 is now an integer
用函式測試變數
我們的最後一個示例與上一個示例類似,因為我們將使用運算子來建立我們的自定義函式。我們可以使用這些運算子建立一個函式,該函式將檢查變數的資料型別並返回一個布林值。
下面這個函式的好處在於,與我們之前的例子相比,這個函式還會檢查是否為負值,為我們提供更準確的結果。
示例程式碼:
function isNumeric($_){
return $_ -is [int] -or $_ -is [int16] -or $_ -is [int32] -or $_ -is [int64]
}
isNumeric(-1)
輸出:
True
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn