使用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 控制台内部使用 Read-Host 并使用 Prompt 参数执行,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 提供了一个称为安全字符串的概念,它是一个简单的字符串,经过了加密。

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 文档

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