이 기사는 2023년용으로 업데이트되었습니다!
스크립트는 결정을 내릴 수 있습니다. 어떻게요? 조건 논리라는 개념을 사용합니다. PowerShell if 문과 if/else 구조는 조건을 정의하는 일반적인 방법입니다.
PowerShell 스크립트를 작성할 때는 특정한 작업이나 목표를 기준으로 합니다. 그러나 작업은 하나 이상의 조건을 기반으로 여러 가능한 작업을 가질 수 있습니다. 이런 상황에서 PowerShell If 문 구조가 필요합니다.
이 기사에서는 PowerShell If-Else 구조를 배우고 구문과 작동 방식을 이해할 것입니다. 또한 예제를 통해 PowerShell If 문을 사용하여 스크립트에 조건 논리 처리를 추가하는 몇 가지 방법을 배우게 됩니다.
PowerShell If 문 구문 이해
PowerShell if-else 구조는 하나 이상의 조건식을 평가합니다. 아래에서 If 문 구문을 볼 수 있습니다. 이 스타일은 종종 흐름 제어라고 합니다.
위의 구문에서 확인할 수 있듯이 각 테스트는 괄호 ()
로 둘러싸여 있습니다. 테스트는 비교 연산자와 논리 연산자와 같은 다양한 연산자를 사용할 수 있습니다.
문 목록에는 테스트 결과가 true로 평가될 때 실행할 코드가 포함됩니다.
그럼, If 문 그룹에는 세 가지 가능한 문이 있습니다. 이것들은 IF, ELSEIF 및 ELSE 문입니다.
- if 문에는 평가할 첫 번째 테스트가 포함되어 있습니다. 그 뒤에는 중괄호
{}
로 둘러싸인 첫 번째 문 리스트가 있습니다. PowerShell if 문은 반드시 있어야 하는 유일한 문입니다. elseif
문은 조건을 추가하는 곳입니다. 여러 조건이 있는 경우 여러 ElseIf 문을 추가할 수 있습니다. PowerShell은 이러한 조건을 순차적으로 평가합니다.else
문은 어떤 조건도 허용하지 않습니다. 이 문에는 모든 이전 조건이 거짓인 경우 실행할 코드가 포함됩니다.
PowerShell If 문 논리 흐름 이해
PowerShell If-Else가 작동하는 방식을 더 잘 이해하려면 해당 논리 흐름을 익히세요. 아래 다이어그램은 PowerShell If-Else의 기본 흐름을 보여줍니다.

if 문이 실행되면 PowerShell은 각 조건을 평가하여 코드가 true 또는 false를 반환하는지 확인합니다. 동작 요약은 다음과 같습니다:
- PowerShell은 테스트 1의 조건을 평가합니다.
- 테스트 1의 결과가 true인 경우 If 문 리스트 내부의 코드가 실행되고, PowerShell이 If 문을 종료합니다.
- 테스트 1의 결과가 false인 경우, PowerShell은 다음 ElseIf 문에서 조건 (테스트 n)을 계속 평가합니다.
- 테스트 n의 결과가 false를 반환하면 PowerShell은 조건(n)을 다음 ElseIf 문에서 계속 평가합니다. 다른 ElseIf 문이 있는 경우에만 -OR-
- 테스트 n의 결과가 false를 반환하면 Else 문의 코드가 실행되고 PowerShell은 If 문을 종료합니다. -OR-
- 테스트 n의 결과가 true를 반환하면 ElseIf 문의 코드가 실행되고 PowerShell은 If 문을 종료합니다.
PowerShell If-Else 문 사용하기
다음 섹션은 PowerShell If 문을 스크립트 작성할 때 사용하는 방법에 대한 여러 예제입니다. 배우게 될 기술들은 실제 상황에서 사용해야 할 경우 If 문을 사용하는 방법을 안내할 것입니다.
단일 If-Else 조건
가장 기본적인 것부터 시작하면 단일 PowerShell If 문입니다. 하나의 조건만 테스트해야 할 때 단일 if 문을 사용해야 합니다.
아래 예제는 $num
변수의 값이 10보다 큰지를 테스트합니다. 결과가 true이면 화면에 "$num is greater than 10"
이라는 결과가 표시됩니다. 결과가 false인 경우 PowerShell은 아무 작업도 수행하지 않습니다. 왜냐하면 테스트할 조건이 하나뿐이기 때문입니다.
특정 값만 확인하려면, 예를 들어
if ($Value) { }
와 같이 하면 PowerShell은$Value
가$Null
,0
,$False
, 빈 문자열 또는 빈 배열이 아닌지를 테스트합니다.
위의 코드를 PowerShell에 붙여넣으면 아래에 표시된 결과를 얻을 수 있습니다.

