Read-Hostを使用した対話型PowerShellスクリプト:完全なガイド

Read-Host PowerShellコマンドレットを使用すると、スクリプトユーザーからの入力をインタラクティブに要求することができます。実際の世界でのRead-Host PowerShellコマンドレットの使用方法を見てみましょう。

Read-Hostを使用して入力を要求する

Read-Hostコマンドレットは、PowerShellスクリプトで2つの機能を実行します。実行を一時停止し、入力を受け取ります。それだけです。Read-Hostは単純なコマンドレットですが、スクリプトユーザーから情報を取得する必要がある場合に便利です。

基本的に、Read-Hostコマンドレットは単にPromptパラメータの使用を必要とします。このPromptパラメータを使用すると、スクリプトユーザーに何を入力するかを示すことができます。たとえば、スクリプトがサーバー名を必要とする場合、スクリプトが実行されるときにユーザーにそれを入力するようにRead-Hostを使用することを選択するかもしれません。

以下の例では、PowerShellコンソール自体でRead-Hostを実行し、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には「セキュアストリング」という概念があります。これは、暗号化された単純な文字列です。

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/