HOWTO · PowerShell

PowerShell 參數的多個值

本文將討論參數函數、我們可以在參數中定義的不同類型的變數、如何在單個參數中處理多個值及其示範用法。

本頁內容

我們使用 PowerShell 參數函數 param 處理參數。這是任何腳本的基本組件,使開發人員能夠在運行時提供輸入。

此外,如果腳本的行為需要改變,參數可以提供一個機會來做到這一點,而無需更改底層代碼。

本文將討論 parameter 函數、我們可以定義的不同變量、在單個參數中處理多個值以及示例用法。

理解 PowerShell 中的 Parameter 函數

管理員可以使用參數函數 param() 為腳本創建參數。

在其內部,參數函數包含一個或多個由變量定義的參數。

param ($myVariable)

不過,為了確保參數僅接受所需的輸入類型,最好在變量前用方括號 [] 將數據類型括起來。

param ([String]$myVariable)

值得注意的是,您還可以使用其他數據類型,例如 integers、float 和 DateTime。我們還可以將其分配為一個數據類型 Boolean,我們將進一步討論。

在 PowerShell 中使用 Named 參數

在腳本中使用參數函數是通過 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 參數。

這個參數主要用於我們之前討論的二進制或布爾值,表示 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 文件開闢許多機會。