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