Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Krátký popis
Popisuje pole, která jsou datové struktury navržené pro ukládání kolekcí položek.
Dlouhý popis
Pole je datová struktura, která je určena k ukládání kolekce položek. Položky mohou být stejného typu nebo různé typy.
Počínaje prostředím Windows PowerShell 3,0 kolekce nula nebo jednoho objektu obsahuje některé vlastnosti polí.
Vytvoření a inicializace pole
Chcete-li vytvořit a inicializovat pole, přiřaďte proměnné více hodnot. Hodnoty uložené v poli jsou odděleny čárkou a odděleny od názvu proměnné operátorem přiřazení (=).
Chcete-li například vytvořit pole s názvem $A, které obsahuje sedm čísel (int) hodnoty 22, 5, 10, 8, 12, 9 a 80, zadejte:
$A = 22,5,10,8,12,9,80
Můžete také vytvořit a inicializovat pole pomocí operátoru Range (..). Chcete-li například vytvořit a inicializovat pole s názvem "$B", které obsahuje hodnoty 5 až 8, zadejte:
$B = 5..8
V důsledku toho $B obsahovat čtyři hodnoty: 5, 6, 7 a 8.
Pokud není zadán žádný datový typ, PowerShell vytvoří každé pole jako pole objektu (typ: System. Object []). Chcete-li určit datový typ pole, použijte metodu GetType (). Chcete-li například určit datový typ pole $a, zadejte:
$a.GetType()
Chcete-li vytvořit pole silného typu, tj. pole, které může obsahovat pouze hodnoty konkrétního typu, přetypovat proměnnou jako typ pole, například String [], Long [] nebo Int32 []. Chcete-li přetypovat pole, před název proměnné uveďte typ pole uzavřený v závorkách. Chcete-li například vytvořit 32 celočíselné pole s názvem $ia obsahující čtyři celá čísla (1500, 2230, 3350 a 4000), zadejte:
[int32[]]$ia = 1500,2230,3350,4000
V důsledku toho pole $ia může obsahovat pouze celá čísla.
Můžete vytvořit pole, která jsou převedena na libovolný podporovaný typ v Microsoft .NET Framework. Například objekty, které GET-Process načte k reprezentování procesů, jsou typu System. Diagnostics. Process. Chcete-li vytvořit pole silně typovaného objektu procesu, zadejte následující příkaz:
[Diagnostics.Process[]]$zz = Get-Process
Operátor dílčího výrazu pole
Operátor dílčího výrazu pole vytvoří pole, a to i v případě, že obsahuje nula nebo jeden objekt.
Syntaxe operátoru pole je následující:
@( ... )
Operátor pole lze použít k vytvoření pole nula nebo jeden objekt. Příklad:
PS> $a = @("Hello World")
PS> $a.Count
1
PS> $b = @()
PS> $b.Count
0
Operátor Array je zvláště užitečný ve skriptech, když získáváte objekty, ale nevíte, kolik objektů se vám bude zobrazovat. Příklad:
$p = @(Get-Process Notepad)
Další informace o operátoru dílčího výrazu pole naleznete v tématu about_Operators.
Přístup k prvkům pole a jejich používání
Čtení pole
Můžete odkazovat na pole pomocí jeho názvu proměnné. Chcete-li zobrazit všechny prvky v poli, zadejte název pole. Předpokládejme například, $a že je pole obsahující celá čísla 0, 1, 2, do 9; psaní:
$a
0
1
2
3
4
5
6
7
8
9
Na prvky v poli můžete odkazovat pomocí indexu, který začíná na pozici 0. Číslo indexu uveďte v závorkách. Například pro zobrazení prvního prvku v $a poli zadejte:
$a[0]
0
Chcete-li zobrazit třetí prvek v $a poli, zadejte:
$a[2]
2
Část pole můžete načíst pomocí operátoru rozsahu pro index. Chcete-li například načíst druhý k pátému prvku pole, zadejte:
$a[1..4]
1
2
3
4
Počet záporných čísel od konce pole Například "-1" odkazuje na poslední prvek pole. Chcete-li zobrazit poslední tři prvky pole, v indexu vzestupném pořadí zadejte:
$a = 0 .. 9
$a[-3..-1]
7
8
9
Pokud zadáte záporné indexy v sestupném pořadí, výstup se změní.
$a = 0 .. 9
$a[-1..-3]
9
8
7
Buďte ale opatrní při použití tohoto zápisu. Notace cyklů od hranice konce až po začátek pole.
$a = 0 .. 9
$a[2..-2]
2
1
0
9
8
Jedna běžná chyba má také za to, že předpokládá $a[0..-2] všechny prvky pole, s výjimkou posledního z nich. Odkazuje na první, poslední a druhé prvky v poli.
Pomocí operátoru plus (+) lze kombinovat rozsahy se seznamem prvků v poli. Chcete-li například zobrazit prvky na pozici indexu 0, 2 a 4 až 6, zadejte:
$a = 0 .. 9
$a[0,2+4..6]
0
2
4
5
6
K vypsání více rozsahů a jednotlivých prvků můžete také použít operátor Plus. Například pro vypsání prvků nula až dvou, čtyři až šest a element na osmá pozici typu:
$a = 0..9
$a[+0..2+4..6+8]
0
1
2
4
5
6
8
Iterace nad prvky pole
K odkazování na prvky v poli můžete použít také konstrukce smyček, jako je například ForEach, for a while. Například pro použití smyčky ForEach k zobrazení prvků v $a poli zadejte:
$a = 0..9
foreach ($element in $a) {
$element
}
0
1
2
3
4
5
6
7
8
9
Smyčka foreach prochází pole a vrátí každou hodnotu v poli, dokud nedosáhne konce pole.
Smyčka for je užitečná, když přidáváte čítače při prohlížení prvků v poli. Například pokud chcete pomocí smyčky for vracet každou jinou hodnotu v poli, zadejte:
$a = 0..9
for ($i = 0; $i -le ($a.length - 1); $i += 2) {
$a[$i]
}
0
2
4
6
8
Cyklus while lze použít k zobrazení prvků v poli, dokud není definovaná podmínka nadále pravdivá. Například chcete-li zobrazit prvky v $a poli, zatímco je index pole menší než 4, zadejte:
$a = 0..9
$i=0
while($i -lt 4) {
$a[$i];
$i++
}
0
1
2
3
Vlastnosti polí
Počet nebo délka nebo LongLength
Chcete-li určit, kolik položek je v poli, použijte Length vlastnost nebo její Count alias. Longlengthje užitečné, pokud pole obsahuje více než 2 147 483 647 prvků.
$a = 0..9
$a.Count
$a.Length
10
10
Rank
Vrátí počet rozměrů v poli. Většina polí v PowerShellu má jenom jednu dimenzi. I když si myslíte, že vytváříte multidimenzionální pole; Podobně jako v následujícím příkladu:
$a = @(
@(0,1),
@("b", "c"),
@(Get-Process)
)
[int]$r = $a.Rank
"`$a rank: $r"
$a rank: 1
Sestavení skutečně multidimenzionálního pole v PowerShellu vyžaduje pomoc rozhraní .NET Framework. Podobně jako v následujícím příkladu:
[int[,]]$rank2 = [int[,]]::new(5,5)
$rank2.rank
2
Metody polí
Vymazat
Nastaví všechny hodnoty prvků na výchozí hodnotu typu elementu pole. Metoda Clear () neresetuje velikost pole.
V následujícím příkladu $a je pole objektů.
$a = 1, 2, 3
$a.Clear()
$a | % { $null -eq $_ }
True
True
True
V tomto příkladu $intA je explicitně zadáno, aby obsahovalo celá čísla.
[int[]] $intA = 1, 2, 3
$intA.Clear()
$intA
0
0
0
ForEach
Umožňuje iterovat všechny prvky v poli a provádět danou operaci pro každý prvek pole.
Metoda ForEach má několik přetížení, která provádějí různé operace.
ForEach(scriptblock expression)
ForEach(type convertToType)
ForEach(string propertyName)
ForEach(string propertyName, object[] newValue)
ForEach(string methodName)
ForEach(string methodName, object[] arguments)
ForEach(scriptblock expression, object[] arguments)
ForEach (výraz ScriptBlock)
ForEach (výraz ScriptBlock, argumenty objektu [])
Poznámka
Syntaxe vyžaduje použití bloku skriptu. Závorky jsou nepovinné.
Následující příklad ukazuje, jak použít metodu foreach. V tomto případě záměrem je vygenerovat čtvercovou hodnotu prvků v poli.
Všimněte si prosím, že se tato metoda přidala do prostředí PowerShell v4 a není dostupná ve verzích uvedených dál. Pro předchozí verze prosím použijte metodu přesměrování pro rutinu ForEach-Object.
$a = @(0 .. 3)
$a.ForEach({ $_ * $_})
0
1
4
9
Stejně jako -ArgumentList parametr ForEach-Object , arguments parametr umožňuje předání pole argumentů bloku skriptu nakonfigurovanému pro jejich přijetí.
ForEach (typ convertToType)
ForEachMetoda může být použita k rychlému přetypování prvků na jiný typ; následující příklad ukazuje, jak převést seznam kalendářních dat na [DateTime] typ.
@("1/1/2017", "2/1/2017", "3/1/2017").ForEach([datetime])
Sunday, January 1, 2017 12:00:00 AM
Wednesday, February 1, 2017 12:00:00 AM
Wednesday, March 1, 2017 12:00:00 AM
ForEach (řetězec propertyName)
ForEach (řetězec propertyName, Object [] newValue)
ForEachMetodu lze také použít k rychlému načtení nebo nastavení hodnot vlastností pro každou položku v kolekci.
# Set all LastAccessTime properties of files to the current date.
(dir 'C:\Temp').ForEach('LastAccessTime', (Get-Date))
# View the newly set LastAccessTime of all items, and find Unique entries.
(dir 'C:\Temp').ForEach('LastAccessTime') | Get-Unique
Wednesday, June 20, 2018 9:21:57 AM
ForEach (String methodName)
ForEach (String methodName; argumenty objektu [])
Nakonec ForEach lze metody použít ke spuštění metody pro každou položku v kolekci.
("one", "two", "three").ForEach("ToUpper")
ONE
TWO
THREE
Stejně jako -ArgumentList parametr ForEach-Object , arguments parametr umožňuje předání pole argumentů bloku skriptu nakonfigurovanému pro jejich přijetí.
Poznámka
Od Windows PowerShellu 3,0 načítání vlastností a spouštění metod pro každou položku v kolekci se dá také udělat pomocí metod skalárních objektů a kolekcí. Další informace najdete tady about_Methods
Kde
Umožňuje filtrovat nebo vybrat prvky pole. Skript se musí vyhodnotit na jinou hodnotu než: nula (0), prázdný řetězec $false nebo $null pro element, který se má zobrazit zaWhere
Pro metodu existuje jedna definice Where .
Where(scriptblock expression[, WhereOperatorSelectionMode mode
[, int numberToReturn]])
ExpressionJe ScriptBlock, který je vyžadován pro filtrování, mode volitelný argument umožňuje další možnosti výběru a numberToReturn volitelný argument umožňuje omezit počet položek vrácených z filtru.
Poznámka
Syntaxe vyžaduje použití bloku skriptu. Závorky jsou nepovinné.
Následující příklad ukazuje, jak vybrat všechna lichá čísla z pole.
(0..9).Where{ $_ % 2 }
1
3
5
7
9
K dispozici jsou následující režimy výběru.
Výchozí
DefaultRežim filtruje položky pomocí Expression ScriptBlock.
Pokud numberToReturn je k dispozici, určuje maximální počet položek, které se mají vrátit.
# Get the zip files in the current users profile, sorted by LastAccessTime.
$Zips = dir $env:userprofile -Recurse '*.zip' | Sort-Object LastAccessTime
# Get the least accessed file over 100MB
$Zips.Where({$_.Length -gt 100MB}, 'Default', 1)
Poznámka
DefaultRežim i režim First vrací první ( numberToReturn ) položku a lze je použít zaměnitelné.
Poslední
$h = (Get-Date).AddHours(-1)
$logs = dir 'C:\' -Recurse '*.log' | Sort-Object CreationTime
# Find the last 5 log files created in the past hour.
$logs.Where({$_.CreationTime -gt $h}, 'Last', 5)
SkipUntil
SkipUntilRežim přeskočí všechny objekty v kolekci, dokud objekt nepředá filtr výrazu bloku skriptu. Pak vrátí všechny zbývající položky kolekce bez jejich testování. Testuje se jenom jedna položka předávání.
To znamená, že vrácená kolekce bude obsahovat průchozí i neprůchozí položky, které nebyly testovány.
Počet vrácených položek může být omezen předáním hodnoty do numberToReturn argumentu.
$computers = "Server01", "Server02", "Server03", "localhost", "Server04"
# Find the first available online server.
$computers.Where({ Test-Connection $_ }, 'SkipUntil', 1)
localhost
Vrátí
UntilRežim obrátí SkipUntil režim. Vrátí všechny položky v kolekci, dokud položka nepředá výraz bloku skriptu. Jakmile položka předá výraz ScriptBlock, Where Metoda zastaví zpracování položek.
To znamená, že obdržíte první sadu nepředávání položek z Where metody. Po předávání jedné položky nebude zbytek testován ani vrácen.
Počet vrácených položek může být omezen předáním hodnoty do numberToReturn argumentu.
# Retrieve the first set of numbers less than or equal to 10.
(1..50).Where({$_ -gt 10}, 'Until')
# This would perform the same operation.
(1..50).Where({$_ -le 10})
1
2
3
4
5
6
7
8
9
10
Poznámka
UntilA SkipUntil pracují s místními testy, které netestuje dávku položek.
Untilvrátí položky před prvním průchodem.
SkipUntilVrátí všechny položky po prvním průchodu, včetně prvního předání položky.
Rozdělení
SplitRežim rozdělí nebo seskupí položky kolekce do dvou samostatných kolekcí. Ty, které předaly výraz ScriptBlock, a ty, které ne.
Je-li numberToReturn zadán, první kolekce bude obsahovat předávání položek, nikoli přesáhnout zadanou hodnotu.
Zbývající objekty, i ty, které předaly filtr výrazů, budou vráceny do druhé kolekce.
$running, $stopped = (Get-Service).Where({$_.Status -eq 'Running'}, 'Split')
$running
Status Name DisplayName
------ ---- -----------
Running Appinfo Application Information
Running AudioEndpointBu... Windows Audio Endpoint Builder
Running Audiosrv Windows Audio
...
$stopped
Status Name DisplayName
------ ---- -----------
Stopped AJRouter AllJoyn Router Service
Stopped ALG Application Layer Gateway Service
Stopped AppIDSvc Application Identity
...
Získání členů pole
Chcete-li získat vlastnosti a metody pole, jako je například vlastnost length a metoda SetValue, použijte parametr položky InputObject rutiny get-member.
Při přesměrování pole do kanálu Get-Member odešle PowerShell položky po jednom a Get-Member vrátí typ každé položky v poli (ignorování duplicitních hodnot).
Při použití parametru -položky InputObject Get-Member vrátí členy pole.
Například následující příkaz získá členy $a proměnné pole.
Get-Member -InputObject $a
Členy pole lze také získat zadáním čárky (,) před hodnotou, která je přepsána do přesměrovaného do rutiny get-member. Čárka vytvoří z pole druhou položku v poli polí. Prostředí Windows PowerShell rozřadí pole po jednom a vrátí člena, který vrací členy tohoto pole. Podobně jako v následujících dvou příkladech.
,$a | Get-Member
,(1,2,3) | Get-Member
Manipulace s polem
Můžete změnit prvky v poli, přidat prvek do pole a kombinovat hodnoty ze dvou polí do třetího pole.
Chcete-li změnit hodnotu konkrétního prvku v poli, zadejte název pole a index prvku, který chcete změnit, a poté použijte operátor přiřazení (=) k určení nové hodnoty prvku. Chcete-li například změnit hodnotu druhé položky v $a poli (index pozice 1) na hodnotu 10, zadejte:
$a[1] = 10
Můžete také použít metodu SetValue pole pro změnu hodnoty. V následujícím příkladu se změní druhá hodnota (index pozice 1) $a pole na 500:
$a.SetValue(500,1)
Operátor + = můžete použít k přidání elementu do pole. Následující příklad ukazuje, jak přidat prvek do $a pole.
$a = @(0..4)
$a += 5
Poznámka
Když použijete += operátor, PowerShell ve skutečnosti vytvoří nové pole s hodnotami původního pole a přidané hodnoty. To může způsobit problémy s výkonem, pokud se operace opakuje několikrát nebo je velikost pole příliš velká.
Nelze snadno odstranit prvky z pole, ale můžete vytvořit nové pole, které obsahuje pouze vybrané prvky existujícího pole. Chcete-li například vytvořit $t pole se všemi prvky v $a poli s výjimkou hodnoty na pozici indexu 2, zadejte:
$t = $a[0,1 + 3..($a.length - 1)]
Chcete-li zkombinovat dvě pole do jednoho pole, použijte operátor plus (+). Následující příklad vytvoří dvě pole, zkombinuje je a pak zobrazí výsledné kombinované pole.
$x = 1,3
$y = 5,9
$z = $x + $y
V důsledku toho $z pole obsahuje 1, 3, 5 a 9.
Chcete-li odstranit pole, přiřaďte poli hodnotu $null. Následující příkaz odstraní pole v $a proměnné.
$a = $null
Můžete také použít Remove-Item rutinu, ale přiřadíte hodnotu $null rychlejší, zejména pro velká pole.
Pole nula nebo jedna
Počínaje prostředím Windows PowerShell 3,0 má kolekce nula nebo jeden objekt vlastnost Count a length. Také je možné indexovat do pole jednoho objektu. Tato funkce pomáhá předejít chybám skriptování, ke kterým dochází, když příkaz, který očekává kolekci, získá méně než dvě položky.
Tuto funkci ukazují následující příklady.
Nula objektů
$a = $null
$a.Count
$a.Length
0
0
Jeden objekt
$a = 4
$a.Count
$a.Length
$a[0]
$a[-1]
1
1
4
4