HOWTO · PowerShell
PowerShell 参数上的多个值
本文将讨论参数函数、我们可以在参数中定义的不同类型的变量、如何在单个参数中处理多个值及其示例用法。
本页内容
我们使用 PowerShell 参数函数 param 处理参数。它是任何脚本的基本组成部分,使开发人员能够在运行时提供输入。
此外,如果脚本的行为需要更改,参数可以提供一个机会来实现这一点,而无需更改底层代码。
本文将讨论 parameter 函数、我们可以定义的不同变量、在单个参数中处理多个值以及示例用法。
理解 PowerShell 中的 Parameter 函数
管理员可以使用参数函数 param() 为脚本创建参数。
在内部,参数函数包含一个或多个由变量定义的参数。
param ($myVariable)
但是,为了确保参数仅接受所需的输入类型,最好通过在变量前用方括号 [] 括住数据类型来为参数分配数据类型。
param ([String]$myVariable)
值得注意的是,您还可以使用其他数据类型,如 integers、float 和 DateTime。我们还可以将其分配为数据类型 Boolean,我们将进一步讨论。
在 PowerShell 中使用 命名 参数
在脚本中使用参数函数是通过 命名 参数实现的。
通过 命名 参数将值传递给脚本或函数时,我们可以使用变量的名称作为参数的完整名称。
sample.ps1:
param ([String]$name)
Write-Output $name
然后,我们可以在执行 .ps1 文件时使用命名参数。
powershell.exe .\sample.ps1 -name "John"
在 PowerShell 中对参数使用默认值
我们可以通过在脚本中给参数赋值来预先分配一个默认值。
此外,执行脚本而不从命令行传递值将采用脚本内定义的默认变量。
param ([String]$name = "John")
在 PowerShell 中使用 Switch 参数
我们可以为我们的脚本使用另一种参数类型:由 [switch] 数据类型定义的 switch 参数。
此参数主要用于我们之前讨论的二进制或布尔值,表示值为 true 或 false。
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 文件打开了许多机会。