PowerShell で Read-Host を使用してデフォルト値を設定する方法
-
PowerShell における
Read-Hostコマンドの概要 -
PowerShell の
Read-Hostコマンドでデフォルト値を設定するために条件文を使用する -
PowerShell の
Read-Hostコマンドでデフォルト値を設定するために関数を使用する -
PowerShell の
Read-Hostコマンドでデフォルト値を設定するために Do-While ループを使用する - 結論
PowerShell は、ユーザーとインタラクションするためのさまざまな方法を提供する強力なスクリプト言語です。一般的な方法の一つは、Read-Host を使用してユーザーに入力を促すことです。
しかし、デフォルト値を提供することが有益なシナリオもあります。このガイドでは、PowerShell の Read-Host とともにデフォルト値を組み込むさまざまな方法を探ります。
PowerShell における Read-Host コマンドの概要
Read-Host は、ユーザーに入力を促すことでスクリプトがユーザーとインタラクトできる基本的な cmdlet です。スクリプト実行中に情報を収集するための多用途なツールです。この cmdlet は、動的またはユーザー固有の情報が必要なシナリオで特に役立ちます。
構文:
Read-Host [-Prompt] <String> [-AsSecureString] [-Credential <PSCredential>] [-ErrorAction <ActionPreference>] [-Timeout <Int32>] [-OutVariable <String>] [-OutBuffer <Int32>] [-InputObject <PSObject>] [<CommonParameters>]
ここでの主要なパラメータは以下の通りです:
-Prompt: ユーザーに表示されるメッセージを指定します。-AsSecureString: 入力をセキュアな文字列(パスワード)として要求します。-Credential: ユーザー名とパスワードを促します。PSCredentialオブジェクトを返します。-ErrorAction: エラーが発生した場合に取るアクションを定義します。-Timeout: cmdlet が入力を待つ時間制限を設定します。-OutVariable: 結果を変数に保存します。-OutBuffer: 出力する前にバッファリングするオブジェクトの数を決定します。-InputObject: パイプラインからの入力を許可します。
Read-Host コマンドの基本的な使い方
$userInput = Read-Host "Please enter your name"
この例では、ユーザーに「あなたの名前を入力してください」というメッセージが表示されます。彼らが入力した値は、変数 $userInput に保存されます。
セキュアな文字列入力
$securePassword = Read-Host "Please enter your password" -AsSecureString
このコマンドはユーザーにパスワードを求め、その入力を変数 $securePassword にセキュアな文字列として保存します。
タイムアウト機能
$userInput = Read-Host "Please enter your choice" -Timeout 10
このコマンドはユーザーに入力を促し、最長で 10 秒待ちます。その時間内に入力がない場合、変数 $userInput は空になります。
条件文、関数、ループ、または Read-Host と組み合わせた try-catch ブロックを使用してデフォルト値を組み込むことができます。
PowerShell の Read-Host コマンドでデフォルト値を設定するために条件文を使用する
defaultName という変数を作成し、文字列 John Doe を代入します。この値は、ユーザーが入力を提供しない場合の代わりに使用されます。
$defaultName = "John Doe"
新しい変数 userName を定義し、ユーザーに入力を促すメッセージを生成し、これを実行するために Read-Host コマンドを利用します。
$userName = Read-Host ("Please enter your name (default is {0})" -f $defaultName)
以下のコードは、ユーザーが何らかの入力を提供したかどうかをチェックする条件を実装しています。変数 $userName が null または空の文字列であるかどうかをチェックします。
ユーザーが入力を提供すると(空の文字列でない場合)、$defaultName の値がユーザーの入力に更新されます。
if (-not $userName) { $userName = $defaultName }
全コード:
$defaultName = "John Doe"
$userName = Read-Host ("Please enter your name (default is {0})" -f $defaultName)
if (-not $userName) { $userName = $defaultName }
Write-Host "Hello, $($userName)!"
出力:

次のアプローチでは、ユーザーが何らかの値を入力したかどうかをチェックする条件内にユーザー入力を受け取るプロセスを移動します。これにより、ユーザーがデータを提供したかどうかをよりよく追跡できます。
ユーザーからのアクションがない場合は、デフォルト値 John Doe を使用します。ただし、ユーザーが入力を提供した場合は、userName 変数に保存された値を使用します。
コード:
$defaultName = "John Doe"
if (($userName = Read-Host "Press enter to accept default value $defaultName") -eq '') { $defaultName } else { $userName }
出力:

最後のアプローチでは、ユーザーからの入力が与えられたかどうかを確認し、与えられた場合は、その入力の値を直接 defaultName という名前の変数に割り当てます。
コード:
$defaultName = "John Doe"
if ($userName = Read-Host "Value [$defaultName]") { $defaultName = $userName }
出力:

この方法により、else 条件を使用する必要がなくなります。
PowerShell の Read-Host コマンドでデフォルト値を設定するために関数を使用する
関数は、スクリプト間で再利用可能な指示のセットをカプセル化します。デフォルト値を組み込む Read-HostWithDefault という関数を設計します。
function Read-HostWithDefault {
param (
[string]$prompt,
[string]$default
)
$userInput = Read-Host "$prompt (default is $default)"
$userInput = if ($userInput -ne "") { $userInput } else { $default }
return $userInput
}
説明:
function Read-HostWithDefault { ... }: これはRead-HostWithDefaultという名前の関数を定義します。param ( [string]$prompt, [string]$default ): これは関数が期待するパラメータを指定します。この場合、プロンプトメッセージとデフォルト値です。$userInput = Read-Host "$prompt (default is $default)": この行は、ユーザーに入力を求め、プロンプトとデフォルト値の両方を表示します。入力は変数$userInputに保存されます。$userInput = if ($userInput -ne "") { $userInput } else { $default }: この行は、$userInputが空の文字列でないかをチェックします($userInput -ne "")。この条件が真であれば(つまり、ユーザーが入力を提供した場合)、$userInputはその値を保持します。偽の場合(つまり、ユーザーが入力を提供しなかった場合)、$defaultが$userInputに割り当てられます。return $userInput: 最後に、関数は結果の値を返します。
では、実際のシナリオでこの関数を使用する方法を見てみましょう:
$defaultName = "John Doe"
$name = Read-HostWithDefault -prompt "Enter your name" -default $defaultName
Write-Host "Hello, $name!"
説明:
$defaultName = "John Doe": ここでは、ユーザーの名前のデフォルト値を設定します。$name = Read-HostWithDefault -prompt "Enter your name" -default $defaultName: この行は、ユーザーに名前を尋ね、プロンプトメッセージとデフォルト値を表示します。関数Read-HostWithDefaultは適切なパラメータで呼び出されます。Write-Host "Hello, $name!": これは、ユーザーが提供したものまたはデフォルト値による挨拶を生成します。
出力:

PowerShell の Read-Host コマンドでデフォルト値を設定するために Do-While ループを使用する
do-while ループは、指定された条件が真である限り、コードブロックを繰り返し実行する PowerShell の制御構造です。これは、特定のアクションが少なくとも一度は実行されることを保証したい場合に特に便利です。
do-while ループの基本的な構文は:
do {
# Code to be executed
} while (condition)
do ステートメント内のコードブロックは、while キーワードの後に指定された条件が真である限り実行され続けます。
ユーザーに名前の入力を促し、何も入力しなかった場合はデフォルト値"John Doe"を提供する例を考えてみましょう:
$defaultName = "John Doe"
do {
$userName = Read-Host "Please enter your name (default is $defaultName)"
$userName = if ($userName) { $userName } else { $defaultName }
} while (-not $userName)
Write-Host "Hello, $userName!"
説明:
$defaultName = "John Doe": この行は、ユーザーが何も入力しない場合に使用するデフォルト値を設定します。do { ... } while (-not $userName): これはdo-whileループを開始します。doステートメント内のコードブロックは、少なくとも一度は実行されます。条件(-not $userName)は、$userNameが提供されていない限りループが続くことを保証します。$userName = Read-Host "Please enter your name (default is $defaultName)": これは、ユーザーに名前を尋ね、そのメッセージにデフォルト値を表示します。$userName = if ($userName) { $userName } else { $defaultName }: この行はif-else文を使用して、$userNameの値を決定します。$userNameに値がある場合(つまり、空でないまたは null でない場合)、その値を保持します。そうでない場合はデフォルト名$defaultNameを割り当てます。-not $userName: この条件は、$userNameが空であるかどうかをチェックします。空の場合、ループは続き、再度ユーザーにプロンプトが表示されます。- ユーザーが入力を提供すると、条件
-not $userNameは偽になり、ループは終了します。
出力:

結論
この包括的なガイドでは、PowerShell の Read-Host コマンドでデフォルト値を設定するさまざまな方法を探りました。各アプローチは、スクリプトの特定の要件に応じて明確な利点を提供します。
- 条件文:この方法では、ユーザー入力を簡単にチェックでき、さまざまなシナリオに対応する柔軟性を提供します。
- 関数:ロジックを関数にカプセル化することで、デフォルト値をシームレスに組み込む再利用可能なコードを作成できます。
- Do-While ループ:このアプローチは、特定のアクションが少なくとも一度は実行されることを保証し、ユーザー入力が重要なシナリオに適しています。
これらの手法を理解し適用することで、PowerShell スクリプトのユーザー体験と耐障害性を向上させることができます。特定のスクリプト要件に最も適した方法を選択することを忘れないでください。
I am Waqar having 5+ years of software engineering experience. I have been in the industry as a javascript web and mobile developer for 3 years working with multiple frameworks such as nodejs, react js, react native, Ionic, and angular js. After which I Switched to flutter mobile development. I have 2 years of experience building android and ios apps with flutter. For the backend, I have experience with rest APIs, Aws, and firebase. I have also written articles related to problem-solving and best practices in C, C++, Javascript, C#, and power shell.
LinkedIn