Netwrix 1Secure는 데이터와 아이덴티티 전반에 걸쳐 통합된 가시성을 제공합니다 - 14일간 무료로 전체 액세스가 가능합니다.무료 평가판 시작

리소스 센터블로그

Powershell 배열을 사용하는 방법

Powershell 배열을 사용하는 방법

Dec 13, 2024

소개

배열은 한 번에 하나 이상의 값을 담을 수 있는 데이터 구조입니다. 동일하거나 서로 다른 데이터 타입의 항목들을 모은 컬렉션 또는 목록이라고 생각하면 됩니다. 배열은 Windows PowerShell을 포함해 많은 스크립팅 및 프로그래밍 언어에서 사용됩니다.

PowerShell에서 배열을 생성하고 사용하는 방법을 자세히 살펴보겠습니다.

객체 배열 생성하기

기본적으로 배열의 각 항목은 문자열이나 정수 같은 다른 데이터 유형이 아니라 객체입니다. 다음은 객체를 명시적으로 추가하여 객체 배열을 만드는 방법의 예시입니다:

      $people = @(

    [PSCustomObject]@{Name='Alice'; Age=30},

    [PSCustomObject]@{Name='Bob'; Age=25}
      

원소가 하나인 배열 만들기

변수에 값 하나만 넣으면 PowerShell은 배열을 생성하지 않습니다. 이를 확인하기 위해 두 개의 스크립트를 사용하고 각각의 데이터 유형을 출력해 보겠습니다.

먼저 PowerShell에서 요소 5개로 구성된 배열을 생성하겠습니다:

      $array = @(1, 2, 3, 4, 5)

$array1.GetType()
      

이제 유사한 스크립트를 사용해 요소 1개짜리 배열을 만들어 보겠습니다:

      $array1 = 1

$array1.GetType()
      

아래 출력에서 볼 수 있듯이, PowerShell은 첫 번째 예제 스크립트에서는 배열(System.Array)을 생성했지만 두 번째에서는 생성하지 않았습니다.

Image

특정 명령을 실행해 객체를 조회하여 배열을 만들고자 한다면, 결과로 몇 개의 객체가 반환될지 미리 알 수 없기 때문에 이러한 동작은 특히 우려됩니다.

이 문제를 해결하려면 ,(쉼표) 연산자를 사용할 수 있습니다. 쉼표가 이항 연산자로 사용되면 일반 배열이 생성되며, 단항 연산자로 사용되면 배열에 요소가 하나만 들어갑니다.

예를 들어, 원소가 하나인 배열을 얻는 방법은 다음과 같습니다:

      $array1 = ,1

$array1.GetType()
      

아래에 표시된 출력으로 배열이 생성되었음을 확인할 수 있습니다:

Image

빈 배열 만들기

PowerShell에서는 연산자 @ 를 사용해 배열(빈 배열 포함)도 만들 수 있습니다. @()를 지정하면 개체가 전혀 없는 배열이 만들어지며, 필요에 따라 만들 수 있습니다. 이는 변수를 배열로 초기화한 다음, 개수에 대해 걱정하지 않고 나중에 배열에 개체를 추가할 수 있게 해주는 편리한 방법입니다.

      $array3 = @()

$array3.GetType()
      
Image

강력한 형식의 배열 만들기

기본적으로 배열의 요소는 서로 다른 데이터 유형을 가질 수 있습니다. 하지만 특정 지정 유형의 값만 허용하는 배열을 만들 수도 있습니다. 다른 유형의 값을 추가하려고 하면 오류가 발생합니다. 가장 일반적인 강력한(typed) 배열을 만드는 방법은 다음과 같습니다:

정수:

      [int[]]$intArray = 1, 2, 3
      

문자열:

      [string[]]$strArray = "one", "two", "three"
      

날짜/시간:

[datetime[]]$dateArray = (Get-Date), (Get-Date).AddDays(1)

다차원 배열(행렬) 만들기

쉼표로 배열을 중첩하면 데이터를 행이나 열 형태로 구조화해 배치할 수 있습니다. 여기서는 3×3 행렬을 생성합니다:

$twoDArray = @(

@(1, 2, 3),

@(4, 5, 6),

@(7, 8, 9)

)

배열 비교, 그룹화, 선택 및 정렬

배열을 작업할 때 유용한 다른 PowerShell cmdlet에는 다음이 포함됩니다:

  • Compare-Object — 두 배열을 비교하고 차이점을 반환합니다.
  • Group-Object — 속성 값에 따라 배열 요소를 그룹으로 묶습니다.
  • Select-Object — 개체 또는 여러 개체의 지정된 속성을 선택하며, 배열에서 특정 개수의 요소를 선택하는 데에도 사용할 수 있습니다.
  • Sort-Object — 아래와 같이 하나의 데이터 유형만 포함하는 배열을 정렬하는 데 사용합니다.
      $array = @(3, 1, 4, 2)
$sortedArray = $array | Sort-Object
      
Image

배열을 순회하기

배열의 각 요소를 하나씩 순서대로 처리하려면 foreach 연산자를 사용해 루프를 만들어야 합니다. 예를 들어 문자열 배열을 선언하고 배열에 있는 각 단어의 길이를 세고 싶다면 다음 스크립트를 실행해야 합니다:

      $array8 = @("Earth","Mercury","Venus","Jupiter","Saturn","Mars", "Neptune", "Pluto")
foreach ($array in $array8) {
 "$array = " + $array.length
}
      

결과는 다음과 같이 보일 것입니다:

Image

파이프라인 사용하기

파이프라인은 PowerShell에서 한 명령의 출력을 다른 명령의 입력으로 전달하는 데 사용됩니다. 배열을 작업할 때는 파이프라인을 사용하여 배열의 데이터를 처리하고 조작한 다음 결과를 새 배열에 할당하거나 기존 배열을 수정할 수 있습니다.

여기서는 각 배열 항목을 2로 곱합니다:

      $numbers = 1,2,3,4,5

$doubled = $numbers | ForEach-Object { $_ * 2 }
      
Image

배열에 추가하기

PowerShell에서 배열의 크기는 한 번 정의되면 변경할 수 없습니다. 하지만 += 연산자는 기존 배열에 항목을 추가(append)하여 새 배열을 만들 수 있게 해 주며, 결과적으로 새로 결합된 배열을 생성하는 것과 같습니다.

      $array = @(1, 2, 3)
$array += 4
      
Image

ArrayList 만들기

큰 배열이거나 항목을 자주 추가해야 하는 경우 += 는 성능에 문제가 될 수 있습니다. 사용할 때마다 새 배열이 생성되고, 기존 요소들이 복사된 후 새 요소가 끝에 추가되기 때문입니다. 이런 경우에는 ArrayList를 사용하는 것이 좋을 수 있습니다.

ArrayList의 크기는 변경 가능하므로, 전체 컬렉션을 다시 만들지 않고도 항목을 추가하거나 제거할 수 있습니다. 일반 배열처럼 ArrayList는 서로 다른 데이터 유형의 항목을 담을 수 있습니다.

다음은 ArrayList를 만드는 cmdlet입니다:

      $array3 = New-Object System.Collections.ArrayList

      

Netwrix Directory Manager 무료 체험판 요청

배열에서 항목 제거하기

이제 ArrayList를 사용해 배열에서 항목을 제거해 보겠습니다. 먼저 배열을 생성하세요.

      $array5 = "one", "two", "three", "four", "five"
$array5.gettype()
      

이제 이를 rrayList에 추가해서 쉽게 수정할 수 있게 하겠습니다.

      [System.Collections.ArrayList]$ArrayList1 = $array5

$ArrayList1.GetType()
      

그다음 .Remove 명령을 사용합니다.

      $ArrayList1.Remove("three")

      
Image

배열 지우기

배열을 삭제하는 명확한 방법은 없지만, 배열의 내용을 제거(지우기)하는 방법은 여러 가지가 있습니다. 한 가지 방법은 변수 $null을 배열에 할당하는 것입니다:

      $array7 = $null
$array7
      

배열을 지우는 또 다른 방법은 다음과 같습니다:

      $array = @("element1", "element2", "element3")

$array = @()
      

다음은 ArrayList를 지우는 방법입니다:

      $arrayList = New-Object System.Collections.ArrayList
$arrayList.Add("element1")
$arrayList.Add("element2")
$arrayList.Clear()
      

배열 출력

배열의 내용을 표시하는 가장 쉬운 방법은 배열 변수를 그대로 참조하는 것입니다. 아래 예에서는 배열의 각 항목 앞에 텍스트 “Element:”를 포함하는 방법을 보여줍니다:

Image

.txt 파일에 쓰려면 다음을 사용하세요: Out-File 명령:

      $var5 | Out-File C:scriptsarray.txt

      

.csv 파일로 내보내려면 다음을 사용하세요: Export-Csv 명령:

      $var6 | Export-Csv -Path C:scriptsarray.csv

      

배열 필터링

다음 Where-Object cmdlet을 사용하면 배열에서 짝수만 가져올 수 있습니다:

      $numbers = 1,2,3,4,5,6

$evenNumbers = $numbers | Where-Object { $_ % 2 -eq 0 }

$evenNumbers
      
Image

대신 .Where() 메서드를 사용할 수도 있습니다. 이 메서드는 파이프라인이 필요하지 않습니다:

      $numbers = 1,2,3,4,5,6

$evenNumbers = $numbers.Where({ $_ % 2 -eq 0 })

$evenNumbers

      

배열의 길이 확인하기

배열의 요소 개수를 반환하려면 .length 매개변수를 사용합니다:

      $array6 = 1,2,3,4,5,6
echo $array6.Length
      
Image

배열에 특정 값이 포함되어 있는지 확인하기

배열의 요소 중 하나라도 특정 값이 포함되어 있는지 확인하려면 Contains 메서드를 사용합니다. 이 코드는 배열에 2 또는 12가 포함되어 있는지 여부를 표시합니다:

      $array7 = 1,2,5,8,3,4,5
$array7.Contains(2)
$array7.Contains(12)
      
Image

배열 인덱스를 사용하여 항목에 액세스하기

대부분의 프로그래밍 언어와 마찬가지로 PowerShell 배열의 각 항목은 인덱스로 접근할 수 있습니다. 배열 인덱스는 0부터 시작하므로, 항목 3개로 이루어진 배열에서는 첫 번째 항목이 인덱스 0, 두 번째 항목이 인덱스 1, 세 번째 항목이 인덱스 2에 해당합니다.

배열 인덱스를 사용해 항목에 액세스하려면 배열 변수 뒤에 대괄호로 인덱스를 지정해야 합니다. 아래는 두 번째 요소를 표시하는 배열을 만드는 방법에 대한 예시입니다:

      $colors = "Red", "Green", "Blue", "Yellow"

$secondColor = $colors[1]

Write-Output $secondColor
      
Image

음수 인덱스를 사용하면 배열의 끝에서부터 항목에 접근할 수 있습니다. -1은 마지막 항목을, -2는 마지막에서 두 번째 항목을 의미하며, 등등입니다.

Join 연산자와 Split 연산자 사용하기

PowerShell에서 join 연산자는 문자열 배열을 단일 문자열로 연결(추가)하는 데 사용하며, 선택적으로 지정된 구분 기호(delimiter)를 사용할 수 있습니다. 아래는 구분 기호를 사용하지 않은 예시입니다.

      $array = "Power", "Shell"

$joined = $array -join ""

# Output: "PowerShell"
      

다음은 구분 기호를 사용하는 경우의 예입니다:

Image

split 연산자는 기본적으로 join 연산자의 반대 동작을 수행합니다. 아래 예시를 확인하세요:

      $string = "apple,banana,grape"
$fruits = $string -split ","
      
Image

Replace 연산자 사용하기

replace 연산자는 한 문자열을 다른 문자열로 바꾸는 데 사용합니다. cmdlet 구조는 다음과 같습니다:

      <originalString> -replace <patternToFind>, <replacementString>

      

다음은 “Hello World”를 “PowerShell”로 바꾸는 예시입니다:

      $string = "Hello World"

$newString = $string -replace "World", "PowerShell"

      
Image

배열 슬라이싱

여기서 보이는 것처럼 범위를 지정하면 하위 배열을 만들 수 있습니다:

      $array = 1,2,3,4,5,6,7,8,9

$subset = $array[3..6]

      

배열 뒤집기

다음은 배열 요소의 순서를 뒤집는 방법에 대한 예시입니다:

      $numbers = 1..5

[Array]::Reverse($numbers)
      

결론

배열은 대부분의 스크립팅 및 프로그래밍 언어에서 기본적인 데이터 구조입니다. 배열을 사용하면 다양한 데이터 유형의 항목들을 모아 저장하고, 검색하며, 조작할 수 있기 때문입니다. 배열을 이해하면 PowerShell을 사용해 작업을 자동화하는 능력이 향상됩니다.

이제 Netwrix가 도와드립니다

더 효율적이고 효과적으로 Active Directory 및 Entra ID (Azure AD) 환경을 보안해야 하나요? Netwrix Directory Manager 를 고려해 보세요. 자동화된 그룹 및 사용자 관리 기능은 data breach 위험을 낮추는 동시에 시간 낭비를 유발하는 수작업 관리 업무를 없애줍니다.

Netwrix Directory Manager를 통해 다음을 수행할 수 있습니다:

  • HR 정보 시스템(HRIS)에서 Active Directory, Entra ID 및 SCIM을 지원하는 애플리케이션으로 사용자 등록 및 등록 해제를 자동화하세요. 이를 통해 신규 직원이 빠르게 업무를 수행할 수 있고, 공격자가 오래된(유효하지 않은) 계정을 장악할 위험을 크게 줄일 수 있습니다.
  • HRIS에 기록된 직원의 승진이나 다른 역할로의 전환 같은 변경 사항을 기준으로 디렉터리 그룹을 자동으로 업데이트하세요. 이 자동화는 보안 및 규정 준수를 위해 필요한 수준에서 접근 권한을 거의 실시간으로 최신 상태로 유지하는 동시에, IT 팀의 시간을 절약해 줍니다.
  • 그룹 및 사용자 관리를, 누가 어떤 권한에 접근해야 하는지를 가장 잘 아는 담당자에게 위임하세요. 간단한 워크플로를 통해 업무 부서 책임자가 자신의 그룹을 검토하고 사용자 액세스 요청을 승인 또는 거부할 수 있으며, 디렉터리 내에서 과도한 권한을 가진 그룹과 사용자가 존재할 위험을 줄일 수 있습니다.
  • 자동화된 사용자 생성, 만료 및 삭제로 디렉터리를 깔끔하게 유지하고 관리하기 쉽게 만드세요.
  • 깊이 있는 인사이트, 효과적인 자동화, 그리고 그룹 및 구성원에 대한 명확한 리포팅을 통해 규정과 표준에 대한 컴플라이언스를 유지하고 입증하세요.

Windows PowerShell 스크립팅의 기본을 마스터하세요

자세히 알아보기



공유하기

더 알아보기

저자 소개

Asset Not Found

Jonathan Blackwell

소프트웨어 개발 책임자

2012년부터 엔지니어이자 혁신가인 Jonathan Blackwell은 엔지니어링 리더십을 제공해 Netwrix GroupID를 Active Directory 및 Azure AD 환경에서 그룹 및 사용자 관리 분야의 최전선에 올려놓았습니다. 개발, 마케팅, 영업에서의 그의 경험을 통해 Jonathan은 Identity 시장과 구매자가 생각하는 방식까지 완전히 이해할 수 있습니다.