Read-Hostの使い方:ユーザーからのキーボード入力を受け取る

広告

Read-Host コマンドレットを使用すると、ユーザーからのキーボード入力を受け取ることができます。 PowerShell スクリプトで、ユーザーに入力してもらった値を利用したい場合や、確認処理を行いたい場合などに使用します。ここでは PowerShell における Read-Host コマンドレットの使い方について解説します。

Read-Hostコマンドレットの書式

Read-Host コマンドレットは、ユーザーからのキーボード入力を受け取るためのコマンドレットです。 Read-Host コマンドレットの書式は次の通りです。

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

Read-Host コマンドレットを実行すると、メッセージを画面に表示して、ユーザーからの入力待ちとなります。

$ans = Read-Host -Prompt 画面に表示するメッセージ

-Prompt オプションの値には、ユーザーに入力を促すメッセージを指定してください。 -Prompt は省略可能なので、通常は次のように実行します。

$ans = Read-Host 画面に表示するメッセージ

ユーザーが入力を行い、最後に Enter キーを押すと、入力が完了します。入力された値は変数に格納することができます。なお、Read-Host で入力された値はすべて文字列として扱われます。

それでは実際に試してみます。次のように実行してください。

$ans = Read-Host "名前を入力してください"
Write-Host "入力された名前は $ans です。"

メッセージが表示されて入力待ちとなります。

Read-Hostコマンドレットの使い方(1)

入力を行ってから、最後に Enter キーを押します。

Read-Hostコマンドレットの使い方(2)

入力が完了すると、入力された値が文字列として変数に格納されます。今回は変数の値を再び画面に表示しています。

Read-Hostコマンドレットの使い方(3)

このように Read-Host を使用することで、 PowerShell スクリプトにユーザーからの入力を行う処理を追加できます。

入力された値を数値として扱う

Read-Host を使って入力された値は、文字列として扱われます。そのため、入力された値を数値として使用したい場合には型変換を行う必要があります。整数に型変換する場合は [int] 、浮動小数点数に型変換する場合は [double] を使用します。

$result = [int]文字列
$result = [double]文字列

それでは実際に試してみます。次のように実行してください。

$input = Read-Host "金額を入力してください"
$result = [double]$input * 1.1
Write-Host "税込みの金額は $result です。"

メッセージが表示されて入力待ちとなります。

Read-Hostコマンドレットの使い方(4)

数値の入力を行ってから、最後に Enter キーを押します。

Read-Hostコマンドレットの使い方(5)

入力が完了すると、入力された値を数値に変換したあとで、 1.1 倍した値を再び画面に表示しています。

Read-Hostコマンドレットの使い方(6)

Read-Host を使って入力してもらった値を数値として処理することができました。

なお、入力された値が数値かどうかを確認する場合、例えば次のように行います。

$input = Read-Host "金額を入力してください"

if ($input -as [double]) {
    $result = [double]$input * 1.1
    Write-Host "1.1倍した値は: $result"
} else {
    Write-Host "有効な数値を入力してください。" -ForegroundColor Red
}

入力された値をマスク表示にする

Read-Host を実行したときに、ユーザーが入力した値はそのまま表示されてしまいます。パスワードなど入力された値をそのまま表示したくない場合は、 -MaskInput オプションを使用することでマスク表示することができます。

$ans = Read-Host 画面に表示するメッセージ -MaskInput

-MaskInput オプションは、入力を隠して表示するだけで、取得される値は通常の文字列です。

それでは実際に試してみます。次のように実行してください。

$ans = Read-Host "ニックネームを入力してください" -MaskInput
Write-Host "入力された名前は $ans です。"

メッセージが表示されて入力待ちとなります。

Read-Hostコマンドレットの使い方(7)

ここでユーザーが入力を行うと、入力した値がマスク表示されます。

Read-Hostコマンドレットの使い方(8)

入力が完了すると、入力された値が文字列として変数に格納されます。今回は変数の値を再び画面に表示しています。

Read-Hostコマンドレットの使い方(9)

このように入力を行うときにはマスク表示されますが、取得した値は通常と同じように文字列として処理することができます。

-AsSecureStringオプション

なお Read-Host には同じようにマスク表示するオプションとして -AsSecureString オプションも用意されています。

$ans = Read-Host 画面に表示するメッセージ -AsSecureString

ユーザーが入力した値が画面にマスク表示される点は -MaskInput オプションと同じですが、入力された値は文字列ではなくセキュリティで保護された文字列として取得します。そのため、取得した値を文字列として処理するには、セキュリティで保護された文字列を通常の文字列に変換する必要があります。

PowerShell 7 以降であれば、 ConvertFrom-SecureString コマンドレットを使って変換することができます。

$ans = Read-Host "パスワードを入力してください" -AsSecureString
$plainAns = ConvertFrom-SecureString -SecureString $ans -AsPlainText

-AsPlainText オプションが用意されたのが PowerShell 7 以降のため、それ以前の PowerShell ではこの方法は使用できません。

-MaskInput は表示だけを隠すのに対し、-AsSecureString は値自体も保護された形式で取得します。

-- --

PowerShell における Read-Host コマンドレットの使い方について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。