często pisząc skrypty PowerShell, potrzebujesz sposobu na przechowywanie zestawu elementów. Jednym z powszechnych sposobów osiągnięcia tego celu jest użycie tablicy lub określonego typu znanego jako ArrayList. Ale czym w ogóle jest tablica? Tablica jest strukturą danych, która jest przeznaczona do przechowywania kolekcji elementów. Może to obejmować zarówno te same, jak i różne rodzaje przedmiotów.

tablice są używane w wielu różnych językach programowania i PowerShell nie jest inny. Istnieje wiele sposobów tworzenia, manipulowania i optymalizacji tablic., W tym artykule dowiesz się o tablicach, tablicach i kolekcjach, a także o najlepszych praktykach stosowania ich za pomocą PowerShell.

spis treści

wymagania wstępne/wymagania

ponieważ będziesz po prostu pracować z samym językiem PowerShell, nie ma żadnych wymagań środowiskowych. Wystarczy mieć komputer z systemem Windows z PowerShell. Dokładniej:

  • Windows PowerShell 3 lub nowszy
  • . NET Framework 4.5 lub nowszy

chcesz więcej takich porad?, Sprawdź mój osobisty blog PowerShell pod adresem: https://nkasco.com/FriendsOfATA

tworzenie tablic za pomocą PowerShell

istnieje wiele różnych sposobów tworzenia tablic za pomocą PowerShell. Załóżmy, że masz listę nazwisk, które musisz jakoś przetworzyć, jak pokazano poniżej.

JohnSusieJimJohnnyCarrie

budowanie tablic za pomocą elementów oddzielonych przecinkami

najbardziej podstawowym sposobem tworzenia tablic jest po prostu przypisanie znanych wejść oddzielonych przecinkami do zmiennej, jak pokazano poniżej.,

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

jeśli uruchomisz metodęGetType()dostępną dla wszystkich obiektów w PowerShell, zobaczysz, że pomyślnie utworzyłeś tablicę zgodnie z właściwościąBaseType pokazaną poniżej.

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

za pomocą operatora pod-wyrażenia

można również tworzyć tablice w PowerShell za pomocą operatora pod-wyrażenia. Ta koncepcja jest powszechnie używana, gdy nie wiesz, ile elementów zostanie dodanych do tablicy. Wynik może zawierać zero lub wiele elementów Po utworzeniu.,

tablica o nazwie$MyArray została utworzona z zerowymi elementami wewnątrz.

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

Korzystanie z operatora zakresu

tablice nie są po prostu relegowane do przechowywania łańcuchów, jak pokazano powyżej. Można również tworzyć tablice z innymi typami obiektów, takimi jak liczby całkowite.

Jeśli potrzebujesz tablicy liczb całkowitych w kolejności sekwencyjnej, możesz użyć skrótu i użyć operatora range ... Poniżej możesz zobaczyć tablicę z liczbami całkowitymi od 2 do 5 z pojedynczym wierszem kodu.,

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

tworzenie kolekcji ArrayList PowerShell

Korzystanie z ArrayList PowerShell jest również sposobem, w jaki można przechowywać listę elementów z PowerShell. Klasa ArrayList jest częścią systemu.Collections namespace within. NET. tworząc nowy obiekt tego typu można następnie przechowywać obiekty w ArrayList.

poniżej możesz zobaczyć, że musisz jawnie utworzyć obiekt ArrayList używającNew-Object cmdlet lub odlewając standardową tablicę do obiektu ArrayList.,

zauważ, że w tym przypadkuBaseType jest obiektem, podczas gdy powyższe przykłady mają podstawowe typy tablic, które wykazują dziedziczenie z klasy Object. Ostatecznie PowerShell zapewnia dostęp do systemu typu. NET.

dodawanie elementów do tablicy

podczas tworzenia tablicy można zdefiniować wszystkie elementy w czasie tworzenia lub dodać je ad-hoc.

aby dodać elementy do istniejącej kolekcji, możesz użyć operatora +=lub metody Add. Ale wiedz, że istnieją poważne różnice w ich działaniu.,

gdy tworzysz standardową tablicę z@(), używasz operatora+=, ale aby dodać elementy do tablicy, używasz metodyAdd. Metody te różnią się tym, że operator += faktycznie niszczy istniejącą tablicę i tworzy nową z nową pozycją.

aby zademonstrować, zobaczysz poniżej, możesz odwołać się do właściwości IsFixedSize dla tablicy lub ArrayList, aby wiedzieć, która jest niezmienna, a która nie.,

PS51> $BasicArray.IsFixedSizeTruePS51> $MyArrayList.IsFixedSizeFalse

ponieważ tablica podstawowa jest zbiorem o stałym rozmiarze, nie można jej modyfikować.

próba użycia metodyAdd() z tablicą o stałym rozmiarze spowoduje błąd ze względu na stały rozmiar. Poniżej możesz zobaczyć kilka przykładów, w których można z powodzeniem dodawać elementy do tablicy.

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

