Articles

PowerShell array Guide: Jak používat a vytvářet

Pole jsou základním rysem PowerShell. Pole umožňují přijímat, manipulovat a výstupovat skutečné datové struktury (a nejen surové řetězce). Díky této schopnosti je PowerShell odlišný a užitečnější než jiné skriptovací jazyky.

v tomto článku vysvětlíme, jaká pole jsou a jak je používat v PowerShell. Nejprve vám ukážeme, jak vytvořit pole v PowerShellu, a poté, jak s nimi manipulovat pomocí základních funkcí., Pak se podíváme na několik různých typů polí a prozkoumáme některé z jemnějších vlastností.

Získejte Zdarma PowerShell a služby Active Directory, Základy Video Kurz

doporučil bych to pro nové i pokročilé PowerShell uživatelů. Budování reklamního nástroje je skvělý zážitek z učení.

Naším cílem je poskytnout vám dobré uzemnění při práci s poli v PowerShell. Jakmile zvládnete tyto základy, můžete se podívat na náš kurz na PowerShell a dozvědět se více.,

  • Pole Základy
  • Pole Objektů
  • Subjekty Pro Pole
  • Jak Přidat Hodnoty do Pole
  • Typy Array
  • Pokročilé Maticové Funkce

PowerShell Pole

Pole jsou společným rysem téměř všech programovacích jazyků. Jedná se o datovou strukturu, která slouží jako sbírka více kusů dat. Při práci s poli, můžete buď použít stejný příkaz provádět stejnou funkci na každou položku v poli, nebo přistupovat a manipulovat s jednotlivými prvky pomocí indexu.,

pole v PowerShellu mohou obsahovat jednu nebo více položek. Položka může být řetězec, celé číslo, objekt nebo dokonce jiné pole a jedno pole může obsahovat libovolnou kombinaci těchto položek. Každá z těchto položek má index, který vždy začíná (někdy matoucí) na 0. Takže první položka v poli je dána indexem 0, druhá je indexována jako 1 a tak dále.,

PowerShell pole jsou tak základní součástí PowerShell, které se objevují v každé PowerShell tutorial tam je, a dobrou znalost o tom, jak s nimi pracovat, je důležitá pro mnoho aspektů pomocí PowerShell, od konfigurace služeb Office 365 pomocí prostředí PowerShell pro Pentesting.

příklad pole PowerShell

nejjednodušší způsob, jak ilustrovat, co je pole příkladem. Udělejme pole, které představuje misku ovoce.,

Existuje několik způsobů, jak vytvořit pole v prostředí Powershell, ale nejjednodušší je spustit tento příkaz:

@()

tím se vytvoří prázdné pole. Prázdné pole však není tak užitečné, takže do našeho nového pole přidáme nějaké ovoce. Ty budou reprezentovány jako textové řetězce. K tomu, že, spusťte tento příkaz.

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

Toto bude název pole „ovoce“, a přidat tři položky., Vidět, že to funguje, si můžete přečíst pole pomocí tohoto příkazu:

PS /Users/yourname> $fruit

Což bude nyní návrat:

 Apples Oranges Bananas

Jak můžete vidět, toto pole je skupina jednotlivé kusy údajů. PowerShell automaticky index je tak, jak jsme vysvětlili výše: „Apple“ budou indexovány jako 0, „Pomeranče“, jako 1, a „Banány“ jako 2.

tento příklad může vypadat, že pole jsou poměrně jednoduché objekty a svým způsobem jsou. Jejich jednoduchost je však také to, co z nich dělá tak flexibilní, silné objekty., Ve zbytku této příručky vám dáme chuť toho, co můžete dělat s poli.

základy pole

v této části se podíváme na nejzákladnější způsoby vytváření a práce s poli v PowerShellu.

nejprve vytvoříme pole

, vytvoříme pole. Standardní způsob, jak toho dosáhnout, je použít @ (), i když existují i jiné způsoby.

prozatím vytvoříme pole nazvané „data“. K tomu, spustit:

$data = @()

Toto pole je prázdné, protože v tuto chvíli nemáme stanovené žádné údaje., Chcete zjistit, kolik položky jsou v poli, můžeme použít funkci count:

$data.count

Který, na chvíli, vrátí 0, protože tam nejsou žádné položky v našem poli. Chcete, aby se pole s některé údaje v něm jsme se dát tyto údaje v závorkách po @:

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

