PowerShell For Loop, While Loop 및 기타 루프 사용 방법

이 기사에서는 PowerShell For 루프, While 루프, Do-While 루프 및 Do-Until 루프를 검토합니다. PowerShell 루프가 어떻게 구성되는지와 루프에 입력 또는 종료 조건을 정의하는 방법에 대해 설명하겠습니다.

PowerShell For 루프

For 루프는 카운팅 루프이며, 특정 횟수로 작업을 반복하거나 컬렉션을 처리하거나 인덱스 번호로 항목을 지정해야 할 때 주로 사용됩니다. 테스트 조건이 true로 평가될 때까지 반복되며 false일 때 종료됩니다.

PowerShell For Loop

For 루프의 구문은 다음과 같습니다:

for (<Init>; <Condition>; <Repeat>) {

<Script Block>

}
  • <Init> 블록은 루프가 시작되기 전에 명령 또는 명령 세트를 실행합니다. 보통 여기에는 카운팅 변수를 초기화하는 곳입니다.
  • <Condition> 섹션에서 조건부 테스트를 평가합니다. 이것이 true이면 루프에 진입하여 스크립트 블록에서 명령을 실행합니다. 그런 다음 조건이 false이 될 때까지 다시 평가됩니다.
  • <Repeat> 플레이스홀더는 각 루프 반복에서 쉼표로 구분된 하나 이상의 명령을 실행합니다. 보통 카운팅 변수를 수정하는 데 사용됩니다.

특정 작업을 다섯 번 반복하려면 다음 예를 사용하십시오:

데이터 보호

어디에 민감한 데이터가 저장되어 있는지 파악하고 해당 데이터와 관련된 위험을 평가하며, ManageEngine의 데이터 보호 소프트웨어인 DataSecurity Plus를 사용하여 정책 기반 데이터 보호 조치를 시행하세요. 완전 기능을 갖춘 30일 무료 평가판으로 오늘 바로 시작해 보세요.

Learn More

for ($var = 1; $var -le 5; $var++) {

Write-Host The value of Var is: $var

}

Write-Host End of for loop.
A PowerShell loop repeating the same operation five times

여기서 변수는 값 1로 초기화되어 5보다 작으므로 루프에 들어가고 스크립트 블록을 실행합니다. 각 반복마다 변수의 값이 1씩 증가하고 해당 조건을 평가하여 결과가 false가 될 때까지 실행됩니다.

조건은 시작할 때 평가되므로 결과가 false이면 명령 블록이 실행되지 않습니다.

for ($var = 6; $var -le 5; $var++) {

Write-Host The value of Var is: $var

}

Write-Host End of for loop.
If the initial condition if false, the loop won’t be executed

필요한 경우 논리 연산자를 사용하여 더 많은 조건을 지정할 수 있습니다. 이 경우에는 여러 조건을 추가했습니다. 그리고 논리 연산자 -and는 두 조건이 모두 true일 때만 true를 리턴하므로 표현식 $var -ne 3이 false 상태에 도달하면 루프가 중단됩니다.

for ($var = 1; $var -le 5 -and $var -ne 3; $var++) {

Write-Host The value of Var is: $var

}

Write-Host End of for loop.
We added another condition to stop the script when the variable reaches a false state.

앞서 설명한 대로 <Init> 및 <Repeat> 자리 표시자에 하나 이상의 명령을 실행할 수 있습니다. 아래 예에서는 초기 값이 1인 변수 $var1이 루프를 멈출 때까지 5보다 작거나 같은지 테스트되는 것이 평가됩니다.

그러나 초기 값이 5인 두 번째 변수 $var2도 있습니다. 이 변수는 감소하지만 조건의 일부로서는 평가되지 않습니다.

for (($var1 = 1), ($var2 = 5); $var1 -le 5; ($var1++), ($var2--)) {

Write-Host The value of Var1 is: $var1

Write-Host The value of Var2 is: $var2

}

Write-Host End of for loop.
Two different variables are being updated 

PowerShell 루프 조건 정의 방법

PowerShell에서 명령은 순차적으로 실행됩니다. 그러나 때로는 특정 조건이 충족될 때까지 명령이나 명령 세트를 반복해야 할 수도 있습니다. 이를 루프(loop)라고 합니다.

PowerShell에서 루프에 진입하거나 빠져나가는 조건을 정의하려면 비교 연산자(comparison operators)를 사용해야 합니다. 이러한 연산자를 사용하면 값들을 비교하거나 특정 패턴과 일치하는 값을 찾을 수 있습니다. 결과는 루프 로직에서 평가되는 불리언 값( 참(true) 또는 거짓(false))이 됩니다.

