Read-Host

从控制台读取一行输入。

语法

Read-Host
    [[-Prompt] <Object>]
    [-MaskInput]
    [<CommonParameters>]
Read-Host
    [[-Prompt] <Object>]
    [-AsSecureString]
    [<CommonParameters>]

说明

cmdlet Read-Host 从控制台读取一行输入, (stdin) 。 可使用它来提示用户输入数据。 由于可以将输入保存为安全字符串,因此可以使用此 cmdlet 提示用户输入安全数据,例如密码。

注意

Read-Host 最多可以接受 1022 个字符作为用户的输入。

示例

示例 1:将控制台输入保存到变量

此示例显示字符串“请输入你的年龄:”作为提示。 输入值并按 Enter 键时,该值存储在 变量中 $Age

$Age = Read-Host "Please enter your age"

示例 2:将控制台输入另存为安全字符串

此示例显示字符串“输入密码:”作为提示。 输入值时,) 控制台上会显示星号 (* 代替输入。 按 Enter 键时,该值将存储为变量中的 $pwd_secure_stringSecureString 对象。

$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 显示星号 (*) 代替用户键入为输入的字符。 使用此参数时,cmdlet 的 Read-Host 输出是 一个 SecureString 对象, (System.Security.SecureString) 。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaskInput

指示 cmdlet 显示星号 (*) 代替用户键入为输入的字符。 使用此参数时,cmdlet 的 Read-Host 输出为 String 对象。 这使你可以安全地提示输入以纯文本而不是 SecureString 形式返回的密码。

此参数已添加到 PowerShell 7.1 中。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Prompt

指定提示的文本。 键入一个字符串。 如果该字符串包含空格,请将其括在引号中。 PowerShell 会将冒号 (:) 追加到输入的文本。

Type:Object
Position:0
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

输入

None

不能通过管道将对象传递给此 cmdlet。

输出

String

默认情况下,此 cmdlet 返回字符串。

SecureString

使用 AsSecureString 参数时,此 cmdlet 返回 SecureString

备注

此 cmdlet 仅从主机进程的 stdin 流进行读取。 通常,stdin 流连接到主机的键盘。