about_Language_Keywords — PowerShell 언어 키워드

about_Language_Keywords — PowerShell 언어 키워드

출처: Microsoft Learn — about_Language_Keywords https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_language_keywords

본문

잠깐, 키워드가 뭔가요?

PowerShell 스크립트를 쓰다 보면 if, for, function처럼 문법적인 의미를 가진 단어들을 만나게 돼요. 이런 단어들은 변수나 함수 이름처럼 자유롭게 쓰는 게 아니라, PowerShell이 이미 정해 둔 역할로 해석하는 예약어죠. 이 글에서는 PowerShell이 제공하는 언어 키워드(language keywords) 들을 하나씩 살펴볼게요. 어떤 키워드가 있는지, 그리고 각각이 정확히 무슨 일을 하는지 감을 잡는 게 목표예요.

각 키워드에 대한 더 자세한 내용은 아래 표에 있는 전용 문서(about topic)를 참고하시면 돼요.

키워드 목록

PowerShell은 다음과 같은 언어 키워드를 가지고 있어요. 각 키워드에 대한 자세한 정보는 해당 키워드의 about 문서와 표 아래 설명을 참고하세요.

Keyword Reference
begin about_Functions, about_Functions_Advanced
break about_Break, about_Trap
catch about_Try_Catch_Finally
class about_Classes
clean about_Functions, about_Functions_Advanced_Methods
continue about_Continue, about_Trap
data about_Data_Sections
define 향후 사용을 위해 예약됨
do about_Do, about_While
dynamicparam about_Functions_Advanced_Parameters
else about_If
elseif about_If
end about_Functions, about_Functions_Advanced_Methods
enum about_Enum
exit 이 문서에서 다룸
filter about_Functions
finally about_Try_Catch_Finally
for about_For
foreach about_Foreach
from 향후 사용을 위해 예약됨
function about_Functions, about_Functions_Advanced
hidden about_Hidden
if about_If
in about_Foreach
param about_Functions
process about_Functions, about_Functions_Advanced
return about_Return
static about_Classes
switch about_Switch
throw about_Throw, about_Functions_Advanced_Methods
trap about_Trap, about_Break, about_Try_Catch_Finally
try about_Try_Catch_Finally
until about_Do
using about_Using, about_Classes
var 향후 사용을 위해 예약됨
while about_While, about_Do

워크플로 전용 키워드

다음 키워드들은 PowerShell 워크플로(workflow) 에서 사용돼요:

  • inlinescript
  • parallel
  • sequence
  • workflow

워크플로는 PowerShell 5.1에서만 지원돼요. 워크플로에 대한 자세한 내용은 Running PowerShell Commands in a Workflow 문서를 참고하세요.


begin

dynamicparam, process, end 키워드와 함께 함수 본문의 한 부분을 지정해요. begin 문 목록은 파이프라인에서 객체를 받기 전에 딱 한 번 실행돼요.

구문:

function <name> {
    dynamicparam {<statement list>}
    begin {<statement list>}
    process {<statement list>}
    end {<statement list>}
}

break

스크립트가 루프를 빠져나가게 만들어요.

구문:

while (<condition>) {
   <statements>
   ...

   break
   ...

   <statements>
}

catch

함께 쓰이는 try 문 목록에서 오류가 발생했을 때 실행할 문 목록을 지정해요. 오류 형식은 대괄호가 필요하고, 두 번째 대괄호 쌍은 오류 형식이 선택 사항이라는 뜻이에요.

구문:

try {<statement list>}
catch [[<error type>]] {<statement list>}

class

PowerShell에서 새 클래스를 정의할 때 써요.

구문:

class <class-name> {
    [[hidden] [static] <property-definition> ...]
    [<class-name>([argument-list>]) {<constructor-statement-list>} ...]
    [[hidden] [static] <method-definition> ...]
}

clean

clean 키워드는 PowerShell 7.3에서 추가됐어요. 함수의 begin, process, end 블록 이후에 반드시 실행되는 것이 보장되는 코드 블록을 정의해요. end 블록과 달리, 다른 블록에서 종료 오류(terminating error)가 발생해도 clean 블록은 항상 실행돼요.

continue

스크립트가 루프를 중단하고 조건으로 돌아가게 해요. 조건이 충족되면 스크립트가 루프를 다시 시작해요.

구문:

while (<condition>) {
   <statements>
   ...

   continue
   ...

   <statements>
}

data

스크립트에서 데이터를 스크립트 로직과 분리하는 섹션을 정의해요. if 문과 일부 제한된 명령어도 포함할 수 있어요.

구문:

data <variable> [-SupportedCommand <cmdlet-name>] {<permitted content>}

do