숫자 값을 비교하는 데 비교 연산자를 사용할 수 있습니다:

Operation Result
2 -eq 2 True
2 -eq 5 False
3 -gt 7 True
5 -lt 3 False

또한 비교 연산자를 사용하여 문자열 값을 비교할 수도 있습니다:

데이터 보호

어디에 민감한 데이터가 저장되어 있는지 파악하고, 그에 따른 위험을 평가하며, ManageEngine의 데이터 보호 소프트웨어 DataSecurity Plus로 정책 기반 데이터 보호 조치를 시행하세요. 완전 기능을 갖춘 30일 무료 평가판으로 오늘 바로 시작하세요.

Learn More

Operation Result
‘PowerShell’ -eq ‘powershell’ True
‘PowerShell’ -eq ‘cmd’ False
‘PowerShell’ -like ‘power*’ True
‘PowerShell’ -notlike ‘*shell’ False

PowerShell Foreach 루프

Foreach 루프은 컬렉션의 항목을 반복하는 데 사용됩니다. 이 시나리오에서는 평가할 조건이 없지만 루프는 컬렉션의 모든 항목이 처리될 때까지 반복됩니다.

<Figure Foreach_Diagram.png>

The syntax for a Foreach loop is the following:

foreach ($<item> in $<collection) {

<Script Block>

}

여기에서는 먼저 foreach 문을 시작하고, 반복할 변수와 컬렉션이 포함된 대괄호가 따릅니다. 그런 다음 실행될 스크립트 블록이 나옵니다. 변수는 자동으로 생성되며 루프 각 실행 전에 배열에서 값을 할당받습니다.

다시 말해서 루프를 다섯 번 실행하려면 다섯 개의 항목이 있는 컬렉션이 필요합니다. 이 경우 1에서 5까지의 정수 값들이 해당됩니다:

$collection = 1..5

foreach ($item in $collection) {

Write-Host The value of Item is: $item

}

Write-Host End of foreach loop
We ran a PowerShell ForEach loop with a collection of five items.

변수는 컬렉션의 첫 번째 값인 1로 초기화되고, 그런 다음 스크립트 블록이 실행됩니다. 다음 반복에서 변수는 배열의 다음 항목, 즉 2로 할당됩니다. 스크립트 블록은 컬렉션의 모든 항목이 처리될 때까지 다시 처리됩니다.

예를 들어, 컴퓨터에서 작동 중인 첫 다섯 서비스를 처리하려면 루프는 다음과 같을 것입니다:

foreach ($service in (Get-Service | Select-Object -First 5)) {

Write-Host Service name is: $service.name and status is $service.status

}
This script shows the first five services working on our computer

Foreach 루프와 Foreach-Object 명령어 사이에는 차이가 있다는 것을 이해해야 합니다. 혼동하기 쉽습니다. Foreach 루프는 항상 Foreach 문으로 시작하지만, Foreach-Object 명령은 객체를 처리하는 중계 관로와 함께 명령어를 따릅니다.

PowerShell While loop

PowerShell의 While문은 조건이 true로 평가될 때 명령 또는 명령 집합을 실행하는 루프를 생성하는 데 사용됩니다. 스크립트 블록을 실행하기 전에 조건을 확인합니다. 조건이 true인 동안 PowerShell은 조건이 false가 될 때까지 스크립트 블록을 실행합니다.

Diagram showing how a PowerShell While loop works

While 루프의 구문은 다음과 같습니다:

while (<Condition>){<Script Block>}

예를 들어, 초기 값이 1인 var 변수가 있고 루프를 다섯 번 반복하려면 다음 구조를 따라야 합니다:

데이터 보호

어떤 민감한 데이터가 어디에 저장되어 있는지 파악하고 관련 위험을 평가한 후 ManageEngine의 데이터 보호 소프트웨어 DataSecurity Plus로 정책 기반 데이터 보호 조치를 구현하세요. 완전 기능을 갖춘 30일 무료 평가판으로 오늘 시작하세요.

Learn More

$var = 1

while ($var -le 5)

{

Write-Host The value of Var is: $var

$var++

}

Write-Host End of While loop.
Example of a loop running five times

위 예에서 변수는 루프 외부에서 초기화되고 스크립트 블록 내에서 증가합니다. Write-Host cmdlet은 루프 각 주기에서 변수의 값을 출력하는 데 사용됩니다.

