Articles

PowerShell Array Guide: Jak używać i tworzyć

tablice są podstawową cechą PowerShell. Tablice umożliwiają pobieranie, manipulowanie i wyprowadzanie prawdziwych struktur danych(a nie tylko surowych łańcuchów). Ta funkcja sprawia, że PowerShell jest inny i bardziej użyteczny niż inne języki skryptowe.

w tym artykule wyjaśnimy, czym są tablice i jak ich używać w PowerShell. Najpierw pokażemy, jak tworzyć tablice w PowerShell, a następnie jak używać podstawowych funkcji do ich manipulowania., Następnie przyjrzymy się kilku różnym typom tablic i zbadamy niektóre z bardziej subtelnych ich cech.

Pobierz darmowy kurs wideo PowerShell i Active Directory Essentials

polecam go zarówno nowym, jak i zaawansowanym użytkownikom PowerShell. Budowanie narzędzia reklamowego to świetne doświadczenie edukacyjne.

naszym celem jest zapewnienie dobrego uziemienia w pracy z tablicami w PowerShell. Po opanowaniu tych podstaw możesz rzucić okiem na nasz kurs Na PowerShell, aby dowiedzieć się więcej.,

  • podstawy tablicy
  • Tablice obiektów
  • operatory dla tablic
  • Jak dodawać wartości do tablicy
  • typy tablic
  • zaawansowane funkcje tablic

Tablice PowerShell

tablice są wspólna cecha prawie wszystkich języków programowania. Są one strukturą danych, która służy jako zbiór wielu kawałków danych. Podczas pracy z tablicą można użyć tego samego polecenia do wykonania tej samej funkcji na każdym elemencie w tablicy lub uzyskać dostęp do poszczególnych elementów i manipulować nimi za pomocą indeksu.,

tablice w PowerShell mogą zawierać jeden lub więcej elementów. Element może być łańcuchem, liczbą całkowitą, obiektem lub nawet inną tablicą, a jedna tablica może zawierać dowolną kombinację tych elementów. Każda z tych pozycji ma indeks, który zawsze zaczyna się (czasami myląco) od 0. Tak więc pierwsza pozycja w tablicy ma indeks 0, druga jest indeksowana jako 1, i tak dalej.,

macierze PowerShell są tak podstawową częścią PowerShell, że pojawiają się w każdym samouczku PowerShell, a dobra wiedza o tym, jak z nimi pracować, ma kluczowe znaczenie dla wielu aspektów korzystania z PowerShell, od konfiguracji Office 365 po używanie PowerShell do testowania Pentestingu.

przykład tablicy PowerShell

najprostszym sposobem zilustrowania, czym jest tablica, jest przykład. Zróbmy tablicę, która przedstawia miskę owoców.,

istnieje kilka sposobów tworzenia tablic w Powershell, ale najprostszym jest uruchomienie tego polecenia:

@()

spowoduje to utworzenie pustej tablicy. Pusta tablica nie jest jednak zbyt przydatna, więc dodajmy kilka owoców do naszej nowej tablicy. Będą one reprezentowane jako ciągi tekstowe. Aby to zrobić, uruchom to polecenie

$fruit = @('Apples','Oranges','Bananas')

spowoduje nazwanie tablicy „fruit” i dodanie do niej trzech elementów., Aby zobaczyć, że to zadziałało, możesz odczytać tablicę za pomocą polecenia:

PS /Users/yourname> $fruit

które teraz zwróci:

 Apples Oranges Bananas

jak widzisz, tablica ta jest grupą pojedynczych fragmentów danych. PowerShell automatycznie indeksuje je w sposób opisany powyżej: „jabłko” będzie indeksowane jako 0, ” pomarańcze „jako 1, A” banany ” jako 2.

Ten przykład może wydawać się, że tablice są dość prostymi obiektami i w pewnym sensie nimi są. Ich prostota jest jednak również tym, co czyni je tak elastycznymi, potężnymi przedmiotami., W dalszej części tego przewodnika podamy Ci przedsmak tego,co możesz zrobić z tablicami.

podstawy tablic

w tej sekcji przyjrzymy się najbardziej podstawowym sposobom tworzenia i pracy z tablicami w PowerShell.

