在 Windows PowerShell 中獲取命令列引數

Marion Paul Kenneth Mendoza 2023年1月30日
  1. 在 PowerShell 指令碼中定義引數
  2. PowerShell 指令碼中的命名引數
  3. 為 PowerShell 指令碼中的引數分配預設值
  4. PowerShell 指令碼中的切換引數
  5. PowerShell 指令碼中的強制引數
在 Windows PowerShell 中獲取命令列引數

我們使用稱為 param() 的 Windows PowerShell 引數函式處理引數。Windows PowerShell 引數函式是任何指令碼的基本元件。一個引數是開發人員如何讓指令碼使用者在執行時提供輸入。

在本文中,你將學習如何使用引數函式建立指令碼、使用它們以及構建引數的一些最佳實踐。

在 PowerShell 指令碼中定義引數

管理員可以使用引數函式 param() 為指令碼和函式建立引數。一個函式包含一個或多個由變數定義的引數。

Hello_World.ps1

param(
     $message
)

但是,為了確保引數只接受你需要的輸入型別,最佳實踐規定使用引數塊 [Parameter()] 為引數分配資料型別,並在變數前用方括號 [] 括住資料型別。

Hello_World.ps1

param(
    [Parameter()]
    [String]$message
)

在上面的示例 Hello_World.ps1 中,變數 message 僅在給定值具有資料型別 String 時才接受傳遞的值。

PowerShell 指令碼中的命名引數

在指令碼中使用引數函式的一種方法是通過引數名稱——這種方法稱為命名引數。通過命名引數呼叫指令碼或函式時,我們使用變數名作為引數的全名。

在這個例子中,我們建立了一個 Hello_World.ps1 並在引數函式中定義了變數。請記住,我們可以在引數函式中放置一個或多個變數。

Hello_World.ps1

param(
    [Parameter()]
    [String]$message,
    [String]$emotion
)

Write-Output $message
Write-Output "I am $emotion"

然後,我們可以在執行 .ps1 檔案時使用命名引數作為引數。

.\Hello_World.ps1 -message 'Hello World!' -emotion 'happy'

輸出:

Hello World!
I am happy

為 PowerShell 指令碼中的引數分配預設值

我們可以通過在指令碼中給引數一個值來為引數預分配一個值。然後,在不從執行行傳遞值的情況下執行指令碼將採用指令碼內定義的變數的預設值。

param(
    [Parameter()]
    [String]$message = "Hello World",
    [String]$emotion = "happy"
)

Write-Output $message
Write-Output "I am $emotion"
.\Hello_World.ps1

輸出:

Hello World!
I am happy

PowerShell 指令碼中的切換引數

我們可以使用的另一個引數是 [switch] 資料型別定義的 switch 引數。switch 引數用於二進位制或布林值以指示 truefalse

Hello_World.ps1

param(
    [Parameter()]
    [String]$message,
    [String]$emotion,
    [Switch]$display
)
if($display){
    Write-Output $message
    Write-Output "I am $emotion"
}else{
    Write-Output "User denied confirmation."
}

我們可以使用下面的語法使用 script 引數呼叫我們的指令碼。

.\Hello_World.ps1 -message 'Hello World!' -emotion 'happy' -display:$false

輸出:

User denied confirmation.

PowerShell 指令碼中的強制引數

執行指令碼時必須使用一個或多個引數是很常見的。我們可以通過在引數塊 [Parameter()] 中新增 Mandatory 屬性來使引數成為強制性引數。

Hello_World.ps1:

param(
    [Parameter(Mandatory)]
    [String]$message,
    [String]$emotion,
    [Switch]$display
)
if($display){
    Write-Output $message
    Write-Output "I am $emotion"
}else{
    Write-Output "User denied confirmation."
}

執行 Hello_World.ps1 時,Windows PowerShell 將不允許指令碼執行並提示你輸入值。

.\Hello_World.ps1

輸出:

cmdlet hello_world.ps1 at command pipeline position 1
Supply values for the following parameters:
message:
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