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 文件開闢許多機會。