PowerShell でユーザー入力を促す方法
-
PowerShell でユーザー入力を促すために
Read-Host
を使用する -
PowerShell でユーザー入力を促すために
Mandatory
パラメータを使用する -
PowerShell でユーザー入力を促すために
PromptForChoice
を使用する - 結論

PowerShell スクリプティングでは、ユーザーとの対話を通じて入力を収集することは一般的な要件です。カスタマイズ、意思決定、またはナビゲーションのために、ユーザーに入力を促すことは不可欠です。
この記事では、PowerShell におけるユーザー入力のプロンプト方法について、Read-Host
メソッド、Mandatory
パラメータメソッド、および PromptForChoice
メソッドを含むさまざまな方法を探ります。各メソッドは独自の機能を提供し、異なるシナリオに適しており、PowerShell スクリプトの対話性と使いやすさを向上させます。
PowerShell でユーザー入力を促すために Read-Host
を使用する
Read-Host
コマンドレットはユーザー入力を促し、コンソールからの 1 行の入力を読み取ります。Read-Host
はユーザーから 1022
文字のみを入力として受け付けることができます。
-Prompt
パラメータは、何を入力するかについての情報を提供するためのテキストを指定するために使用されます。入力したテキストにコロン:
を付加します。
例:
Read-Host -Prompt "Enter your name"
この例では、Read-Host
を利用すると、ユーザーには「Enter your name」というメッセージが表示され、スクリプトの実行が一時停止して入力を待ちます。ユーザーが名前を入力してEnterを押すと、スクリプトは実行を続けます。
ただし、この例では入力を変数にキャプチャしたり保存したりしておらず、受け取った入力に基づいてその後のアクションを実行していないため、Read-Host
の基本機能を示すことが主な目的となっています。
出力:
Read-Host
は実行を一時停止して入力を受け取ります。ユーザーがプロンプトで値を入力すると、その値が返されます。
PowerShell パイプラインからの入力は受け付けません。別の例を示します。
$name = Read-Host "Enter your name"
Write-Output "Hello, $name!"
この例では、Read-Host
を使用して、ユーザーに名前を入力するよう促します。文字列「Enter your name」がプロンプトメッセージとして機能します。
ユーザーの入力は $name
変数に保存されます。次に、Write-Output
を使用して、ユーザーが入力した値を組み込んだ個別の挨拶メッセージを表示します。
Read-Host
コマンドレットを使用すると、入力をセキュアな文字列として保存できるため、パスワードなどの機密情報を収集するための非常に便利なツールです。このコマンドレットを使用すると、ユーザーにセキュアなデータを促し、機密性とセキュリティを確保できます。
出力:
パラメータ -AsSecureString
は、ユーザーが入力する文字の代わりにアスタリスク*
を表示します。このパラメータを使用すると、Read-Host
の出力は System.Security.SecureString
オブジェクトになります。
Read-Host "Enter password" -AsSecureString
この例では、-AsSecureString
パラメータを使用して Read-Host
を使用し、ユーザーに安全にパスワードを入力するよう促します。プロンプトメッセージ「Enter password」がユーザーに表示されます。
ユーザーがパスワードを入力すると、画面上でマスクされ、機密性が確保されます。パスワードは次に処理や検証の準備のために $password
変数にセキュアな文字列として保存されます。
出力:
PowerShell でユーザー入力を促すために Mandatory
パラメータを使用する
PowerShell では、Mandatory
パラメータメソッドは、スクリプトの実行に必要な特定のパラメータがユーザーによって提供されることを確認しつつ、ユーザーに入力を促すための強力な方法です。パラメータを Mandatory
としてマークすることで、スクリプト作成者は重要な入力値の提供を強制でき、スクリプトの信頼性と使用性を向上させます。
ここに、実行時にユーザー入力を求める Name
関数の例があります。
例:
function Name {
param(
[Parameter(Mandatory)]
[string]$name
)
Write-Output "Your name is $name."
}
Name
この例では、name
という単一のパラメータを持つ PowerShell 関数 Name
を定義します。[Parameter(Mandatory)]を指定することにより、関数を呼び出す際にユーザーが name
パラメータに値を提供しなければならないことを保証します。
その後、関数は Write-Output
を使用して提供された名前を組み込んだメッセージを出力します。
出力:
PowerShell でユーザー入力を促すために PromptForChoice
を使用する
PowerShell では、PromptForChoice
メソッドは、ユーザーにオプションのセットを提示し、その選択を入力として受け取るための構造化された方法を提供します。このメソッドは、ユーザーにメニューや選択肢のリストを提示する際に特に便利で、よりインタラクティブかつユーザーフレンドリーなスクリプト実行体験を提供します。
例:
$choicePrompt = "Choose an option:"
$choices = [System.Management.Automation.Host.ChoiceDescription[]]@(
"&Option 1",
"&Option 2",
"&Option 3"
)
$defaultChoice = 0
$result = $host.UI.PromptForChoice("Title", $choicePrompt, $choices, $defaultChoice)
Write-Output "You selected $($choices[$result].Label)"
この例では、プロンプトメッセージと選択肢の配列を定義し、デフォルトの選択インデックスを指定します。次に、PromptForChoice
メソッドを使用して、提供された選択肢でプロンプトダイアログボックスを表示します。
ユーザーの選択は $result
変数に保存され、選択されたオプションのラベルを取得してユーザーに表示するために使用されます。
出力:
結論
PowerShell におけるユーザー入力の促しは、インタラクティブでユーザーフレンドリーなスクリプトを作成する上で重要です。Read-Host
、Mandatory
パラメータ、PromptForChoice
などの方法を利用することで、スクリプト作成者はユーザー入力を効率的に収集し、信頼性とセキュリティを確保できます。
簡単なテキスト入力の収集、必須パラメータの強制、またはユーザーに構造化された選択肢のセットを提示するにせよ、これらの方法はスクリプト作成者が堅牢で多様な自動化ソリューションを作成する力を与えます。これらの技術を理解し活用することで、PowerShell スクリプト作成者はスクリプトの使いやすさと有効性を向上させ、ユーザーや管理者の多様なニーズに応えることができます。