Utwórz tablicę

najpierw utworzymy tablicę. Standardowym sposobem jest użycie @ (), choć są inne sposoby.

na razie stwórzmy tablicę o nazwie „data”. Aby to zrobić, uruchom:

$data = @()

ta tablica jest w tej chwili pusta, ponieważ nie podaliśmy dla niej żadnych danych., Aby sprawdzić ile pozycji znajduje się w tablicy, możemy użyć funkcji count:

$data.count

która w tej chwili zwróci 0, ponieważ w naszej tablicy nie ma żadnych pozycji. Aby utworzyć tablicę z niektórymi danymi w niej, umieszczamy te dane w nawiasach po @:

$data = @('Zero','One','Two','Three')

Uruchom teraz tę samą funkcję count, a zobaczysz, że są 4 pozycje w tej tablicy. Aby ponownie zobaczyć te elementy, wywołujemy tablicę:

$data

która wyświetli listę elementów, które umieściliśmy w tablicy.,

dostęp do elementów

teraz mamy tablicę, będziemy chcieli uzyskać dostęp do elementów z niej. Można to zrobić na kilka sposobów. Pierwszym jest użycie indeksu pozycji w tablicy. Jak powiedzieliśmy wcześniej, indeksy zaczynają się od 0, więc aby pobrać pierwszą pozycję w naszej tablicy, musimy powiedzieć Powershellowi, aby spojrzał na pozycję, której indeks jest zerowy. Robimy to uruchamiając:

$data

zwróci to „zero”, ponieważ był to pierwszy łańcuch, który umieściliśmy w naszej tablicy.,

możemy również rozszerzyć tę składnię, aby zwrócić wiele elementów z tej samej tablicy, po prostu umieszczając więcej indeksów w tym samym poleceniu. Na przykład uruchom:

$data

zwróci To „Zero Dwa Trzy”. Produkty są zwracane w tej samej kolejności, w jakiej zostały wprowadzone indeksy. Można również użyć dalszej składni, aby zwrócić zestawy elementów z tablicy. Na przykład:

$data

zwróci wszystkie pozycje o indeksie od 1 do 3 (włącznie)., I:

$data

zwróci ostatnią pozycję w tablicy: liczba ujemna mówi Powershellowi, aby liczył wstecz od końca tablicy, więc w tym przypadku polecenie zwróci „trzy”, ostatnią pozycję w naszej testowej tablicy.

Zmiana elementów

ta sama metoda może być użyta do aktualizacji elementów w tablicy. Na przykład, aby zaktualizować element, którego indeks wynosi 2 (pamiętaj, że jest to trzeci element w tablicy), możemy uruchomić:

$data = 'second'

to daje nam bezpośredni dostęp do elementów wewnątrz tablicy.,

akcje iteracyjne

jedną z najpotężniejszych funkcji PowerShell (a właściwie każdego interfejsu wiersza poleceń) jest możliwość wykonywania tej samej akcji na wszystkich elementach tablicy. Istnieje wiele różnych sposobów, aby to zrobić.

najbardziej podstawowym jest użycie potoku, który jest znakiem |. Gdy przekazujesz tablicę do potoku, każdy element w tablicy jest przetwarzany indywidualnie. Jak już wspomnieliśmy w naszym artykule na temat obiektów PowerShell i rurociągów danych, jest to często najprostszy sposób wykonywania iteracji akcji.,

na przykład, aby dodać opis do każdego elementu w naszej tablicy, możemy użyć polecenia:

$data | ForEach-Object {"Item: "}

polecenie to mówi PowerShell, aby pobierał elementy w $data po kolei, a następnie dla każdego z nich dodaj „Item:” na początku, a następnie oryginalną wartość.

istnieje kilka innych sposobów wykonywania iteracji w PowerShell, z których wiele będzie znane, jeśli używasz innych języków programowania: PowerShell zawiera pętle ForEach, for loops I switch loops. Aby uzyskać więcej informacji na ten temat, sprawdź dokumentację firmy Microsoft.,

Tablice obiektów