Spustit stejné funkce count teď, a uvidíte, že tam jsou 4 položky v tomto poli. Chcete-li tyto položky znovu zobrazit, vyvoláme pole:

$data

, které zobrazí seznam položek, které jsme vložili do pole.,

přístup k položkám

nyní máme pole, budeme z něj chtít přistupovat k položkám. Existuje několik způsobů, jak to udělat. Prvním je použití indexu položek v poli. Jak jsme již řekli, indexy začínají na 0, takže pro získání první položky v našem poli budeme muset říct PowerShell, aby se podíval na položku, jejíž index je nulový. Děláme to spuštěním:

$data

to vrátí „nulu“, protože to byl první řetězec, který jsme vložili do našeho pole.,

tuto syntaxi můžeme také rozšířit, abychom vrátili více položek ze stejného pole, a to pouhým vložením více indexů do stejného příkazu. Například spusťte:

$data

to vrátí „Zero Two Three“. Položky jsou vráceny ve stejném pořadí, v jakém jste zadali indexy. Můžete také použít další syntaxi vrátit sady položek z pole. Například:

$data

vrátí všechny položky s indexem mezi 1 a 3 (včetně)., A:

$data

vrátí poslední položku v poli: záporné číslo říká PowerShell počítat pozpátku od konce pole, takže v tomto případě, tento příkaz vrátí „Tři“, poslední položka v naší testovací pole.

Změna položek

stejnou metodu lze použít k aktualizaci položek v poli. Například, aktualizovat položky, jejíž index je 2 (pamatujte, že toto je třetí položka v poli), můžeme spustit:

$data = 'second'

To nám dává přímý přístup k položkám uvnitř pole.,

Iterované akce

jednou z nejsilnějších funkcí PowerShell (a ve skutečnosti jakéhokoli rozhraní příkazového řádku) je schopnost provádět stejnou akci na všech položkách v poli. Existuje celá řada různých způsobů, jak toho dosáhnout.

nejzákladnější je použití potrubí, což je znak/. Když předáte pole do potrubí, každá položka v poli je zpracována individuálně. Jak jsme zdůraznili v našem článku o objektech PowerShell a datovém potrubí, je to často nejjednodušší způsob, jak provádět iterované akce.,

například, chcete-li přidat popis pro každou položku v našem poli, můžeme použít tento příkaz:

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

Tento příkaz řekne PowerShell, aby se položky v $data jeden po druhém, a pak pro každou z nich přidat „Položka:“ na začátku, následované původní hodnoty.

Existuje několik dalších způsobů, jak provést opakoval akce v PowerShell, z nichž mnohé bude povědomá, pokud jste použili jiné programovací jazyky: PowerShell zahrnuje ForEach smyčky, a Pro smyčky, a Přepínání smyčky. Další podrobnosti o nich naleznete v dokumentaci společnosti Microsoft.,

pole objektů

zatím pracujeme s polem, které obsahuje základní data: řetězec. Pole však mohou také obsahovat objekty a mnoho z nejběžnějších použití PowerShell – jako konfigurace sady Office 365 – vyžaduje, abyste věděli, jak pracovat s objekty. Podívejme se tedy na některé základní příkazy.

vytvoření pole objektů

pomocí funkce @() můžeme vytvořit pole objektů stejným způsobem jako u řetězců., Například, aby se test seznam zaměstnanců, můžeme použít:

Většina rutin vrátí pole tohoto typu, když jim můžete přiřadit proměnné s ním pracovat.

přístup k objektům z polí

proces, který jsme prošli výše pro přístup k jednotlivým částem dat, lze stejně použít s poli, která obsahují objekty., Například, běh:

$data

návrat

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

Alternativně, můžeme přístup k vlastnosti jednotlivých objektů zadáním majetku, který jsme chtěli ve stejný příkaz, jako je tento:

$data.FirstName

, Která vrátí „Kevin“.

aktualizace vlastností objektů v polích

jít dále, stejná syntaxe nám dává možnost aktualizace jednotlivých vlastností v objektech, které jsou drženy v polích., Například:

$data.FirstName = 'Jay'

aktualizuje vlastnost FirstName v první položce v našem poli na „Jay“.

Přístupu ke Každé Nemovitosti v Pole Objektů

Ve většině programovacích jazyků, museli bychom použít iterační proces (viz výše) pro přístup všechny vlastnosti v poli objektů. Můžeme dělat, že v PowerShell, stejně, samozřejmě, spuštěním:

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

