때 종종 PowerShell 스크립트를 작성하는,당신은 방법이 필요를 저장하는 설정의 항목입니다. 이를 달성하는 일반적인 방법 중 하나는 ArrayList 로 알려진 배열 또는 특정 유형입니다. 그러나 어쨌든 배열은 무엇입니까? 배열은 항목 모음을 저장하도록 설계된 데이터 구조입니다. 여기에는 동일한 항목과 다른 유형의 항목이 모두 포함될 수 있습니다.

배열은 많은 다른 프로그래밍 언어에서 사용되며 PowerShell 은 다르지 않습니다. 배열을 생성,조작 및 최적화하는 방법에는 여러 가지가 있습니다., 이 기사에서는 PowerShell 과 함께 적용 할 때 ArrayLists,배열 및 컬렉션뿐만 아니라 몇 가지 모범 사례에 대해 배우게됩니다.

테이블의 내용.

전제 조건/요구사항

때문에 당신과 함께 일하고 있 PowerShell 언어 자체가 없는 필수 환경 구성 요소. 당신은 단지 PowerShell 과 윈도우 PC 가 필요합니다. 특히

  • Windows PowerShell3 이상
  • .NET Framework4.5 이상

더 원한 끝이 같은가?, 체크인 나 개인적인 PowerShell 블로그:https://nkasco.com/FriendsOfATA

배열 생성 PowerShell

는 많은 다른 방법으로 배열을 만들과 함께 있습니다. 아래 그림과 같이 어떻게 든 처리해야하는 이름 목록이 있다고 가정 해 보겠습니다.

JohnSusieJimJohnnyCarrie

배열을 통해 쉼표로 구분한 요소

가장 기본적인 방법을 만들 수 있습 배열은 단순히 할당 알려진 입력을 쉼표로 분리하는 변수로는 아래와 같습니다.,

$BasicArray = "John", "Susie", "Jim", "Johnny", "Carrie"

를 실행하는 경우GetType()사용할 수 있는 방법에는 모든 개체에 PowerShell,당신이 볼 수 있는 성공적으로 만들어진 배열로 표시된BaseType속성을 아래와 같습니다.

PS51> $BasicArray.GetType()IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Object System.Array

를 사용하 Sub-식 Operator

을 만들 수도 있습 배열을 통해 PowerShell sub-식 연산자입니다. 이 개념은 일반적으로 배열에 추가 할 항목 수를 모를 때 사용됩니다. 결과는 생성 될 때 0 또는 많은 항목을 포함 할 수 있습니다.,

주의 아래$MyArray라는 배열이 내부에 제로 요소로 생성되었습니다.

#Create an empty array with the sub-expression operatorPS51> $MyArray = @()PS51> $MyArray.count0

를 사용하는 범위 Operator

배열되지 않는 이관하여 저장할 문자열로 표시됩니다. 정수와 같은 다른 객체 유형으로 배열을 만들 수도 있습니다.

필요할 경우 정수 배열에서 순차적으로,당신이 걸릴 수 있습니다 바로 가기를 사용하여 범위를..연산자입니다. 아래에서 한 줄의 코드로 정수 2~5 로 배열이 생성 된 것을 볼 수 있습니다.,

PS51> $NumberedArray = 2..5PS51> $NumberedArray2345

만들기 PowerShell ArrayList 집

를 사용하여 PowerShell ArrayList 한 방법으로 저장할 수 있는 항목의 목록과 함께 있습니다. ArrayList 클래스는 시스템의 일부입니다.이 유형의 새 객체를 생성하여.net.내의 컬렉션 네임 스페이스 그런 다음 ArrayList 내에 객체를 저장할 수 있습니다.

아래는 당신이 볼 수있는 당신을 명시적으로 만들 ArrayList 객체를 사용하는New-Objectcmdlet 또는 캐스팅하여 표준 배열을 ArrayList 개체입니다.,

통지를 하는 경우에는BaseType은 개체는 반면 위의 예 BaseTypes 의 배열을 전시 하는 상속에서 클래스입니다. 궁극적으로 PowerShell 은.NET 유형 시스템에 대한 액세스를 제공하고 있습니다.

배열에 항목 추가

배열을 만들 때 생성시 모든 요소를 정의하거나 ad-hoc 을 추가 할 수 있습니다.

요소를 추가하려면 기존의 수집,사용할 수 있습니다+=운영자 또는Add방법입니다. 그러나 그들이 어떻게 운영되는지에 큰 차이가 있음을 알아라.,

경우를 만들 표준으로 배열@(),당신이 사용하는+=운영자 하지만 요소를 추가하는 배열을 사용하는Add방법입니다. 이러한 방법에 차이가 있는+=operator 실제로 파괴 기존 배열을 새로 생성된 새로운 항목입니다.

입증하기 위해,당신은 아래 참조할 수 있는IsFixedSize속성에 대한 배열 또는 ArrayList 을 알고는 불변과는하지 않습니다.,

PS51> $BasicArray.IsFixedSizeTruePS51> $MyArrayList.IsFixedSizeFalse

기본 배열은 고정 된 크기의 모음이므로 수정할 수 없습니다.

고정 크기 인 배열을 사용하여Add()메서드를 사용하려고하면 고정 크기로 인해 오류가 발생합니다. 아래에서 배열에 항목을 성공적으로 추가 할 수있는 몇 가지 예를 볼 수 있습니다.

