Поделиться через


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. Сохранение входных данных консоли в виде безопасной строки

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

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

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

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

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