조건이 처음에 false이라면 루프가 실행되지 않음에 유의하는 것이 중요합니다. 예를 들어, 변수에 값이 있었다면 (var = 6), 루프 명령이 작동되지 않고 스크립트 블록이 실행되지 않았을 것입니다.

$var = 6

while ($var -le 5)

{

Write-Host The value of Var is: $var

$var++

}

Write-Host End of While loop.
The result of the loop if the initial condition is false

논리 연산자를 사용하여 더 복잡한 조건을 사용할 수 있습니다. 예를 들어, 변수가 5 미만이고 3과 같지 않기를 원하는 경우 루프는 다음과 같을 것입니다:

$var = 1

while ($var -le 5 -and $var -ne 3)

{

Write-Host The value of Var is: $var

$var++

}

Write-Host End of While loop.
Running the loop with a variable we want to be less than 5 and not equal to 3

이전에 언급했듯이, 논리 연산자 -and를 사용할 때는 양쪽 조건 테스트 모두 true로 평가될 때에만 결과가 true가 됩니다. 이 경우, 변수에 값 3이 할당되었을 때, 두 번째 조건이 false가 되므로: 이는 false 결과를 초래하여 루프를 중지시킵니다.

PowerShell Do-While 루프

A Do-While loop is a variant of the While loop, and the main difference is that the script block is executed before the condition is checked. This means that even if the start condition is false, the script block will be executed at least once.

Diagram showing how a PowerShell Do-While loop works

Do-While 루프의 구문은 다음과 같습니다:

do {

<script block>

} while (<condition>)

그러므로, 위의 예시를 사용한다면 코드는 다음과 같을 것입니다:

$var = 1

do {

Write-Host The value of Var is: $var

$var++

} while ($var -le 5)

Write-Host End of Do-While loop.
Running a Do-While loop

변수 var = 6에 대해 Do-While 루프를 실행합니다. 여기서 루프는 조건이 false임을 확인하기 전에 한 번 실행될 것입니다.

$var = 6

do {

Write-Host The value of Var is: $var

$var++

} while ($var -le 5)

Write-Host End of Do-While loop.
The script was still executed even though the initial condition was false.

다시 한 번, 논리 연산자를 사용하는 것도 가능합니다. 이전과 같은 예제를 사용한다면, 변수의 값이 3일 때 루프가 중지되는 것을 볼 수 있습니다. 왜냐하면 변수가 5 미만이고 3과 같지 않기를 원했기 때문입니다:

데이터 보호

민감한 데이터가 어디에 저장되어 있는지 파악하고,それに 관련된 위험을 평가하며,ManageEngine의 데이터 보호 소프트웨어인 DataSecurity Plus를 사용하여 정책 기반 데이터 보호 조치를 구현합니다. 오늘 30일간의 완전한 기능의 무료 평가판을 통해 시작해 보세요.

Learn More

$var = 1

do {

Write-Host The value of Var is: $var

$var++

} while ($var -le 5 -and $var -ne 3)

Write-Host End of Do-While loop.
The script stops because we wanted our variable to be less than 5 and not equal to 3

PowerShell Do-Until 루프

Do-Until 루프는 Do-While 루프와 동일한 방식으로 작동합니다: 스크립트 블록을 먼저 실행한 다음 조건을 평가합니다. 차이점은 Do-While 루프가 true 조건으로 루프에 들어가는 반면, Do-Until 루프는 루프에 들어가기 위해 false 조건을 찾는다는 것입니다.

Diagram showing how a PowerShell Do-Until loop works

Do-Until 루프의 구문은 다음과 같습니다.

do {

<script block>

} until (<condition>)

보시다시피 구조가 Do-While 루프와 거의 동일합니다. 그러나 이전 예제를 계속 사용하면 결과가 어떻게 되는지 살펴보겠습니다.

$var = 1

do {

Write-Host The value of Var is: $var

$var++

} until ($var -le 5)

Write-Host End of Do-Until loop.
The Do-Until loop is not triggered as it needs an initial false result

조건부 테스트가 true로 평가되므로 Do-Until 루프가 트리거되지 않습니다. 루프에 들어가고 머물려면 false 결과가 필요합니다. 이 경우 루프를 5번 반복하려면 논리 연산자를 크다 (-gt)로 변경해야 합니다. 이는 처음 5번의 반복에서 false 결과를 반환합니다.

$var = 1