#Does NOT work$BasicArray.Add("Nate")#Works$BasicArray += "Nate"$MyArrayList.Add("Nate")$MyArrayList += "Nate"

항목을 제거에서 배열

이제는 당신의 더 나은 이해가 있는 항목을 추가하는 방법을 배열에 의한 몇 가지 방법으로 항목을 제거할 수 있습니다에서 훌륭한 기능들을 가지고 있습니다.,기본 배열이 고정되어 있으므로 항목을 제거 할 수 없습니다. 대신 완전히 새로운 배열을 만들어야합니다. 예를 들어 포함하려는 요소와 만 일치하는 조건문을 만들어 배열에서 단일 요소를 제거 할 수 있습니다. 예가 아래에 나와 있습니다.

$NewBasicArray = $BasicArray -ne "Nate"

이후 ArrayList 지 않을 수정할 수 있습는 요소를 제거에서 사용하여 그들을Remove()방법입니다. 이것은 항목을 자주 추가/제거하려는 경우 ArrayList 를 사용하면 이익을 얻을 수있는 시나리오 중 하나입니다.,

$MyArrayList.Remove("Nate")

를 검색하는 특정 항목에서 배열 또는 ArrayList

를 검색하는 특정 항목에서 배열 또는 배열을 사용할 수 있는 많은 다른 방법이 있습니다. PowerShell 의 다른 객체와 마찬가지로 단순히 객체를 호출하여 배열의 모든 요소에 액세스 할 수 있습니다.

PS51> $BasicArrayJohnSusieJimJohnnyCarrie

아마도 당신만을 검색하는 첫 번째 요소,배는 항상 있을 것이 있는 원산지의 0 을 대표하는 첫 번째 요소의 배열입니다. 배열의 첫 번째 요소를 검색하려면 아래 그림과 같이 괄호 안에 인덱스 번호를 지정하십시오.,

PS51> $BasicArrayJohn

반대로,참조할 수도 있 인덱스의 뒤를 사용하여 대시(부정적인 표시)를 호출 마지막 X 요소의 개수에서 배열입니다. 배열의 마지막 요소를 찾는 일반적인 방법은 아래 그림과 같이-1를 사용하는 것입니다.

PS51> $BasicArrayCarrie

범위의 운전자가 당신에 대해 알게 위에도 사용될 수 있습을 검색하의 개체 배열해 다음과 같은 메소드를 호출하는 요소입니다. 의 당신이$BasicArray배열에서 처음 네 이름을 검색 할 가정 해 봅시다.,

아래에서 처음 네 요소를 반환하는 인덱스 0-3 의 범위를 지정할 수 있습니다.

PS51> $BasicArrayJohnSusieJimJohnny

배열 최적화 PowerShell

이제 당신은 좋은 기반을 만드는 방법의 조작,배열하는 한 사용해야 합니까? 이에 답하기 위해Measure-Commandcmdlet 으로 몇 가지 예를 살펴 보겠습니다. 를 사용하는Measure-Commandcmdlet,당신은 더 나은 방법에 대해 이해 명령어를 복용하는 프로세스 요소로 그들은 아래로 통과 파이프 라인에 있습니다.,일반적으로 말하자면,작은 객체 컬렉션이있는 경우 배열을 조작하는 방법과 많은 차이를 느끼지 못할 가능성이 큽니다. 당신이 개체의 큰 컬렉션이있는 경우 그러나,최적의 결과를 달성하기 위해 차이를 이해하는 것이 중요하다.

적용하자는 무슨을에서 배운 것은 이전 섹션의 차이에 대해+=고 사용하는Add()방법으로 반복의 50,000 항목입니다.

먼저 아래 그림과 같이 빈 배열과 빈 ArrayList 를 만듭니다.,

PS51> $MyArray = @()PS51> $MyArrayList = @()

다음으로,채워 50,000 요소 각각의 컬렉션에 사용하는 범위의 운전자와 foreach 루프로 아래와 같습니다.

@(0..50000).foreach({$MyArray += $_})@(0..50000).foreach({$MyArrayList.Add($_)})

마지막으로,포장 명령을 표현하고 전달하는 표현을Measure-Command합니다. Measure-Command로 표현식을 실행하면 각 프로세스가 실제로 실행하는 데 걸리는 시간을 볼 수 있습니다.

에서 유지하는 마음으로 당신이 배웠기 전에,+=실제로 만드는 새로운 배열이 아닌 추가하면 고정된 하나입니다.,그 결과는 다음과 같습니다. 거의 60 초 대 139 밀리 초!보시다시피 고정 크기 배열을 사용하는 것보다 큰 컬렉션에 ArrayList 를 활용하는 것이 훨씬 빠릅니다.이것이 기본적인 예이지만 코드가 처리하는 동안 수행하는 작업을 이해하는 것이 중요하다는 점을 강조합니다. 제대로 이해하지 못하면 사용자 경험이 좋지 않을 수 있습니다.,

경우에 당신이 어떤 기존는 스크립트를 사용 혜택을 누릴 수 ArrayList 보다는 오히려 배 이상 현저히 지장이 있다고 환상적인 기회를 만들어 야간 개선!

추가 읽기

  • 비교 배열 PowerShell
  • 을 만드는 방법을 배열 성능을 위해서 PowerShell(MCPmag)

더 원한 끝이 같은가? 내 개인 PowerShell 블로그를 확인하십시오:https://nkasco.com/FriendsOfATA.나는 이것을 할 수 없다.