do tej pory pracowaliśmy z tablicą zawierającą podstawowe dane: ciąg znaków. Jednak tablice mogą również zawierać obiekty, a wiele najczęstszych zastosowań PowerShell – takich jak konfigurowanie Office 365-wymaga znajomości obsługi obiektów. Spójrzmy więc na kilka podstawowych poleceń, aby to zrobić.

tworzenie tablicy obiektów

możemy utworzyć tablicę obiektów w taki sam sposób, jak zrobiliśmy to z łańcuchami, używając funkcji @ ()., Na przykład, aby utworzyć testową listę pracowników, możemy użyć:

Większość cmdletów zwróci tablicę tego typu, gdy przypiszesz im zmienną do pracy.

dostęp do obiektów z tablic

proces, który przeprowadziliśmy powyżej, aby uzyskać dostęp do poszczególnych fragmentów danych, może być również używany z tablicami zawierającymi obiekty., Na przykład, uruchomienie:

$data

zwróci:

 FirstName LastName ----- ---- Kevin Marquette

alternatywnie, możemy uzyskać dostęp do właściwości poszczególnych obiektów, określając, które właściwości chcemy w ramach tego samego polecenia, jak to:

$data.FirstName

które zwróci „Kevin”.

aktualizowanie właściwości obiektów w tablicach

idąc dalej, ta sama składnia daje nam możliwość aktualizowania poszczególnych właściwości w obiektach przechowywanych w tablicach., Na przykład:

$data.FirstName = 'Jay'

zaktualizuje właściwość FirstName w pierwszej pozycji w naszej tablicy do „Jay”.

dostęp do każdej właściwości w tablicy obiektów

w większości języków programowania, musielibyśmy użyć procesu iteracyjnego (patrz wyżej), aby uzyskać dostęp do wszystkich właściwości w tablicy obiektów. Możemy to zrobić również w PowerShell, oczywiście, uruchamiając:

$data | ForEach-Object {$_.LastName}

To zwróci listę wszystkich właściwości LastName w naszej tablicy, ale jest to kosztowne obliczeniowo i trudne do zapisania za każdym razem, gdy chcesz zobaczyć te dane., Zamiast tego PowerShell ma skrót. Uruchom to:

$data.LastName

a zobaczysz tę samą listę. PowerShell rzeczywiście bierze każdy obiekt po kolei, tak jak wcześniej, ale ukrywa tę złożoność przed nami.

operatory dla tablic

prawie wszystkie operatory, których używamy do poszczególnych pozycji danych w PowerShell, będą również działać z tablicami, ale niektóre z nich działają nieco inaczej, gdy są używane w ten sposób. Przyjrzyjmy się więc najpopularniejszym operatorom i sposobom ich użycia w tablicach.,

-join

operator-join jest jednym z najczęściej używanych poleceń w PowerShell i jest niezwykle przydatny podczas pracy z tablicami. Można go używać iteracyjnie na elementach w tablicy, aby połączyć je w wyjście tablicy.

weźmy przykład. Najpierw Utwórz prostą tablicę:

$data = @(1,2,3,4)

, a następnie użyj-join, aby wstawić myślnik między każdym elementem i wypisać wynik:

$data -join '-'

, który zwróci „1-2-3-4”., Operator-join może być również używany bez ogranicznika, w którym pozycje w tablicy mogą być wyprowadzane jako seria nierozdzielonych wartości.

-contains

operator-contains działa na tablicach w bardzo podobny sposób do jego użycia z pojedynczymi punktami danych. Możesz go użyć, aby sprawdzić, czy tablica zawiera konkretny ciąg znaków i wyświetli wartość logiczną. Na przykład:

 PS> $data = @('red','green','blue') PS> $data -contains 'green' True

Equalities

istnieją dwa operatory do sprawdzania równości w PowerShell: -eq i-ne., Jeśli jednak jesteś przyzwyczajony do używania tych wartości na pojedynczych wartościach, sposób ich działania w odniesieniu do tablic może wydawać się trochę dziwny. Jeśli na przykład użyjesz opcji-eq, operator nie wyświetli logicznego „True”, ale zwróci obiekt, który pasuje.

na przykład:

 PS> $data = @('red','green','blue') PS> $data -eq 'green' green

