使用 Read-Host 進行交互式 PowerShell 腳本: 完整指南

使用Read-Host PowerShell cmdlet,您可以与脚本用户进行交互式提示输入。让我们看看如何在实际应用中使用Read-Host PowerShell cmdlet。

使用Read-Host进行输入提示

Read-Host cmdlet在PowerShell脚本中执行两个功能;暂停执行和接收输入。就是这样。Read-Host是一个简单的cmdlet,但在需要从脚本用户那里获取信息时非常有用。

在最基本的情况下,Read-Host cmdlet只需要使用Prompt参数。这个Prompt参数可以让您向脚本用户提供某种输入指示。例如,如果您的脚本需要一个服务器名称,您可以选择使用Read-Host在运行脚本时提示用户输入。

您可以看到下面的示例,通过在PowerShell控制台中使用Prompt参数执行Read-Host,PowerShell会停止所有执行并显示我的提示消息,向用户解释我们需要什么。

Read-Host PowerShell prompt

让我们将此功能纳入脚本中。每当用户在提示处输入信息时,Read-Host将该信息返回给您的代码。您可以通过将输出分配给变量轻松捕获此信息。也许我想要询问一个服务器名称,然后对该服务器名称执行某些操作。否则,我希望向用户发送警告,让他们知道我真的非常需要那个服务器名称。

$serverName = Read-Host -Prompt 'Server name to process'
if ($serverName) {
    Write-Host "We can now use the server name [$serverName] in our code"
} else {
    Write-Warning -Message "No server name input."
}

使用簡單的if/then構造,我可以確保用戶輸入了服務器名稱。一旦他們這樣做了,我就可以捕獲它並對其進行一些操作;否則,發送一個警告消息。

Warning when no input

請求密碼

你應該知道,在腳本中明文存儲密碼並不是一個好主意。同樣地,在內存中明文存儲密碼也不是一個好主意。為了解決這個問題,PowerShell有一個叫做”SecureString”的概念,它是一個簡單的加密字符串。

A secure string can any kind of sensitive information; a password is a great example. What does this have to do with Read-Host? The Read-Host cmdlet has an AsSecureString parameter which allows the user to not only store the output as a secure string but also to show asterisk while typing to hide your secret from prying eyes!

假設我有一個深藏不露的秘密,我不希望任何人知道,但我需要將這個密碼傳遞給某種軟件。如下所示,當我不使用AsSecureString時,你就能看出我的秘密!然而,如果我使用AsSecureString,我的秘密就是安全的,因為我輸入的每個字符都被替換為星號,輸出被保存為安全字符串而不是明文字符串。

Accepting secure input with Read-Host

要查看Read-Host的文檔,請參考Microsoft Docs

Source:
https://adamtheautomator.com/read-host/