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
는 스크립트가 사용자에게 입력을 요청할 수 있도록 하는 PowerShell의 기본 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"
이 예제에서는 사용자가 "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
변수는 비어 있게 됩니다.
조건문, 함수, 루프 또는 try-catch 블록과 함께 Read-Host
를 사용하여 기본값을 통합할 수 있습니다.
PowerShell의 Read-Host
명령어로 기본값 설정을 위한 조건문 사용하기
defaultName
이라는 변수를 만들고 문자열 값 John Doe
를 부여합니다. 이 값은 사용자가 입력하지 않은 경우 사용자 입력 대신 사용됩니다.
$defaultName = "John Doe"
사용자로부터 입력을 요청하기 위해 메시지를 생성하고 이 작업을 수행하기 위해 Read-Host
명령을 활용할 새로운 변수 userName
을 정의합니다.
$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 ""
)를 확인합니다. 이 조건이 true일 경우 사용자가 입력한 값을 유지합니다. false일 경우(즉 사용자가 입력하지 않은 경우)$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
루프는 특정 조건이 true인 동안 코드 블록을 반복해서 실행하는 PowerShell의 제어 구조입니다. 이는 특정 작업이 최소한 한 번 수행되도록 보장하기 위해 특히 유용합니다.
do-while
루프의 기본 구문은 다음과 같습니다:
do {
# Code to be executed
} while (condition)
do
문 안의 코드 블록은 while
키워드 뒤에 지정된 조건이 true인 동안 계속 실행됩니다.
이제 사용자가 이름을 입력하도록 요청하지만, 아무 것도 입력하지 않을 경우 기본값인 "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
에 값이 있으면(즉, 비어 있지 않거나 널이 아님) 해당 값을 유지합니다. 그렇지 않으면 기본 이름$defaultName
이 할당됩니다.-not $userName
: 이 조건은$userName
이 비어 있는지 확인합니다. 비어 있다면 루프는 계속되고, 사용자에게 다시 프롬프트합니다.- 사용자가 입력을 제공하면 조건
-not $userName
이 false가 되어 루프가 종료됩니다.
출력:
결론
이 포괄적인 가이드에서는 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