vrátí seznam všech Příjmení vlastnosti v našem poli, ale je výpočetně drahé a obtížné psát pokaždé, když chcete vidět tato data., Takže místo toho má PowerShell zkratku. Spusťte toto:

$data.LastName

a uvidíte stejný seznam. PowerShell vlastně bere každý objekt na oplátku, stejně jako předtím, ale skrývá tuto složitost před námi.

Operátorů Pro Pole

Téměř všechny subjekty, které budeme používat pro jednotlivé datové položky v PowerShell bude také pracovat s poli, ale některé z nich fungují trochu jinak, když se používají tímto způsobem. Podívejme se tedy na nejběžnější operátory a na to, jak je můžete použít v polích.,

-připojte se

operátor-join je jedním z nejpoužívanějších příkazů v PowerShell a je velmi užitečný při práci s poli. To může být použit iterativně na položky v poli spojit je dohromady na výstupu pole.

Vezměme si příklad. Za prvé, vytvořit jednoduchý pole:

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

A pak použít -přidejte vložit spojovník mezi každou položku, a výstup výsledek:

$data -join '-'

, Která vrátí „1-2-3-4“., Operátor-join lze také použít bez oddělovače, ve kterém mohou být položky v poli výstupem jako řada neoddělených hodnot.

-obsahuje

operátor-contains pracuje na polích velmi podobným způsobem jako jeho použití s jednotlivými datovými body. Můžete jej použít ke kontrole, zda pole obsahuje určitý řetězec, a to bude výstup Boolean hodnotu. Například:

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

Equality

existují dva operátoři pro kontrolu rovnosti v PowerShell: – eq a-ne., Pokud jste však zvyklí používat tyto hodnoty na jednotlivých hodnotách, způsob, jakým tyto práce ve vztahu k polím mohou vypadat trochu divně. Pokud používáte-eq, například operátor nebude výstup Boolean „True“, ale místo toho vrátí objekt, který odpovídá.

například:

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

– ne operátor funguje v podstatě stejným způsobem, kromě toho, že to vám poskytne všechny hodnoty, které nejsou rovná zadané hodnotě., Takže:

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

můžete však pomocí příkazu if() porovnat výstup těchto operátorů s očekávaným výstupem a vrátit výstup „True“ nebo „False“.

jak přidat hodnoty do pole

po všech výše uvedených pokynech se pravděpodobně ptáte, proč jsme vynechali přidávání datových položek do pole. To proto, že neexistuje způsob, jak to udělat. Pole, jakmile je vytvořeno, zůstane navždy stejné velikosti, a tak, aby bylo větší, musíte jej zkopírovat do nového pole a odstranit originál.,

to zní komplikovaně, ale Powershell zpracovává tento proces pro vás pomocí řady velmi jednoduchých operátorů. Existují dva hlavní způsoby, jak to udělat.

přidání pole

PowerShell může přidat dvě pole dohromady pomocí operátora“+“, který skrývá složitost toho, co systém skutečně dělá. Například, pokud si vytvořit dvě testovací pole jako je tohle:

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

můžete pak přidat je dohromady pomocí:

 PS> $first + $second

To umožní, aby nové pole s všechny čtyři hodnoty, a výstup výsledků., Všimněte si však, že tomuto novému poli nedá nový název. K tomu používáme + = operátor.

a Rovná se pro Kombinování Polí

Namísto použití „+“ operátor ve výše uvedeném příkladu jsme mohli použít „+=“ operátora, který nám poskytne zcela nové pole:

 $first += 'Two, Three'

příkaz vypadá jednoduše, ale skrývá to, co PowerShell je skutečně tady. Kopíruje všechny hodnoty z $first a vytváří nové pole, které obsahuje další hodnoty. Poté odstraní původní pole.,

to je poněkud problematické, protože je výpočetně drahé. U malých polí si možná nevšimnete, ale s velkým množstvím dat může tato metoda rychle uzamknout váš systém. Proto jsme vám dali cestu kolem tohoto problému, níže.

typy polí

doposud jsme řešili výchozí pole v PowerShell. Přestože nám PowerShell v té době neřekl, každé pole, které jsme dosud vytvořili, je jednoho typu, typu]. Tento typ pole může obsahovat libovolný typ datové hodnoty.,

Důrazně Typované Pole

Nicméně, tam jsou časy, kdy chcete omezit typy dat nebo objektů, které pole může držet jen jeden. Můžeme to udělat pomocí silně zadaného pole, které může obsahovat pouze zadaný datový typ.