이제 Else 문을 추가하여 테스트 결과가 거짓일 때 PowerShell이 아무 것도 하지 않는 대신 기본 “대체” 동작을 추가하고 싶다면 사용할 수 있습니다.
아래 예제에서는 $num
변수의 값이 10보다 크지 않으면 Else 문의 코드가 실행됩니다.
수정된 코드를 PowerShell에서 실행하면 아래와 같은 출력이 표시됩니다.

PowerShell 7.0부터 If 문에 새로운 문법이 도입되었습니다. 삼항 연산자를 사용한 것입니다. 단일 If 문은 이 새로운 문법을 잘 활용할 수 있습니다.
위의 같은 예제로, 이것이 삼항 연산자를 사용하여 코드가 어떻게 보일지입니다.

PowerShell If 문에서 $Null 테스트하기
$Null 조건을 테스트하는 것이 간단해 보일 수 있습니다. 그러나, $Null
값을 둔 쪽이 중요하며, 모든 조건에서 같은 결과를 내지 않을 수 있습니다. 항상 $Null
조건을 왼쪽에 두는 것이 최선의 방법입니다.
만약 $Null
테스트를 오른쪽에 두고 왼쪽 값이 배열 같은 목록일 경우, $Null
은 필터로 작동합니다. 아래 예제에서 볼 수 있듯이, $Null
이 왼쪽에 배치되면 일관된 불린 결과를 얻을 수 있습니다.
$List = @(1,2,2,3,4)
$List -NE $Null
$List -EQ $Null
$Null -NE $Null
$Null -EQ $Null

여러 If-Else 조건들과 ElseIf
여러 조건을 평가할 때 하나 이상의 ElseIf 문을 추가해야 합니다. 각 ElseIf 문에는 테스트 식과 해당 코드가 포함됩니다.
아래 스크립트는 실행될 때, 사용자가 CTRL+C
키를 누르거나 사용자가 “X
“ 문자를 입력할 때까지 과일 이름을 계속해서 요청합니다.
그런 다음 If 문은 일치하는 조건을 찾을 때까지 각 조건을 순차적으로 확인합니다. 입력이 어떠한 조건과 일치하지 않으면 Else 문 내부의 코드가 실행됩니다.
아래는 PowerShell에서 위 스크립트가 실행될 때의 동작을 보여주는 시연입니다.

디스크 여유 공간 상태 보고
여유 공간 보고는 시스템 관리자에게 흔한 작업 중 하나입니다. Windows 기기의 고정 디스크의 공간 정보를 보고하는 일반적인 방법은 아래 코드와 관련이 있습니다.
위의 코드가 반환하는 정보는 다음 스크린샷에 표시된 것처럼 보입니다.

위의 출력에서 보듯이, 드라이브 문자, 여유 공간 값 및 기타 속성이 표시됩니다. 위의 출력은 괜찮지만 직관적이지 않습니다. 정보가 제공되는 방식이 디스크 공간이 비상 상태인지, 경고 상태인지 아니면 정상 상태인지를 나타내지 않습니다.
PowerShell If 문을 사용하여 코드 개선하기
A more intuitive output can be achieved using the PowerShell If-Else statement by adding conditions to check if the free space is over or below certain thresholds. And these thresholds will define the status of the free disk space.
아래 예제 스크립트는 다음을 수행합니다:
$Critical
변수의 값 사용하여 여유 공간의 백분율을 critical로 태그할 임계값을 정의합니다.- 변수
$Warning
의 값을 사용하여 빈 공간의 퍼센트가 경고로 태그될 임계값을 정의합니다. - 로컬 머신에서 모든 고정 디스크 정보를 가져옵니다
- 루프를 통해 모든 디스크 정보를 반복하여 무료 공간을 결정하고 그 상태를 태그합니다.
- 무료 공간 퍼센트가
$Warning
변수의 값보다 높으면 디스크 공간 상태는 정상으로 태그됩니다. - 무료 공간 퍼센트가
$Critical
변수의 값보다 높으면 디스크 공간 상태는 경고로 태그됩니다. - 무료 공간 퍼센트가
$Critical
변수의 값보다 작거나 같으면 디스크 공간 상태는 중요로 태그됩니다.
- 무료 공간 퍼센트가
'드라이브 문자'
,'드라이브 이름'
,'총 용량 (GB)'
,'무료 공간 (GB)'
,'무료 공간 (%)'
및'상태'
의 객체 속성을 구성합니다.- 최종 보고서를 반환합니다.
아래 코드를 복사하여 스크립트를 Get-DiskSpace.ps1
파일 이름으로 저장하십시오. 다른 임계값으로 테스트하기 위해 $Critical
와 $Warning
변수의 값을 변경하는 것을 잊지 마십시오.
더 짧은 조건을 만들기 위해 경우에 따라 if/else 조건의 결과를 변수에 할당할 수도 있습니다. 즉,
$Status = if ($percentFree -gt $Warning) { '정상' }
입니다.
스크립트를 저장한 후에는 PowerShell에서 해당 이름을 호출하여 테스트하십시오. 아래는이 스크립트가 작동하는 방법을 보여주는 샘플입니다.