while 또는 until 키워드와 함께 루프 구문으로 쓰여요. while을 쓰는 루프와 달리, PowerShell은 do 문 목록을 적어도 한 번은 실행해요.

while 구문:

do {<statement list>} while (<condition>)

until 구문:

do {<statement list>} until (<condition>)

dynamicparam

begin, process, end 키워드와 함께 함수 본문의 한 부분을 지정해요. 동적 매개 변수(Dynamic parameters)는 런타임에 추가돼요.

구문:

function <name> {
   dynamicparam {<statement list>}
   begin {<statement list>}
   process {<statement list>}
   end {<statement list>}
}

else

if 키워드와 함께 쓰여 기본(default) 문 목록을 지정해요.

구문:

if (<condition>) {<statement list>}
else {<statement list>}

elseif

ifelse 키워드와 함께 쓰여 추가적인 조건을 지정해요. else 키워드는 선택 사항이에요.

구문:

if (<condition>) {<statement list>}
elseif (<condition>) {<statement list>}
else {<statement list>}

end

dynamicparam, begin, end 키워드와 함께 함수 본문의 한 부분을 지정해요. end 문 목록은 파이프라인에서 모든 객체를 받은 뒤 딱 한 번 실행돼요.

구문:

function <name> {
   dynamicparam {<statement list>}
   begin {<statement list>}
   process {<statement list>}
   end {<statement list>}
}

enum

enum열거형(enumeration) 을 선언할 때 써요. 열거형은 열거자 목록(enumerator list) 이라고 하는 이름 붙은 레이블 집합으로 이루어진 고유한 형식이에요.

구문:

enum <enum-name> {
    <label> [= <int-value>]
    ...
}

exit

PowerShell이 스크립트나 PowerShell 인스턴스를 종료하게 해요.

구문:

exit
exit <exitcode>

pwsh를 File 매개 변수와 함께 쓸 때는, 스크립트 실행 중 발생하는 오류나 예외를 처리하는 지침이 .ps1(스크립트) 파일 자체에 포함되어 있어야 해요. exit 문은 스크립트의 실행 후 상태를 나타내는 용도로만 써야 해요.

Windows에서는 [int]::MinValue[int]::MaxValue 사이의 모든 숫자가 허용돼요.

Unix에서는 [byte]::MinValue[byte]::MaxValue 사이의 양수만 허용돼요. -1부터 -255 범위의 음수는 256을 더해 자동으로 양수로 변환돼요. 예를 들어 -2254로 변환돼요.

PowerShell에서 exit 문은 $LASTEXITCODE 변수의 값을 설정해요. Windows 명령 셸(cmd.exe)에서는 exit 문이 %ERRORLEVEL% 환경 변수의 값을 설정해요.

숫자가 아니거나 플랫폼별 범위를 벗어나는 인수는 0 값으로 변환돼요.

다음 예시에서는 exit 4를 스크립트 파일 test.ps1에 추가해서 오류 레벨 변수 값을 4로 설정해요.

C:\scripts\test>type test.ps1
1
2
3
exit 4

C:\scripts\test>pwsh -File ./test.ps1
1
2
3

C:\scripts\test>echo %ERRORLEVEL%
4

pwsh.exe -File을 실행하고 스크립트 파일이 exit 명령으로 종료되면, 종료 코드는 exit 명령에 사용된 숫자 인수로 설정돼요. 스크립트에 exit 문이 없으면, 스크립트가 오류 없이 완료될 때 종료 코드는 항상 0이고, 처리되지 않은 예외로 종료될 때는 1이에요.

filter

문 목록이 입력 객체 하나마다 한 번씩 실행되는 함수를 지정해요. process 블록만 포함하는 함수와 같은 효과예요.

구문:

filter <name> {<statement list>}

finally

trycatch에 연결된 문 다음에 실행되는 문 목록을 정의해요. finally 문 목록은 스크립트를 빠져나가기 위해 CTRL+C를 누르거나 스크립트에서 exit 키워드를 써도 실행돼요.

구문:

try {<statement list>}
catch [<error type>] {<statement list>}
finally {<statement list>}

for

조건이 있는 루프를 정의해요.

구문:

for (<initialize>; <condition>; <iterate>) { <statement list> }

foreach

컬렉션의 각 멤버를 사용하는 루프를 정의해요.

구문:

foreach (<item> in <collection>) { <statement list> }

from

향후 사용을 위해 예약됐어요.

function

재사용할 수 있는 코드의 이름 붙은 문 목록을 만들어요. 함수가 속한 스코프(scope) 를 지정할 수 있어요. param 키워드를 사용해 하나 이상의 이름 붙은 매개 변수를 지정할 수도 있어요. 함수 문 목록 안에는 dynamicparam, begin, process, end 문 목록을 포함할 수 있어요.

구문:

function [<scope:>]<name> {
   param ([type]<$PName1> [, [type]<$PName2>])
   dynamicparam {<statement list>}
   begin {<statement list>}
   process {<statement list>}
   end {<statement list>}
}

함수 이름 뒤에 오는 문 목록 바깥에서 하나 이상의 매개 변수를 정의할 수도 있어요.

구문:

function [<scope:>]<name> [([type]<$PName1>, [[type]<$PName2>])] {
   dynamicparam {<statement list>}
   begin {<statement list>}
   process {<statement list>}
   end {<statement list>}
}

if

조건문을 정의해요.

구문:

if (<condition>) {<statement list>}

hidden

클래스 멤버를 Get-Member cmdlet의 기본 결과, IntelliSense, 탭 완성 결과에서 숨겨요.

구문:

hidden [data type] $member_name

in

foreach 문에서 컬렉션의 각 멤버를 사용하는 루프를 만들 때 써요.

구문:

foreach (<item> in <collection>){<statement list>}

param

함수의 매개 변수를 정의해요.

구문:

function [<scope:>]<name> {
   param ([type]<$PName1>[, [[type]<$PName2>]])
   <statement list>
}

process

dynamicparam, begin, end 키워드와 함께 함수 본문의 한 부분을 지정해요. process 문 목록이 파이프라인에서 입력을 받으면, 파이프라인의 요소 하나마다 한 번씩 실행돼요. 파이프라인이 객체를 제공하지 않으면 process 문 목록은 실행되지 않아요. 명령이 파이프라인의 첫 번째 명령이면 process 문 목록은 한 번 실행돼요.

구문:

function <name> {
   dynamicparam {<statement list>}
   begin {<statement list>}
   process {<statement list>}
   end {<statement list>}
}

return

PowerShell이 현재 스코프를 떠나게 해요. 예를 들어 스크립트나 함수를 벗어나면서, 선택적 표현식을 출력에 써요.

구문:

return [<expression>]

static

정의된 속성이나 메서드가 그것이 정의된 클래스의 모든 인스턴스에 공통임을 지정해요.

사용 예시는 class 항목을 참고하세요.

switch

여러 조건을 확인하려면 switch 문을 써요. switch 문은 일련의 if 문과 같지만 더 간단해요.

switch 문은 각 조건과 선택적 동작을 나열해요. 조건이 충족되면 동작이 수행돼요.

구문 1:

switch [-Regex|-Wildcard|-Exact][-CaseSensitive] ( <value> )
{
   <string>|<number>|<variable>|{ <expression> } {<statement list>}
   <string>|<number>|<variable>|{ <expression> } {<statement list>}
   ...

   default {<statement list>}
}

구문 2:

switch [-Regex|-Wildcard|-Exact][-CaseSensitive] -File <filename>
{
   <string>|<number>|<variable>|{ <expression> } {<statement list>}
   <string>|<number>|<variable>|{ <expression> } {<statement list>}
   ...

   default {<statement list>}
}

throw

객체를 오류로 던져요.

구문:

throw [<object>]

trap

오류가 발생했을 때 실행할 문 목록을 정의해요. 오류 형식은 대괄호가 필요하고, 두 번째 대괄호 쌍은 오류 형식이 선택 사항이라는 뜻이에요.

구문:

trap [[<error type>]] {<statement list>}

try

문을 실행하는 동안 오류를 검사할 문 목록을 정의해요. 오류가 발생하면 PowerShell은 catch 또는 finally 문에서 계속 실행돼요. 오류 형식은 대괄호가 필요하고, 두 번째 대괄호 쌍은 오류 형식이 선택 사항이라는 뜻이에요.

구문:

try {<statement list>}
catch [[<error type>]] {<statement list>}
finally {<statement list>}

until

do 문에서 문 목록이 적어도 한 번 실행되는 루프 구문으로 쓰여요.

구문:

do {<statement list>} until (<condition>)

using

세션에서 어떤 네임스페이스를 사용할지 나타내게 해줘요. 형식 이름, 클래스, 멤버를 참조할 때 입력을 덜 해도 돼요. 모듈의 클래스도 포함할 수 있어요.

네임스페이스 구문:

using namespace <.NET-namespace>

모듈 구문:

using module <module-name>

어셈블리 구문:

using assembly <.NET-assembly-path>

자세한 내용은 about_Using 문서를 참고하세요.

while

while 문은 문을 실행하기 전에 조건을 검사하는 루프 구문이에요. 조건이 거짓이면 문은 실행되지 않아요.

문 구문:

while (<condition>) {
   <statements>
 }

do 문 안에서 쓰일 때, while은 문 목록이 적어도 한 번 실행되는 루프 구문의 일부예요.

do 루프 구문:

do {<statement list>} while (<condition>)

더 알아보기