PowerShell でユーザー入力を促す方法

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

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 の基本機能を示すことが主な目的となっています。

出力:

PowerShell でユーザー入力を促す - 出力 1

Read-Host は実行を一時停止して入力を受け取ります。ユーザーがプロンプトで値を入力すると、その値が返されます。

PowerShell パイプラインからの入力は受け付けません。別の例を示します。

$name = Read-Host "Enter your name"
Write-Output "Hello, $name!"

この例では、Read-Host を使用して、ユーザーに名前を入力するよう促します。文字列「Enter your name」がプロンプトメッセージとして機能します。

ユーザーの入力は $name 変数に保存されます。次に、Write-Output を使用して、ユーザーが入力した値を組み込んだ個別の挨拶メッセージを表示します。

Read-Host コマンドレットを使用すると、入力をセキュアな文字列として保存できるため、パスワードなどの機密情報を収集するための非常に便利なツールです。このコマンドレットを使用すると、ユーザーにセキュアなデータを促し、機密性とセキュリティを確保できます。

出力:

PowerShell でユーザー入力をプロンプト - 出力 2

パラメータ -AsSecureString は、ユーザーが入力する文字の代わりにアスタリスク*を表示します。このパラメータを使用すると、Read-Host の出力は System.Security.SecureString オブジェクトになります。

Read-Host "Enter password" -AsSecureString

この例では、-AsSecureString パラメータを使用して Read-Host を使用し、ユーザーに安全にパスワードを入力するよう促します。プロンプトメッセージ「Enter password」がユーザーに表示されます。

ユーザーがパスワードを入力すると、画面上でマスクされ、機密性が確保されます。パスワードは次に処理や検証の準備のために $password 変数にセキュアな文字列として保存されます。

出力:

PowerShell でユーザー入力を促す - 出力 3

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 でユーザー入力を促す - 出力 4

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 でユーザー入力を促す - 出力 5

結論

PowerShell におけるユーザー入力の促しは、インタラクティブでユーザーフレンドリーなスクリプトを作成する上で重要です。Read-HostMandatory パラメータ、PromptForChoice などの方法を利用することで、スクリプト作成者はユーザー入力を効率的に収集し、信頼性とセキュリティを確保できます。

簡単なテキスト入力の収集、必須パラメータの強制、またはユーザーに構造化された選択肢のセットを提示するにせよ、これらの方法はスクリプト作成者が堅牢で多様な自動化ソリューションを作成する力を与えます。これらの技術を理解し活用することで、PowerShell スクリプト作成者はスクリプトの使いやすさと有効性を向上させ、ユーザーや管理者の多様なニーズに応えることができます。

チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
著者: Rohan Timalsina
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website