PowerShell 中参数的多个值

Marion Paul Kenneth Mendoza 2023年1月30日
  1. 了解 PowerShell 中的 Parameter 函数
  2. 在 PowerShell 中使用 Named 参数
  3. 在 PowerShell 中对参数使用默认值
  4. 在 PowerShell 中使用 Switch 参数
  5. 在 PowerShell 中使用 Mandatory 参数
  6. 在 PowerShell 中使用未知数量的参数
  7. 在 PowerShell 中使用管道参数
PowerShell 中参数的多个值

我们使用 PowerShell 参数函数 param 处理参数。它是任何脚本的基本组件,使开发人员能够在运行时提供输入。

此外,如果脚本的行为需要更改,参数可以提供这样做的机会,而无需更改底层代码。

本文将讨论 parameter 函数、我们可以定义的不同变量、在单个参数中处理多个值以及示例使用。

了解 PowerShell 中的 Parameter 函数

管理员可以使用参数函数 param() 为脚本创建参数。

在内部,参数函数包含一个或多个由变量定义的参数。

param ($myVariable)

但是,为确保参数只接受你需要的输入类型,最好通过在变量前用方括号 [] 将数据类型括起来来为参数分配数据类型。

param ([String]$myVariable)

值得注意的是,你还可以使用其他数据类型,如整数浮点数日期时间。我们还可以为它分配一个数据类型 Boolean,我们将进一步讨论。

在 PowerShell 中使用 Named 参数

在脚本中使用参数函数是通过命名参数。

当通过 named 参数将值传递给脚本或函数时,我们可以使用变量的名称作为参数的全名。

sample.ps1

param ([String]$name)
Write-Output $name

然后我们可以在执行 .ps1 文件时使用命名参数。

powershell.exe .\sample.ps1 -name "John"

在 PowerShell 中对参数使用默认值

我们可以通过在脚本内给参数一个值来为参数预先分配一个默认值。

此外,在不从命令行传递值的情况下执行脚本将采用脚本中定义的默认变量。

param ([String]$name = "John")

在 PowerShell 中使用 Switch 参数

我们可以为我们的脚本使用另一种参数类型:[switch] 数据类型定义的 switch 参数。

该参数主要用于我们之前讨论过的二进制或布尔值,表示 truefalse 的值。

param ([switch]$isEnabled)

在 PowerShell 中使用 Mandatory 参数

在我们的一些用例中,执行脚本时必须使用一个或多个参数是很常见的。

我们可以通过在参数块 [Parameter()] 中添加 Mandatory 属性来定义强制参数。

param (
    [Parameter(Mandatory)]
    [String] $servername
)

除非在命令行中提供了值,否则脚本环境将不允许脚本运行。

在 PowerShell 中使用未知数量的参数

通常,我发现使用命名参数远远优于仅从命令行读取参数。当你需要处理未知数量的参数时,读取参数会更容易。

让我们以驱动器号为例。也许我们需要一个脚本来检查机器中的一个或多个驱动器。

然后,我们可以使用命名参数并将其声明为 String 数据类型。

checkdrives.ps1

param([String]$myDrive)

foreach($drive in $myDrive){
    Write-Output "Processing drive $drive"
}

但是,将多个驱动器号传递到参数中,PowerShell 会将其视为一个对象。

powershell .\checkdrives.ps1 -myDrive C,D,E

输出:

Processing drive C D E

PowerShell 会将逗号替换为空格并将它们视为一个变量。不幸的是,这不起作用,因为我们需要在我们的用例中单独处理驱动器。

为了让我们的解释器在一个参数下捕获多个参数,我们需要将数据类型更改为带有方括号 [] 的数组。然后,在执行时,PowerShell 将处理单独列出的参数。

checkdrives.ps1

param([String[]]$myDrive)

foreach($drive in $myDrive){
    Write-Output "Processing drive $drive"
}

示例代码:

powershell .\checkdrives.ps1 -myDrive C,D,E

请记住用逗号分隔参数。

输出:

Processing drive C
Processing drive D
Processing drive E

在 PowerShell 中使用管道参数

大多数 PowerShell cmdlet 允许你使用管道 |传递数据的符号。当涉及到参数时,我们可以利用这一点。

例如,我们可以获取存储在管道中的最后一个值,并使用参数块的 ValueFromPipeline 属性将其传递给另一个 PowerShell 文件。

pipeline.ps1

param([parameter(ValueFromPipeline)]$pipedVar)

Write-Output $pipedVar

示例代码:

"This string is from the pipeline." | .\pipeline.ps1

输出:

This string is from the pipeline.

执行此技术为运行链接的 PowerShell 文件提供了许多机会。

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