Read-Host

Считывает строку ввода из консоли.

Синтаксис

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

Описание

Командлет Read-Host считывает строку входных данных из консоли (stdin). Его можно использовать для запроса ввода данных пользователем. Так как входные данные можно сохранить в виде безопасной строки, этот командлет можно использовать для запроса пользователей на получение безопасных данных, таких как пароли.

Примечание.

Read-Host имеет ограничение в 1022 символов, которые он может принимать в качестве входных данных от пользователя.

Примеры

Пример 1. Сохранение входных данных консоли в переменную

В этом примере отображается строка "Введите возраст:" в качестве запроса. При вводе значения и нажатии клавиши ВВОД значение сохраняется в переменной $Age .

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

Пример 2. Сохранение входных данных консоли в виде безопасной строки

В этом примере строка "Ввод пароля:" отображается в виде запроса. При вводе значения звездочки (*) отображаются на консоли вместо входных данных. При нажатии клавиши ВВОД значение сохраняется как объект SecureString в переменной $pwd_secure_string .

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

Пример 3. Маскирование входных данных и в виде строки обычного текста

В этом примере строка "Ввод пароля:" отображается в виде запроса. При вводе значения звездочки (*) отображаются на консоли вместо входных данных. При нажатии клавиши ВВОД значение сохраняется в виде объекта строки с открытым текстом в переменной$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

Указывает, что командлет отображает звездочки (*) вместо символов, которые пользователь вводит в качестве входных данных. При использовании этого параметра выходные данные командлета Read-Host — это объект SecureString (System.Security.SecureString).

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

-MaskInput

Указывает, что командлет отображает звездочки (*) вместо символов, которые пользователь вводит в качестве входных данных. При использовании этого параметра выходные данные командлета 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

Невозможно передать объекты в этот командлет.

Выходные данные

String

По умолчанию этот командлет возвращает строку.

SecureString

При использовании параметра AsSecureString этот командлет возвращает SecureString.

Примечания

Этот командлет считывается только из потока stdin процесса узла. Обычно поток stdin подключен к клавиатуре консоли узла.