Read-Host
从控制台读取一行输入。
语法
Read-Host
[[-Prompt] <Object>]
[-MaskInput]
[<CommonParameters>]
Read-Host
[[-Prompt] <Object>]
[-AsSecureString]
[<CommonParameters>]
说明
Read-Host
cmdlet 从控制台(stdin)读取一行输入。 可以使用它提示用户输入。 由于可以将输入保存为安全字符串,因此可以使用此 cmdlet 提示用户输入安全数据,例如密码。
注意
Read-Host
限制为 1022 个字符,可以接受该字符作为用户的输入。
示例
示例 1:将控制台输入保存到变量
本示例显示字符串“请输入你的年龄:”作为提示。 输入值并按下 Enter 键时,该值存储在 $Age
变量中。
$Age = Read-Host "Please enter your age"
示例 2:将控制台输入另存为安全字符串
本示例以提示显示字符串“输入密码:”。 当输入值时,星号(*
)显示在主机上代替输入。 按下 Enter 键后,该值将作为 SecureString 对象存储在 $pwd_secure_string
变量中。
$pwd_secure_string = Read-Host "Enter a Password" -AsSecureString
示例 3:掩码输入和作为纯文本字符串
本示例以提示显示字符串“输入密码:”。 当输入值时,星号(*
)显示在主机上代替输入。 按下 Enter 键时,该值以纯文本形式存储在 $pwd_string
变量中的 String 对象。
$pwd_string = Read-Host "Enter a Password" -MaskInput
示例 4:规范化输入
此示例提示用户输入以分号分隔的城市列表。 它显示用户键入的字符串值。 在此示例中,用户添加了一些条目之间的空格。 这可能会导致脚本后面出现错误,代码需要确切名称。
此示例演示如何将输入字符串转换为条目数组,而无需任何额外的空格。
$prompt = @(
'List the cities you want weather information for.'
'When specifying multiple cities, separate them with a semi-colon, like:'
"'New York; Osan; Koforidua'"
) -join ' '
$cities = Read-Host $prompt
"Input cities string: `n`t'$cities'"
$splitCities = $cities -split ';'
"Split cities array:"
$splitCities | ForEach-Object -Process { "`t'$_'" }
$normalizedCities = $splitCities | ForEach-Object -Process { $_.Trim() }
"Normalized split cities array:"
$normalizedCities | ForEach-Object -Process { "`t'$_'" }
Input cities string:
' New York; Osan ;Koforidua '
Split cities array:
' New York'
' Osan '
'Koforidua '
Normalized split cities array:
'New York'
'Osan'
'Koforidua'
该示例使用 -split
运算符将输入字符串转换为字符串数组。 数组中的每个字符串都包含不同城市的名称。 但是,拆分字符串包括额外的空格。
Trim()
方法从每个字符串中删除前导空格和尾随空格。
参数
-AsSecureString
指示 cmdlet 显示星号(*
),以代替用户键入为输入的字符。 使用此参数时,Read-Host
cmdlet 的输出是 SecureString 对象(System.Security.SecureString)。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-MaskInput
指示 cmdlet 显示星号(*
),以代替用户键入为输入的字符。 使用此参数时,Read-Host
cmdlet 的输出是 String 对象。
这样就可以安全地提示输入以纯文本形式返回的密码,而不是 SecureString。
此参数已在 PowerShell 7.1 中添加。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Prompt
指定提示的文本。 键入字符串。 如果字符串包含空格,请用引号将其括起来。 PowerShell 将冒号(:
)追加到输入的文本。
类型: | Object |
Position: | 0 |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
输入
None
不能通过管道将对象传递给此 cmdlet。
输出
默认情况下,此 cmdlet 返回一个字符串。
使用 AsSecureString 参数时,此 cmdlet 返回 SecureString。
备注
此 cmdlet 仅从主机进程的 stdin 流中读取。 通常,stdin 流连接到主机主机的键盘。