PowerShell 스크립트를 사용하여 시스템을 관리하거나 대량 작업을 처리할 때, 스크립트의 일부로 루프 구조를 사용해야 할 필요가 있을 것입니다. PowerShell에서는 여러 종류의 루프가 제공되며, for 루프도 그 중 하나입니다. PowerShell for 루프는 동일한 명령어 집합을 여러 항목에 대해 빠르게 실행하고 일관된 결과를 생성할 수 있습니다.
본 문서에서는 PowerShell for 루프에 대해 알아보고, 문법과 for 루프 문장의 구성 요소를 이해할 것입니다. 또한 예제를 통해 for 루프를 사용하는 다양한 방법도 배우게 될 것입니다.
PowerShell for 루프 문장과 자리 표시자 이해하기
PowerShell for 루프는 일반적으로 명령어나 프로세스를 실행해야 하는 횟수(반복 회수)가 이미 알려져 있는 경우에 사용됩니다. 예를 들어, 배열의 일부 값만 처리하고 싶을 때(예: X 개의 항목 중에서 10개만 처리) 사용될 수 있습니다.
for 루프를 사용하면 코드가 종료해야 하는 제한과 조건에 대해 더 많은 제어가 가능합니다. 이는 foreach 루프 또는 ForEach-Object
cmdlet과 비교할 때, 반복이 컬렉션의 마지막 항목을 처리한 후에 중지되는 것과는 다릅니다.
아래는 for 루프 문장의 문법입니다.
위 문법에서 볼 수 있듯이, PowerShell for 루프 문장은 알아야 할 네 가지 자리 표시자로 구성됩니다. 이는 초기값, 조건, 반복, 그리고 문장 목록 자리 표시자입니다.
- 초기값 플레이스홀더는 시작값을 지정하는 곳입니다. 이 값은 문장에서 한 번만 읽힙니다. 일반적으로 스크립터는 이 변수에 0의 값을 할당합니다.
- 조건 플레이스홀더는 루프가 계속 실행되거나 종료될지를 결정하는 제한 또는 조건을 지정합니다. 이 플레이스홀더에 사용된 식은 참으로 평가됩니다.
- 반복 플레이스홀더는 여러 개의 명령을 받아들입니다. 이 플레이스홀더에 제공된 명령은 각 루프 반복 후에 실행되며, 조건이 다시 평가되기 전에 실행됩니다. 일반적으로 스크립터는 이를 사용하여 초기값 플레이스홀더의 값을 증가 또는 감소시키는 식을 제공합니다.
- 마지막으로, 문장 목록 플레이스홀더는 실행하려는 주요 코드가 위치하는 곳입니다. 이 플레이스홀더 내의 코드는 조건이
$False
값을 반환할 때까지 반복됩니다.
PowerShell For 루프 실행 흐름 이해하기
PowerShell for 루프가 어떻게 작동하는지 자세히 이해하려면 실행 흐름을 알아야 합니다. for 루프는 초기 실행 후에는 3단계 프로세스로 전환되기 전에 처음에 4단계 프로세스입니다. 자세한 설명을 위해 아래 알고리즘을 계속 읽으세요.
단계 1
for 루프 문장의 시작에서 초기값이 읽혀서 메모리에 저장됩니다.
예시: $num = 0
단계 2
for 루프 문은 조건 플레이스홀더 내의 표현식의 부울 결과를 평가합니다. 결과가 $false
인 경우, for 루프가 종료됩니다. 결과가 $true
인 경우, for 루프는 다음 단계로 진행합니다.
예시: $num -lt 10
단계 3
PowerShell은 명령문 목록 플레이스홀더 내의 코드를 실행합니다. 하나 이상의 명령, 스크립트 블록 또는 함수가 있을 수 있습니다.
예시: "I count $num "
단계 4
이 단계에서는 반복 플레이스홀더의 표현식이 실행되어 초기 플레이스홀더의 현재 값이 업데이트됩니다. 그런 다음 흐름은 단계 2로 돌아갑니다.
예시: $num++
PowerShell For 루프 사용하기 (예시)
다음 섹션에서는 다양한 방법으로 for 루프를 사용하는 몇 가지 예시를 살펴볼 것입니다. 이러한 예시는 현실적이거나 실제 사용 용도를 가질 수도 있고 그렇지 않을 수도 있습니다. 그러나 배우게 될 기술은 필요한 경우 for 루프를 사용하는 데 도움이 될 수 있습니다.
이제 for 루프가 어떻게 작동하는지 알았으니, 기본 코드를 사용하여 모든 요소가 어떻게 결합되는지 확인해 보겠습니다.
숫자 시퀀스 가져오기
아래 코드는 $num
의 값이 10이 될 때까지 1부터 시작하여 콘솔에 문자열 "I count $num"
을 반복해서 표시합니다.
위의 코드를 복사하여 PowerShell 세션에 붙여넣어 실행하면, 아래 스크린샷에서 결과를 확인할 수 있습니다.

문자열 연결
for 루프 문은 덧셈, 뺄셈 또는 곱셈과 같은 수학식에만 제한되지 않습니다. 문자열 값을 연결하는 데에도 사용될 수 있습니다.
아래의 예제는 각 줄에 이전 줄보다 한 글자씩 더 많은 문자 “x”를 계속 반복하여, 줄에 포함된 문자 수가 30이 될 때까지 반복됩니다.
보시다시피, $x
의 값은 빈 문자열 ''
로 초기화되었습니다. 조건에 따른 한계는 $x
의 값에 포함된 문자 수가 30이 될 때까지입니다. 각 반복마다 한 글자 “x”가 $x
의 값에 추가됩니다.
아래의 출력은 위의 코드를 PowerShell에서 실행했을 때의 예상 결과를 보여줍니다.