do {

Write-Host The value of Var is: $var

$var++

} until ($var -gt 5)

Write-Host End of Do-Until loop.
Changing the logical operator to ‘greater than’ provides us a false result for the first iterations of the loop

다시 말하지만, 루프에 들어가고 머물려면 초기 조건이 false여야 하므로, 더 복잡한 표현식을 정의해야 하는 경우에도 논리 연산자에 영향을 미칩니다.

다음 예에서는 반복문을 변수가 5보다 크거나 3과 같아질 때까지 (필요하지 않은 false 결과) 반복하도록 설정하기 위해 -or 연산자를 사용해야 합니다. 변수가 5보다 크고 3과 동시에 같아져야 하는 -and 연산자를 사용할 수 없었기 때문에 무한 루프가 발생했습니다.

$var = 1

do {

Write-Host The value of Var is: $var

$var++

} until ($var -gt 5 -or $var -eq 3)

Write-Host End of Do-Until loop.
We use the -or operator to have the Do-Until loop repeat until our variable is greater than 5 or equal to 3

PowerShell 루프 제어 방법

루프에서 실행 흐름을 제어하는 방법은 키워드를 사용하여 조건을 평가하지 않고 루프를 종료하거나 현재 반복을 건너뛸 수 있습니다. 이러한 키워드는 때때로 유용할 수 있지만 스크립트를 읽기 어렵게 만들 수 있으므로 항상 추천되지는 않습니다.

break 문

break 문은 현재 루프를 즉시 중지하고 종료하며, 루프의 스크립트 블록의 나머지 코드를 실행하지 않고 지정된 조건을 평가하지 않습니다. 이를 통해 PowerShell은 나머지 코드를 계속 실행할 수 있습니다.

break 키워드는 사용된 루프의 종류와 관계없이 동일하게 작동합니다. 앞서 언급된 예제 중 하나를 사용하여 1부터 5까지 세어보고, 세는 변수가 세가 되면 루프를 종료할 것입니다. 그러나 이번에는 테스트 조건에 논리 연산자를 사용하는 대신 break를 추가해 보겠습니다.

데이터 보호

어디에 민감한 데이터가 저장되어 있는지 파악하고 그에 따른 위험을 평가하고 정책 기반 데이터 보호 조치를 DataSecurity Plus, ManageEngine의 데이터 보호 소프트웨어로 시행하세요. 완전 기능을 갖춘 30일 무료 평가판을 통해 오늘부터 시작하세요.

Learn More

이를 위해 if을 사용하여 종료 기준을 정의합니다.

For ($var = 1; $var -le 5; $var++) {

if ($var -eq 3) {break}

Write-Host The value of Var is: $var

}

Write-Host End of for loop.
We’ve used a break statement instead of using logical operators to stop the script

세는 변수의 값이 3과 같을 때, if 문이 트리거되고 break 키워드가 실행됩니다. break 키워드가 스크립트 블록 내 Write-Host 명령어 이전에 배치되었기 때문에 후자는 처리되지 않습니다. 루프가 중지되고 스크립트는 나머지 코드를 실행합니다.

continue 문

continue 문을 사용하여 코드의 나머지 부분을 건너뛰고 루프의 처음으로 돌아가 빠져나가지 않습니다.

이전 예제와 마찬가지로 For 루프를 사용할 것이지만, 이번에는 계수 변수가 3에 도달했을 때 루프를 종료하는 대신 PowerShell은 현재 반복에서 남은 코드를 건너뛰고 조건 테스트가 false일 때까지 루프를 계속합니다.

for ($var = 1; $var -le 5; $var++) {

if ($var -eq 3) {Continue}

Write-Host The value of Var is: $var

}

Write-Host End of for loop.
The if statement is triggered when the value of the variable is equal to 3

변수 값이 3과 같을 때 if 문이 트리거되고 continue 문이 실행됨을 알 수 있습니다. 그런 다음 코드 내의 나머지 부분을 건너뜁니다.

결론

PowerShell은 다양한 종류의 루프를 지원하며, 스크립트를 단순화하고 일정한 방식으로 특정 작업을 반복하는 데 어떻게 도움을 줄 수 있는지 이해하는 것이 정말 중요합니다. Petri에서 PowerShell 팁 및 트릭에 대해 광범위하게 다루었으므로 반드시 PowerShell 스크립트 작성ForEach 병렬 옵션 사용에 관한 다른 가이드를 확인하세요.

관련 기사:

Source:
https://petri.com/how-to-use-powershell-for-while-loops/