출력에서 볼 수 있듯이 여러 조건을 사용하여 PowerShell If-Else로 결과를 도출한 여유 디스크 공간 백분율에 따라 각 디스크의 상태가 결정됩니다.
여러 개 및 중첩 If-Else
if-else 문이 있는 경우 else
블록에 정의된 조건이 있습니다. if-else 문이 실행되면 if
블록 안의 코드가 false를 반환하면 else
블록이 호출됩니다.
else
블록 안에서 다른 조건 테스트를 수행해야 합니다. 결과적으로 다른 If-Else 문이 필요합니다. 이러한 시나리오를 중첩된 If-Else라고 합니다. 중첩된 If-Else 문은 내부 If-Else가 외부 If-Else의 작업 결과에 따라 달라질 때 일반적으로 사용됩니다.
여러 개 및 중첩된 If-Else 문을 사용하면 혼란스러울 수 있습니다. 중요한 점은 골조 배치를 기억하고 코드를 들여쓰기하는 것입니다. 코드를 들여쓰면 If-Else 문을 쉽게 인식하고 분리할 수 있습니다.
다중/중첩 If-Else 문 예제
아래 예제 스크립트는 다중 및 중첩 If-Else가 서로의 결과에 종속될 수 있는 방법을 보여줍니다. 아래 코드의 논리는 다음과 같습니다.
$SendEmail
이$false
인 경우 스크립트는 아무 작업도 수행하지 않고 종료합니다.$SendEmail
이$true
인 경우$From
및$To
변수는 비어 있거나 null이 아니어야 합니다. 그렇지 않으면$abortFlag
가 1로 설정됩니다.$SendEmail
이$true
이고$CCEnabled
가$true
인 경우$CC
변수는 비어 있거나 null이 아니어야 합니다. 그렇지 않으면$abortFlag
가 1로 설정됩니다.- 만약
$SendEmail
이$true
이고$BCCEnabled
가$true
이면$BCC
변수는 비어 있거나 null이 아니어야합니다. 그렇지 않으면$abortFlag
가 1로 설정됩니다. $abortFlag
값이 1이면 스크립트는 이 시점에서 종료되고 계속되지 않습니다.$abortFlag
값이 0이면 스크립트는 끝까지 계속됩니다.
아래의 코드를 복사하고 Send-MyMail.ps1
로 저장하십시오. 아직 값은 변경하지 마십시오.
파일을 저장한 후 PowerShell에서 실행하십시오. 아래의 데모는 변수 값이 변경되지 않았을 때 스크립트의 결과를 보여줍니다.

다음으로 스크립트를 편집하고 모든 변수를 올바르게 업데이트하십시오. 아래의 코드 조각과 같이.
변수를 편집한 후 스크립트를 저장하고 다시 실행하십시오. 아래에서 본 것과 같은 결과가 나타날 것입니다.

이제 변수를 수정하고 중첩된 If-Else가 어떻게 영향을 받는지 테스트하는 조합을 시도하십시오. 직접 수정하고 테스트하는 것은 논리를 더 잘 이해하는 데 도움이됩니다.
요약
이 문서에서는 PowerShell If 문 구문과 같은 조건부 논리 구조에 대해 배웠습니다. If-Else 문은 스크립터가 테스트 결과에 기반하여 조건부 논리를 고려하고 스크립트 작업을 지시할 수 있게 합니다.
이 문서의 예제를 통해 결정 기반 코드를 작성할 때 If-Else 문을 사용하는 방법과 기술을 배웠을 것입니다. If-Else는 단일 조건을 사용하여 간단하게 할 수 있으며 중첩된 If-Else 문을 더 깊이 파고들면서 더 복잡해질 수 있습니다.
어떻게 생각하십니까? If-Else 문에 대해서요? 이 문서를 읽은 후에 더 많이 사용할 것으로 생각하십니까? 여기서 습득한 지식을 적용할 수 있는 다른 용도는 어떤 것이 있을까요?