使用 PowerShell 测试变量的数据类型

Marion Paul Kenneth Mendoza 2022年7月18日
使用 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 Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

相关文章 - PowerShell Variable