Read-Host

从控制台读取一行输入。

语法

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

说明

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

注意

Read-Host 可以接受的用户输入字符数上限为 1022 个字符。

示例

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

此示例显示字符串“Please enter your age:”作为提示。 当输入某个值并按 Enter 键时,该值将存储到 $Age 变量中。

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

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

此示例显示字符串“Enter a Password:”作为提示。 当输入某个值时,控制台中将显示星号 (*) 而非该输入。 按 Enter 键时,该值将作为 SecureString 对象存储在 $pwd_secure_string 变量中。

$pwd_secure_string = Read-Host "Enter a Password" -AsSecureString

示例 3:遮蔽输入并将其存储为纯文本字符串

此示例显示字符串“Enter a Password:”作为提示。 当输入某个值时,控制台中将显示星号 (*) 而非该输入。 按 Enter 键时,该值将作为 String 对象存储在 $pwd_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)。

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

-MaskInput

指示 cmdlet 显示星号 (*) 作为输入,而非显示用户键入的字符。 使用此参数时,Read-Host cmdlet 的输出是一个 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 流连接到主机控制台的键盘。