Интерактивные сценарии PowerShell с Read-Host: Полное руководство

Используя командлет PowerShell Read-Host, вы можете интерактивно запросить ввод от пользователя сценария. Давайте рассмотрим некоторые приложения в реальном мире, как мы можем использовать командлет PowerShell Read-Host.

Запрос ввода с помощью Read-Host

Командлет Read-Host выполняет две функции в сценарии PowerShell: он приостанавливает выполнение и получает ввод. Вот и всё. Read-Host – это простая команда, но полезная, когда нужно получить информацию от пользователя сценария.

На его самом базовом уровне командлет Read-Host просто требует использования параметра Prompt. Этот параметр Prompt позволяет дать пользователю сценария какое-то представление о том, что вводить. Например, если вашему сценарию требуется имя сервера, вы можете использовать Read-Host, чтобы попросить пользователя ввести его при запуске сценария.

Вы можете видеть ниже, что при выполнении Read-Host в самой консоли PowerShell с использованием параметра Prompt, PowerShell приостанавливает все выполнение и отображает мое приглашение, предоставляя пользователю пояснение о том, что мы хотим получить.

Read-Host PowerShell prompt

Давайте внедрим это в сценарий. Когда пользователь вводит информацию при запросе, Read-Host возвращает эту информацию обратно в ваш код. Вы легко можете захватить эту информацию, присвоив вывод переменной. Возможно, мне хотелось бы запросить имя сервера, а затем что-то сделать с этим именем сервера. В противном случае я бы хотел отправить предупреждение пользователю, давая им понять, что мне действительно очень нужно это имя сервера.

$serverName = Read-Host -Prompt 'Server name to process'
if ($serverName) {
    Write-Host "We can now use the server name [$serverName] in our code"
} else {
    Write-Warning -Message "No server name input."
}

Используя простую конструкцию if/then, я могу быть уверенным, что пользователь вводит имя сервера. После этого я могу захватить его и выполнить определенные действия, в противном случае отправить предупреждение.

Warning when no input

Запрос паролей

Вы должны знать, что хранить пароли в открытом виде в ваших скриптах – это не лучшая идея. Точно так же плохо хранить пароли в открытом виде в памяти. Для обхода этой проблемы в PowerShell существует концепция secure string, который представляет собой простую строку, зашифрованную.

A secure string can any kind of sensitive information; a password is a great example. What does this have to do with Read-Host? The Read-Host cmdlet has an AsSecureString parameter which allows the user to not only store the output as a secure string but also to show asterisk while typing to hide your secret from prying eyes!

Предположим, у меня есть глубокий секрет, который я не хочу, чтобы кто-то узнал, но мне нужно передать этот пароль какому-то программному обеспечению. Как видно ниже, когда я не использую AsSecureString, вы меня раскрываете! Однако, если я использую AsSecureString, мой секрет в безопасности, так как каждый введенный мной символ заменяется звездочкой, и вывод сохраняется как зашифрованная строка, а не строка в открытом виде.

Accepting secure input with Read-Host

Чтобы ознакомиться с документацией по Read-Host, посетите Microsoft Docs.

Source:
https://adamtheautomator.com/read-host/