například, aby se pole, které může trvat jen celá čísla, můžeme použít:

 PS> ] $numbers = 1,2,3

Pokud se budete snažit a dát nesprávný typ dat hodnoty do silně typované pole, vrátí chybový kód.

ArrayList

jak jsme již uvedli výše, přidání položek do polí může být hádka., Existuje však jiný typ kolekce – ArrayList – který to zpracovává elegantněji. Abychom mohli použít tento typ sbírky, budeme však muset vyvolat. Net framework,který nám může hodit některé nešťastné výstupy.

vytvořit ArrayList, a pak přidat položky do ní, spusťte následující:

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

Tady, můžeme použít výchozí .Net konstruktor vytvořit nový ArrayList, a pak pomocí -Přidejte operátor přidat položky do ní. Operátor je tam, protože někdy tyto příkazy vyhazují podivné výstupy, které se mohou s kódem pokazit.,

jít dál

Jedná se o nejběžnější typy pole v PowerShell, ale existuje několik dalších. Pokud se vyvíjíte jako uživatel PowerShell, Je užitečné začít používat pole namísto přímých polí, ale měli byste si také být vědomi toho, že tento typ pole nepoužívají pokročilí uživatelé.

místo toho většina zkušených kodérů použije obecný typ seznamu nazvaný seznam. Tento typ seznamu je o něco složitější, protože je odvozen přímo z C#, ale jakmile to zvládnete, nabízí mnohem větší flexibilitu než pole, o kterých jsme dosud diskutovali.,

Pokročilé Maticové Funkce

kromě základní funkce, kterou jsme prošli, tam jsou také řada více pokročilé maticové funkce, a některé další funkce, aby na vědomí, jak začít je používat častěji.

Předrozměrná pole

standardní způsob vytváření polí výše vytvoří pole s velikostí určenou počtem položek v něm. Pomocí nového konstruktoru($size) však můžete vytvořit pole zadané velikosti.

můžete to udělat takto:

 $data = ]::new(4)

Pokud spustíte a .,Spočítejte dotaz na toto pole, vrátí se „4“, protože i když v něm nejsou data, vyplní prostor 0. To je ve skutečnosti velmi užitečné, pokud potřebujete inicializovat nové pole, které je vyplněno nulami, protože předem velké pole bude zpočátku vyplněno 0.

násobení polí

násobení objektů v poli-a zejména řetězců-je něco, co zaměňuje většinu lidí, když to musí nejprve udělat., Viděli jsme extrémně komplikované, pokud() skripty k dosažení tohoto výsledku, ale existuje mnohem jednodušší způsob:

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

Ano, To je pravda. Tím se vytvoří nové pole s každou hodnotou opakovanou třikrát. Tento příkaz můžete také použít jako alternativní způsob vyplnění pole nulami (nebo jakoukoli jinou výchozí hodnotou) vytvořením pole s vybranou hodnotou a jeho vynásobením tolikrát, kolikrát chcete.

vnořená pole

stejně jako mnoho jiných programovacích jazyků Podporuje PowerShell vnořená pole., Standardním způsobem, jak to udělat v PowerShell, je použití vícerozměrného pole. Nejjednodušším příkladem je vytvoření dvou-rozměrné pole:

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

datová struktura děláte s tímto příkazem je klasická matice, a mohou být pracoval s, stejně jako v dalších programovacích jazycích. Například pro přístup k určité hodnotě z tohoto pole budete muset zadat dva rozměry.,

například, pro přístup k hodnotě „3“, jsme se použít toto:

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

Tento příkaz pak lze použít pro přístup na jakoukoliv hodnotu, ale budete muset přidat vnořené závorky se dostat dovnitř každé úrovni matrixu.

Poslední Slovo

Všechny z výše uvedených pokynů by mohlo být hodně pro uživatele, kteří jsou jako první přichází do PowerShell, ale byly zvoleny jako způsob učení jazyka. Kombinací různých technik můžete vytvářet výkonné skripty pro automatizaci mnoha nejčastějších a časově nejnáročnějších prací, které děláte s PowerShell.,

tyto dovednosti vám také pomohou překonat PowerShell. Mnoho z nejběžnějších jazyků používaných pro správu kybernetické bezpečnosti, jako jsou NetCat a Nmap, používá mnoho stejných principů, jaké dělá PowerShell. A tak pomocí PowerShell zlepšit svou kybernetickou bezpečnost je skvělý způsob, jak se naučit, jak zabezpečit své systémy obecněji.