operator-ne działa w ten sam sposób, z tym wyjątkiem, że da Ci wszystkie wartości, które nie są równe podanej wartości., Tak więc:

 PS> $data = @('red','green','blue') PS> $data -ne 'green' red blue

możesz jednak użyć instrukcji if (), aby porównać wynik tych operatorów z oczekiwanym wynikiem i zwrócić wyjście „True” lub „False”.

Jak dodać wartości do tablicy

Po wszystkich powyższych instrukcjach, prawdopodobnie zastanawiasz się, dlaczego pominęliśmy Dodawanie pozycji danych do tablicy. To dlatego, że nie ma na to sposobu. Tablica, raz utworzona, pozostaje tego samego rozmiaru na zawsze, więc aby ją powiększyć, musisz skopiować ją do nowej tablicy i usunąć oryginał.,

To brzmi skomplikowanie, ale Powershell obsługuje ten proces za pomocą szeregu całkiem prostych operatorów. Istnieją dwa główne sposoby, aby to zrobić.

dodawanie tablicy

PowerShell może dodać dwie tablice razem za pomocą operatora”+”, który ukrywa złożoność tego, co system faktycznie robi. Na przykład, jeśli utworzysz dwie tablice testowe w ten sposób:

 $first = @( 'Zero' 'One' ) $second = @( 'Two' 'Three' )

możesz dodać je razem używając tylko:

 PS> $first + $second

spowoduje to utworzenie nowej tablicy ze wszystkimi czterema wartościami i wypisanie wyników., Zauważ jednak, że nie nada nowej tablicy nowej nazwy. W tym celu używamy operatora+=.

Plus równa się do łączenia tablic

zamiast używać operatora „+” w powyższym przykładzie, mogliśmy użyć operatora”+=”, który da nam całą nową tablicę:

 $first += 'Two, Three'

polecenie wygląda na proste, ale ukrywa to, co PowerShell tutaj robi. Kopiuje wszystkie wartości z $first i tworzy nową tablicę zawierającą dodatkowe wartości. Następnie usuwa oryginalną tablicę.,

jest to nieco problematyczne, ponieważ jest kosztowne obliczeniowo. Przy małych tablicach możesz nie zauważyć, ale przy dużych ilościach danych ta metoda może szybko zablokować system. Dlatego daliśmy ci sposób obejścia tego problemu, poniżej.

typy tablic

do tej pory mieliśmy do czynienia z domyślnymi tablicami w PowerShell. Chociaż PowerShell nie powiedział nam w tym czasie, każda tablica, którą stworzyliśmy do tej pory, jest jednego typu, typu]. Ten typ tablicy może zawierać dowolny typ wartości danych.,

silnie wpisane Tablice

jednak zdarzają się sytuacje, w których należy ograniczyć typy danych lub obiektów, które tablica może przechowywać do tylko jednego. Możemy to zrobić używając silnie wpisanej tablicy, która może zawierać tylko określony typ danych.

na przykład, aby utworzyć tablicę, która może przyjmować tylko liczby całkowite, możemy użyć:

 PS> ] $numbers = 1,2,3

Jeśli spróbujesz umieścić niewłaściwy typ wartości danych w silnie wpisanej tablicy, zwróci ona kod błędu.

ArrayList

jak już powiedzieliśmy powyżej, dodawanie elementów do tablic może być kłopotliwe., Istnieje jednak inny rodzaj kolekcji-ArrayList – który obsługuje to bardziej elegancko. Aby jednak korzystać z tego typu kolekcji, będziemy musieli powołać się na. Net framework, który może rzucić kilka niefortunnych wyników na naszą drogę.

aby utworzyć ArrayList, a następnie dodać do niej elementy, uruchom następujące polecenie:

 $myarray = ::new() $myArray.Add('Value')

tutaj możemy użyć domyślnego konstruktora.NET do utworzenia nowej ArrayList, a następnie użyć operatora-Add do dodania elementów do niej. Operator jest tam, ponieważ czasami te polecenia wyrzucają dziwne wyjścia, które mogą namieszać w kodzie.,

idąc dalej