여러 초기 및 반복 표현식과 함께 문자열 연결하기
for 루프 문의 Initial 및 Repeat 자리 표시자는 여러 표현식을 받을 수 있습니다.
이전 예제의 코드를 사용하여, 코드를 수정하여 Repeat 자리 표시자에 새로운 표현식을 추가하여 무작위 색상을 선택할 수 있습니다. 이 무작위 색상은 콘솔에 표시될 문자열의 전경색으로 사용됩니다.
첫 번째 줄에서 색상 이름을 포함하는 배열이 정의되었습니다. for 루프 연산은 이 배열에서 무작위로 색상 이름을 선택합니다.
Initial 및 Repeat 자리 표시자가 이제 두 개의 표현식을 가지고 있음에 유의하세요. 각 표현식은 괄호로 묶여 쉼표로 구분됩니다.
PowerShell에서 수정된 코드를 실행하면, 예상 결과는 아래와 같습니다.

진행 상황 표시
for 루프의 가장 일반적인 사용은 진행 상황 표시입니다. 이는 주로 시간이 걸릴 수 있는 대량의 항목에 대한 작업을 실행할 때 사용됩니다. 예를 들어, Exchange 조직의 모든 메일박스 크기에 대한 보고서를 생성하거나, Active Directory에서 여러 사용자의 속성을 업데이트하는 경우 등입니다.
아래의 샘플 코드는 1부터 100%까지의 진행 상황을 기본적인 방법으로 표시하는 방법을 보여줍니다. 보시다시피, $counter
의 초기 값은 1이고, 조건은 이 루프가 $counter
값이 100이 될 때까지 실행됨을 나타냅니다.
위의 코드를 PowerShell에서 실행하면, 아래와 같은 출력이 나타날 것입니다.

카운트다운 타이머 표시
다음 코드는 for 루프를 사용하여 카운트다운 타이머를 표시하는 방법을 보여줍니다. 이 카운트다운 타이머는 10부터 시작하여 남은 초만을 표시합니다.
시작 숫자를 변경하려면, Initial 자리 표시자의 $seconds
변수의 값을 변경하면 됩니다.
위의 코드를 PowerShell에서 실행하면, 아래와 같은 샘플 출력이 나타납니다.

카운트다운 타이머 표시 (중첩된 for 루프)
분:초
형식으로 카운트다운 타이머를 표시하려면 어떻게 해야 할까요? 중첩된 for 루프를 사용하여 이를 수행할 수 있습니다. 중첩된 for 루프란 단순히 다른 for 루프 내부에 있는 for 루프를 의미합니다.
아래에는 두 개의 for 루프 문이 포함된 샘플 코드가 있습니다.
첫 번째 for 루프는 타이머의 분 부분의 카운트다운을 처리합니다. 보시다시피, for 루프 이전에는 $minutes
변수가 있으며, 해당 변수에는 for 루프가 카운트다운할 분의 수를 지정해야 합니다.
두 번째 for 루프는 타이머의 초 부분의 카운트다운을 처리합니다. 각 반복 이후에 루프는 1초 동안 일시 정지한 다음 계속 진행합니다. 이는 $seconds
값이 0이 될 때까지 계속됩니다.
위의 코드를 실행하면 카운트다운 타이머가 다음과 같이 표시됩니다.

소수 판별하기
PowerShell for 루프는 수학 연산에도 좋은 선택입니다. 이 예제에서는 for 루프를 사용하여 주어진 수가 소수인지를 판별합니다.
A prime number is a number that is only divisible by 1 and N, where N is the number itself. For example, if the value of N is 7, then N divided by 1
is 7 divided by 1
.
아래 스크립트는 실행될 때 다음을 수행합니다.
- 사용자에게 숫자를 입력하도록 요청합니다.
- 입력된 숫자를 피제수로 사용하여 2부터 입력된 숫자에서 1을 뺀 수까지의 숫자들을 약수로 사용하여 나눕니다. 이는 입력 값이 7인 경우 약수가 각각 2, 3, 4, 5, 6이 됨을 의미합니다.
- 만약 몫이 정수라면, 입력한 수는 소수가 아니므로 for 루프가 종료됩니다.
- 만약 몫이 정수가 아니라면, 입력한 수는 소수입니다.
이 스크립트를 isPrime.ps1
로 복사하여 저장하십시오.
isPrime.ps1
스크립트를 저장한 후 PowerShell에서 실행하여 테스트하십시오. 예제 출력은 아래에서 확인할 수 있습니다.

요약
PowerShell for 루프는 다른 언어에서 사용되는 for 루프 함수와 비교했을 때 놀라운 점이 없으므로 이해하기 쉽게 적응할 수 있습니다.
이 문서에서는 PowerShell for 루프 문의 기본 사항을 배웠습니다. 구문, 논리, 흐름에 대해 배우고 다양한 목적에 사용하는 방법에 대한 여러 예제를 살펴보았습니다.
PowerShell에는 다른 유형의 루프도 있지만, 하나가 다른 것보다 더 나은 것이라고 말하는 것은 공정하지 않습니다. 모든 것은 코드의 목적과 코드를 작성하는 사람의 선호도에 달려 있습니다.
이 문서에서 습득한 지식을 활용하여 루프를 자동화하여 일상적인 지루한 작업에 더 많이 적용할 수 있어야 합니다.