在 PowerShell 中如何提示用戶輸入

  1. 使用 Read-Host 提示 PowerShell 中的用戶輸入
  2. 使用 Mandatory 參數提示 PowerShell 中的用戶輸入
  3. 使用 PromptForChoice 提示 PowerShell 中的用戶輸入
  4. 結論
在 PowerShell 中如何提示用戶輸入

在 PowerShell 腳本中,與用戶互動以收集輸入是一個常見的需求。無論是為了自定義、決策還是導航,提示用戶輸入都是必不可少的。

本文探討了在 PowerShell 中提示用戶輸入的各種方法,包括 Read-Host 方法、Mandatory 參數方法和 PromptForChoice 方法。每種方法都提供了獨特的能力,適用於不同場景,增強了 PowerShell 腳本的互動性和可用性。

使用 Read-Host 提示 PowerShell 中的用戶輸入

Read-Host Cmdlet 提示用戶輸入並從控制台讀取一行輸入。Read-Host 只能接受最多 1022 個字符的用戶輸入。

-Prompt 參數用來指定一段文本,以提供有關何種輸入的信息。它會在您輸入的文本後添加冒號 :

示例:

Read-Host -Prompt "Enter your name"

在這個示例中,當我們使用 Read-Host 時,它會提示用戶輸入消息 "Enter your name",然後暫停腳本執行,等待輸入。在用戶輸入其名稱並按下 Enter 鍵後,腳本將繼續執行。

然而,由於我們沒有在變量中捕獲或存儲輸入,也沒有根據收到的輸入執行後續操作,這個例子主要演示了 Read-Host 的基本功能,而未對用戶輸入進行進一步處理。

輸出:

在 PowerShell 中提示用戶輸入 - 輸出 1

Read-Host 暫停執行並接收輸入。當用戶在提示中輸入值時,它返回相同的值。

它不接受來自 PowerShell 管道的輸入。這是另一個示例:

$name = Read-Host "Enter your name"
Write-Output "Hello, $name!"

在這個示例中,我們使用 Read-Host 提示用戶輸入其名稱。字符串 "Enter your name" 作為提示消息。

用戶的輸入被存儲在 $name 變量中。然後,我們使用 Write-Output 顯示一條個性化的問候消息,結合用戶輸入的值。

通過 Read-Host Cmdlet,我們可以將輸入保存為安全字符串,這使得它成為收集如密碼等敏感信息的寶貴工具。此 Cmdlet 使我們能夠提示用戶提供安全數據,同時確保保密性和安全性。

輸出:

在 PowerShell 中提示用戶輸入 - 輸出 2

參數 -AsSecureString 會將用戶輸入的字符顯示為星號 *。使用此參數,Read-Host 的輸出是一個 System.Security.SecureString 對象。

Read-Host "Enter password" -AsSecureString

在這個示例中,我們使用 Read-Host-AsSecureString 參數來安全地提示用戶輸入密碼。提示消息 "Enter password" 顯示給用戶。

當用戶輸入密碼時,它在屏幕上會被遮蔽,確保保密性。然後,該密碼以安全字符串的形式存儲在變量 $password 中,準備進行進一步處理或驗證。

輸出:

在 PowerShell 中提示用戶輸入 - 輸出 3

使用 Mandatory 參數提示 PowerShell 中的用戶輸入

在 PowerShell 中,Mandatory 參數方法是一種強大的提示用戶輸入的方式,同時確保某些參數對於腳本執行是必需的。通過將參數標記為 Mandatory,腳本作者可以強制提供必要的輸入值,從而增強腳本的可靠性和可用性。

以下是一個函數 Name 的示例,在運行時會要求用戶輸入。

示例:

function Name {
    param(
        [Parameter(Mandatory)]
        [string]$name
    )
    Write-Output "Your name is $name."
}
Name

在這個示例中,我們定義了一個名為 Name 的 PowerShell 函數,只有一個名為 name 的參數。透過指定 [Parameter(Mandatory)],我們確保用戶在調用該函數時必須為 name 參數提供一個值。

該函數然後使用 Write-Output 輸出包含給定名稱的消息。

輸出:

在 PowerShell 中提示用戶輸入 - 輸出 4

使用 PromptForChoice 提示 PowerShell 中的用戶輸入

在 PowerShell 中,PromptForChoice 方法提供了一種結構化的方式來提示用戶進行選擇並接收他們的選擇作為輸入。當向用戶呈現菜單或選擇列表時,此方法特別有用,能夠提供更具互動性和用戶友好的腳本執行體驗。

示例:

$choicePrompt = "Choose an option:"
$choices = [System.Management.Automation.Host.ChoiceDescription[]]@(
    "&Option 1",
    "&Option 2",
    "&Option 3"
)
$defaultChoice = 0
$result = $host.UI.PromptForChoice("Title", $choicePrompt, $choices, $defaultChoice)
Write-Output "You selected $($choices[$result].Label)"

在這個示例中,我們定義了一條提示消息和一系列選擇,並指定默認選擇索引。然後我們使用 PromptForChoice 方法來顯示帶有所提供選擇的提示對話框。

用戶的選擇被存儲在 $result 變量中,我們使用它來檢索所選擇的選項標籤並顯示給用戶。

輸出:

在 PowerShell 中提示用戶輸入 - 輸出 5

結論

在 PowerShell 中提示用戶輸入對於創建互動性和用戶友好的腳本至關重要。通過利用如 Read-HostMandatory 參數和 PromptForChoice 等方法,腳本作者可以有效地收集用戶輸入,同時確保可靠性和安全性。

無論是收集簡單的文本輸入、強制執行必需的參數還是向用戶呈現結構化的選擇集,這些方法都使腳本作者能夠創建強大而多樣化的自動化解決方案。通過理解和利用這些技術,PowerShell 腳本作者可以提升其腳本的可用性和有效性,以滿足用戶和管理者的多元需求。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: Rohan Timalsina
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website