są to najczęściej spotykane typy tablic w PowerShell, ale jest kilka innych. Jeśli rozwijasz się jako użytkownik PowerShell, warto zacząć używać ArrayLists zamiast tablic prostych, ale należy również pamiętać, że ten typ tablic nie jest używany przez zaawansowanych użytkowników.

zamiast tego, większość doświadczonych programistów będzie używać ogólnego typu listy o nazwie List. Ten typ listy jest nieco bardziej skomplikowany w użyciu, ponieważ pochodzi prosto z C#, ale gdy już go opanujesz, oferuje znacznie większą elastyczność niż tablice, o których rozmawialiśmy do tej pory.,

zaawansowane funkcje tablicowe

oprócz podstawowej funkcjonalności, którą omówiliśmy do tej pory, istnieje również wiele bardziej zaawansowanych funkcji tablicowych oraz kilka dodatkowych funkcji, które należy zauważyć, gdy zaczniesz z nich częściej korzystać.

Tablice Pre-size

standardowy sposób tworzenia tablic powyżej utworzy tablicę o rozmiarze określonym przez liczbę elementów w niej zawartych. Można jednak utworzyć tablicę o określonym rozmiarze przy użyciu nowego konstruktora ($size).

możesz to zrobić tak:

 $data = ]::new(4)

jeśli uruchomisz a .,count query na tej tablicy zwróci „4”, ponieważ nawet jeśli nie ma w niej danych, wypełni przestrzeń znakiem 0. Jest to bardzo przydatne, jeśli trzeba zainicjować nową tablicę, która jest wypełniona zerami, ponieważ wstępnie ustawiona tablica będzie początkowo wypełniona 0.

mnożenie tablic

mnożenie obiektów w tablicy – a zwłaszcza łańcuchów – jest czymś, co myli większość ludzi, gdy najpierw muszą to zrobić., Widzieliśmy bardzo skomplikowane Skrypty if (), aby osiągnąć ten wynik, ale jest o wiele prostszy sposób:

 PS> $data = @('red','green','blue') PS> $data * 3

tak, to prawda. Spowoduje to utworzenie nowej tablicy z każdą wartością powtarzaną trzy razy. Możesz również użyć tego polecenia jako alternatywnego sposobu wypełnienia tablicy zerami (lub dowolną inną wartością domyślną), tworząc tablicę z wybraną wartością, a następnie mnożąc ją tyle razy, ile chcesz.

Tablice zagnieżdżone

podobnie jak wiele innych języków programowania, PowerShell obsługuje tablice zagnieżdżone., Standardowym sposobem na to w PowerShell jest użycie tablicy wielowymiarowej. Najprostszym przykładem jest utworzenie dwuwymiarowej tablicy:

 $data = @(@(1,2,3),@(4,5,6),@(7,8,9)) $data2 = @( @(1,2,3), @(4,5,6), @(7,8,9) )

struktura danych, którą tworzysz za pomocą tego polecenia, jest klasyczną Macierzą i może być używana tak jak w innych językach programowania. Na przykład, aby uzyskać dostęp do określonej wartości z tej tablicy, musisz podać dwa wymiary.,

na przykład, aby uzyskać dostęp do wartości „3”, użyjemy tego:

 PS> $outside = 0 PS> $inside = 2 PS> $data 3

polecenie to może być użyte do uzyskania dostępu do dowolnej wartości, ale musisz dodać zagnieżdżone nawiasy, aby dostać się do każdego poziomu macierzy.

ostatnie słowo

wszystkie powyższe instrukcje mogą być dużo dla użytkowników, którzy po raz pierwszy przychodzą do PowerShell, ale zostały starannie wybrane jako sposób nauki języka. Łącząc różne techniki, możesz tworzyć potężne skrypty, aby zautomatyzować wiele z najczęstszych – i najbardziej czasochłonnych-prac wykonywanych z PowerShell.,

te umiejętności pomogą Ci również wyjść poza PowerShell. Wiele najpopularniejszych języków używanych do zarządzania cyberbezpieczeństwem, takich jak NetCat i Nmap, korzysta z wielu tych samych zasad, co PowerShell. Dlatego używanie PowerShell do poprawy cyberbezpieczeństwa to świetny sposób, aby dowiedzieć się, jak ogólnie zabezpieczyć swoje systemy.