PowerShell에서 Read-Host로 기본값 설정하는 방법

  1. PowerShell의 Read-Host 명령어 개요
  2. PowerShell의 Read-Host 명령어로 기본값 설정을 위한 조건문 사용하기
  3. PowerShell의 Read-Host 명령어로 기본값 설정을 위한 함수 사용하기
  4. PowerShell의 Read-Host 명령어로 기본값 설정을 위한 Do-While 루프 사용하기
  5. 결론
PowerShell에서 Read-Host로 기본값 설정하는 방법

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)!"

출력:

호스트 조건부 읽기 1

다음 접근 방법에서는 사용자 입력을 받는 프로세스를 사용자가 값을 입력했는지 여부를 확인하는 조건 내로 이동합니다. 이렇게 하면 사용자가 데이터를 제공했는지 여부를 더 잘 추적할 수 있습니다.

사용자의 아무런 조치가 없으면 기본값인 John Doe를 사용합니다. 그러나 사용자가 입력을 제공하는 경우, userName 변수에 저장된 값을 사용합니다.

코드:

$defaultName = "John Doe"
if (($userName = Read-Host "Press enter to accept default value $defaultName") -eq '') { $defaultName } else { $userName }

출력:

호스트 조건부 2 읽기

마지막 접근 방법은 사용자로부터 입력이 제공되었는지 확인하고, 제공된 경우 그 값을 defaultName이라는 변수에 직접 할당합니다.

코드:

$defaultName = "John Doe"
if ($userName = Read-Host "Value [$defaultName]") { $defaultName = $userName }

출력:

호스트 조건부 3 읽기

이렇게 하면 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 스크립트의 사용자 경험과 복원력을 향상시킬 수 있습니다. 특정 스크립트 요구사항에 가장 잘 맞는 방법을 선택해야 합니다.

튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다
작가: Waqar Aslam
Waqar Aslam avatar Waqar Aslam avatar

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