usuwanie elementów z tablicy

teraz, gdy masz lepsze zrozumienie, jak dodawać elementy do tablicy, omówmy kilka sposobów usuwania elementów z tablicy.,

ponieważ podstawowa tablica jest stała, nie można usunąć z niej elementów. Zamiast tego musisz utworzyć zupełnie nową tablicę. Na przykład, można usunąć pojedynczy element z tablicy, tworząc instrukcję warunkową, która pasuje Tylko do tych elementów, które chcesz dołączyć. Przykład przedstawiono poniżej.

$NewBasicArray = $BasicArray -ne "Nate"

ponieważ lista tablic nie jest stała, można usunąć z nich elementy za pomocą metodyRemove(). Jest to jeden ze scenariuszy, w którym korzystanie z ArrayList może przynieść korzyści, jeśli planujesz często dodawać / usuwać elementy.,

$MyArrayList.Remove("Nate")

pobieranie określonych elementów z tablicy lub ArrayList

aby pobrać określone elementy z tablicy lub ArrayList, można użyć wielu różnych metod. Podobnie jak inne obiekty w PowerShell, można uzyskać dostęp do wszystkich elementów tablicy, po prostu wywołując obiekt.

PS51> $BasicArrayJohnSusieJimJohnnyCarrie

być może musisz pobrać tylko pierwszy element, tablice zawsze będą miały pochodzenie 0 reprezentujące pierwszy element tablicy. Aby pobrać pierwszy element tablicy, podaj numer indeksu w nawiasach, jak pokazano poniżej.,

PS51> $BasicArrayJohn

odwrotnie, możesz również odwoływać się do indeksów wstecz, używając kreski (wskaźnik ujemny), aby wywołać ostatnią x liczbę elementów z tablicy. Powszechnym sposobem znalezienia ostatniego elementu w tablicy jest użycie -1, jak pokazano poniżej.

PS51> $BasicArrayCarrie

operator zakresu, o którym dowiedziałeś się powyżej, może być również użyty do pobierania obiektów z tablicy, wykonując tę samą metodę wywołania elementów. Załóżmy, że chcesz pobrać pierwsze cztery nazwy z tablicy$BasicArray.,

poniżej możesz określić zakres indeksów 0-3, który zwróci pierwsze cztery elementy.

PS51> $BasicArrayJohnSusieJimJohnny

Optymalizacja tablic za pomocą PowerShell

teraz, gdy masz dobre podstawy do tworzenia i manipulowania tablicami, której z nich powinieneś użyć? Aby na to odpowiedzieć, przejdźmy przez kilka przykładów zMeasure-Command cmdlet. Używając cmdleta Measure-Command, lepiej zrozumiesz, jak długo polecenia są przetwarzane w procesie przekazywania elementów w potoku.,

Ogólnie rzecz biorąc, jeśli masz małą kolekcję obiektów, prawdopodobnie nie zauważysz dużej różnicy w sposobie manipulowania tablicami. Jednak jeśli masz dużą kolekcję obiektów, ważne jest, aby zrozumieć różnice, aby osiągnąć optymalne wyniki.

zastosujmy to, czego nauczyłeś się w poprzedniej sekcji o różnicy między+= a metodąAdd() z pętlą 50 000 pozycji.

najpierw Utwórz pustą tablicę i pustą listę ArrayList, jak pokazano poniżej.,

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

następnie należy wypełnić 50 000 elementów w każdej kolekcji za pomocą operatora zakresu i pętli foreach, jak pokazano poniżej.

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

na koniec zawiń swoje polecenia w wyrażenie i przekaż je doMeasure-Command cmdlet. Wykonując wyrażenie za pomocą Measure-Command, możesz zobaczyć, ile czasu zajmuje wykonanie każdego procesu.

pamiętaj, że jak się wcześniej nauczyłeś,+= faktycznie tworzy nową tablicę, a nie dołącza do stałej.,

wynik? Prawie 60 sekund kontra 139 milisekund!

jak widać, znacznie szybciej jest wykorzystać Arraylistę dla dużych kolekcji, zamiast używać tablicy o stałym rozmiarze.

chociaż jest to podstawowy przykład, podkreśla znaczenie zrozumienia tego, co robi twój kod podczas przetwarzania. Jeśli nie zostanie prawidłowo zrozumiane, może to spowodować słabe wrażenia użytkownika.,

Jeśli masz jakiś istniejący skrypt, który mógłby skorzystać z używania ArrayList, a nie tablicy, stanowiłoby to fantastyczną okazję do dokonania poprawy z dnia na dzień!

dalsze czytanie

  • porównywanie tablic z PowerShell
  • Jak tworzyć Tablice wydajności w PowerShell (MCPmag)

chcesz uzyskać więcej takich wskazówek? Sprawdź mój osobisty blog PowerShell pod adresem: https://nkasco.com/FriendsOfATA.