about_Assignment_Operators

Krátký popis

Popisuje, jak pomocí operátorů přiřadit hodnoty proměnným.

Dlouhý popis

Operátory přiřazení přiřazují proměnné jednu nebo více hodnot. Znaménko rovná se (=) je operátor přiřazení PowerShellu. PowerShell má také následující operátory složeného přiřazení: +=, -=, *=, %=, ++, , --, . ??= Operátory složeného přiřazení provádějí operace s hodnotami před přiřazením.

Syntaxe

Syntaxe operátorů přiřazení je následující:

  • <assignable-expression> <assignment-operator> <value>

Přiřaditelné výrazy zahrnují proměnné a vlastnosti. Hodnota může být jedna hodnota, pole hodnot nebo příkaz, výraz nebo příkaz.

Operátory inkrementace a dekrementace jsou unární operátory. Každý má předponu a verze přípony.

  • <assignable-expression><operator>
  • <operator><assignable-expression>

Hodnota přiřaditelného výrazu musí být číslo nebo musí být konvertibilní na číslo.

Použití operátoru přiřazení

Proměnné jsou pojmenované paměťové prostory, které ukládají hodnoty. Hodnoty uložíte do proměnných pomocí operátoru =přiřazení . Nová hodnota může nahradit existující hodnotu proměnné nebo můžete k existující hodnotě připojit novou hodnotu. Například následující příkaz přiřadí proměnné hodnotu PowerShellu $MyShell :

$MyShell = "PowerShell"

Když přiřadíte hodnotu proměnné v PowerShellu, vytvoří se tato proměnná, pokud ještě neexistuje. Například první z následujících dvou příkazů přiřazení vytvoří $a proměnnou a přiřadí hodnotu 6 .$a Druhý příkaz přiřazení přiřadí hodnotu 12 .$a První příkaz vytvoří novou proměnnou. Druhý příkaz změní pouze jeho hodnotu:

$a = 6
$a = 12

Proměnné v PowerShellu nemají konkrétní datový typ, pokud je nepřetypujete. Pokud proměnná obsahuje pouze jeden objekt, přebírá proměnná datový typ daného objektu. Pokud proměnná obsahuje kolekci objektů, má proměnná datový typ System.Object . Proto můžete kolekci přiřadit libovolný typ objektu. Následující příklad ukazuje, že do proměnné můžete přidat objekty procesu, objekty služby, řetězce a celá čísla bez generování chyby:

$a = Get-Process
$a += Get-Service
$a += "string"
$a += 12

Vzhledem k tomu, že operátor = přiřazení má nižší prioritu než operátor |kanálu, nejsou k přiřazení výsledku kanálu příkazu k proměnné potřeba závorky. Například následující příkaz seřadí služby v počítači a pak přiřadí seřazené služby proměnné $a :

$a = Get-Service | Sort-Object -Property name

Hodnotu vytvořenou příkazem můžete také přiřadit proměnné, jak je znázorněno v následujícím příkladu:

$a = if ($b -lt 0) { 0 } else { $b }

Tento příklad přiřadí nula proměnné $a , pokud je hodnota $b menší než nula. Přiřadí hodnotu $b , pokud $a$b hodnota není menší než nula.

Pokud chcete proměnné přiřadit matici (více hodnot), oddělte hodnoty čárkami následujícím způsobem:

$a = "apple", "orange", "lemon", "grape"

K přiřazení hashovací tabulky k proměnné použijte standardní zápis hashovací tabulky v PowerShellu. Zadejte znak @ at následovaný dvojicemi klíč/hodnota, které jsou oddělené středníky ; a uzavřeny ve složených závorkách { }. Pokud chcete například přiřadit hashovací tabulku proměnné $a , zadejte:

$a = @{one=1; two=2; three=3}

Chcete-li přiřadit šestnáctkové hodnoty proměnné, před hodnotu zadejte 0x. PowerShell převede šestnáctkovou hodnotu (0x10) na desetinnou hodnotu (v tomto případě 16) a přiřadí tuto hodnotu proměnné $a . Pokud chcete například přiřadit hodnotu 0x10 proměnné $a , zadejte:

$a = 0x10

Pokud chcete přiřadit exponenciální hodnotu proměnné, zadejte kořenové číslo, písmeno ea číslo, které představuje násobek 10. Pokud chcete například přiřadit hodnotu 3,1415 mocnině 1 000 $a proměnné, zadejte:

$a = 3.1415e3

PowerShell může také převést kilobajty KB, megabajty MBa gigabajty GB na bajty. Pokud chcete například přiřadit hodnotu 10 kilobajtů $a proměnné, zadejte:

$a = 10kb

Použití operátorů složeného přiřazení

Operátory složeného přiřazení provádějí číselné operace s hodnotami před přiřazením.

Důležité

Operátory složeného přiřazení nepoužívají dynamické obory. Proměnná je vždy v aktuálním oboru.

V následujícím příkladu je proměnná $x definována v globálním oboru. Složené závorky vytvoří nový obor. Proměnná $x uvnitř složených závorek je nová instance, nikoli kopie globální proměnné.

$x = 1 # Global scope
& { $x += 1; $x }
1

Při použití běžného operátoru přiřazení získáte kopii proměnné z nadřazeného oboru. Všimněte si ale, že $x v nadřazené oblasti se nezmění.

$x = 1 # Global scope
& { $x = $x + 1; $x }
"Global `$x = $x"
2
Global $x = 1

Přiřazení operátorem sčítání

Operátor sčítání += buď zvýší hodnotu proměnné, nebo připojí zadanou hodnotu k existující hodnotě. Akce závisí na tom, jestli má proměnná číselný nebo řetězcový typ a jestli proměnná obsahuje jednu hodnotu (skalární) nebo více hodnot (kolekci).

Operátor += kombinuje dvě operace. Nejprve se přidá a přiřadí. Proto jsou následující příkazy ekvivalentní:

$a += 2
$a = ($a + 2)

Pokud proměnná obsahuje jednu číselnou hodnotu, += operátor zvýší existující hodnotu o hodnotu na pravé straně operátoru. Potom operátor přiřadí výslednou hodnotu proměnné. Následující příklad ukazuje, jak pomocí operátoru += zvýšit hodnotu proměnné:

$a = 4
$a += 2
$a
6

Pokud je hodnota proměnné řetězec, hodnota na pravé straně operátoru je připojena k řetězci následujícím způsobem:

$a = "Windows"
$a += " PowerShell"
$a
Windows PowerShell

Pokud je hodnota proměnné matice, += operátor připojí hodnoty na pravé straně operátoru k poli. Pokud není pole explicitně zadáno přetypováním, můžete k matici připojit libovolný typ hodnoty následujícím způsobem:

$a = 1,2,3
$a += 2
$a
1
2
3
2

a

$a += "String"
$a
1
2
3
2
String

Pokud je hodnota proměnné hash tabulka, += operátor připojí hodnotu na pravé straně operátoru k tabulce hash. Protože ale jediný typ, který můžete přidat do hashovací tabulky, je další hashovací tabulka, všechna ostatní přiřazení selžou.

Například následující příkaz přiřadí proměnné tabulku $a hash. Potom pomocí operátoru += připojí k existující tabulce hash další tabulku hash a efektivně přidá do existující tabulky hash novou dvojici klíč-hodnota. Tento příkaz bude úspěšný, jak je znázorněno ve výstupu:

$a = @{a = 1; b = 2; c = 3}
$a += @{mode = "write"}
$a
Name                           Value
----                           -----
a                              1
b                              2
mode                           write
c                              3

Následující příkaz se pokusí připojit celé číslo "1" k tabulce hash v $a proměnné. Tento příkaz selže:

$a = @{a = 1; b = 2; c = 3}
$a += 1
InvalidOperation:
Line |
   2 |  $a += 1
     |  ~~~~~~~
     | A hash table can only be added to another hash table.

Přiřazení operátorem odčítání

Přiřazení operátorem odčítání -= dekrementuje hodnotu proměnné hodnotou, která je zadaná na pravé straně operátoru. Tento operátor nelze použít s řetězcovými proměnnými a nedá se použít k odebrání elementu z kolekce.

Operátor -= kombinuje dvě operace. Nejprve odečítá a pak se přiřadí. Proto jsou následující příkazy ekvivalentní:

$a -= 2
$a = ($a - 2)

Následující příklad ukazuje, jak pomocí operátoru -= snížit hodnotu proměnné:

$a = 8
$a -= 2
$a
6

Pomocí operátoru -= přiřazení můžete také snížit hodnotu člena číselného pole. Chcete-li to provést, zadejte index prvku pole, který chcete změnit. V následujícím příkladu je hodnota třetího prvku pole (prvek 2) snížena o 1:

$a = 1,2,3
$a[2] -= 1
$a
1
2
2

Operátor nelze použít -= k odstranění hodnot proměnné. Pokud chcete odstranit všechny hodnoty přiřazené proměnné, použijte rutiny Clear-Item nebo Clear-Variable k přiřazení hodnoty $null proměnné nebo "" proměnné.

$a = $null

Pokud chcete odstranit určitou hodnotu z pole, pomocí zápisu $null pole přiřaďte konkrétní položce hodnotu. Následující příkaz například odstraní druhou hodnotu (pozice indexu 1) z pole:

$a = 1,2,3
$a
1
2
3
$a[1] = $null
$a
1
3

Pokud chcete odstranit proměnnou, použijte rutinu Remove-Variable . Tato metoda je užitečná, když je proměnná explicitně přetypována na konkrétní datový typ a chcete netypovou proměnnou. Následující příkaz odstraní proměnnou $a :

Remove-Variable -Name a

Přiřazení operátorem násobení

Přiřazení operátorem násobení *= vynásobí číselnou hodnotu nebo připojí zadaný počet kopií řetězcové hodnoty proměnné.

Pokud proměnná obsahuje jednu číselnou hodnotu, tato hodnota se vynásobí hodnotou na pravé straně operátoru. Například následující příklad ukazuje, jak pomocí *= operátoru vynásobit hodnotu proměnné:

$a = 3
$a *= 4
$a
12

V tomto případě *= operátor kombinuje dvě operace. Nejprve se vynásobí a pak se přiřadí. Proto jsou následující příkazy ekvivalentní:

$a *= 2
$a = ($a * 2)

Pokud proměnná obsahuje řetězcovou hodnotu, PowerShell připojí k hodnotě zadaný počet řetězců následujícím způsobem:

$a = "file"
$a *= 4
$a
filefilefilefile

Pokud chcete prvek pole vynásobit, použijte index k identifikaci prvku, který chcete násobit. Například následující příkaz vynásobí první prvek pole (pozice indexu 0) o 2:

$a[0] *= 2

Přiřazení operátorem dělení

Přiřazení operátorem dělení /= vydělí číselnou hodnotu hodnotou, která je zadaná na pravé straně operátoru. Operátor nelze použít s řetězcovými proměnnými.

Operátor /= kombinuje dvě operace. Nejprve se rozdělí a přiřadí. Proto jsou následující dva příkazy ekvivalentní:

$a /= 2
$a = ($a / 2)

Například následující příkaz používá /= operátor k rozdělení hodnoty proměnné:

$a = 8
$a /=2
$a
4

Chcete-li rozdělit prvek pole, použijte index k identifikaci prvku, který chcete změnit. Například následující příkaz vydělí druhý prvek v matici (pozice indexu 1) 2:

$a[1] /= 2

Přiřazení operátorem modulus

Přiřazení operátorem modulus %= vydělí hodnotu proměnné hodnotou na pravé straně operátoru. %= Potom operátor přiřadí zbytek proměnné (označované jako moduly). Tento operátor můžete použít pouze v případě, že proměnná obsahuje jednu číselnou hodnotu. Tento operátor nelze použít, pokud proměnná obsahuje řetězcovou proměnnou nebo pole.

Operátor %= kombinuje dvě operace. Nejprve rozdělí a určí zbytek a pak přiřadí zbytek proměnné. Proto jsou následující příkazy ekvivalentní:

$a %= 2
$a = ($a % 2)

Následující příklad ukazuje, jak pomocí operátoru %= uložit moduly podílu:

$a = 7
$a %= 4
$a
3

Operátory inkrementace a dekrementace

Operátor přírůstku ++ zvyšuje hodnotu proměnné o 1. Pokud použijete operátor inkrementace v jednoduchém příkazu, nebude vrácena žádná hodnota. Pokud chcete zobrazit výsledek, zobrazte hodnotu proměnné následujícím způsobem:

$a = 7
++$a
$a
8

Pokud chcete vynutit vrácení hodnoty, uzavřete proměnnou a operátor do závorek následujícím způsobem:

$a = 7
(++$a)
8

Operátor přírůstku lze umístit před proměnnou (předponu) nebo za (příponu). Verze předpony operátoru zvýší proměnnou před její hodnotou v příkazu následujícím způsobem:

$a = 7
$c = ++$a
$a
8
$c
8

Verze přípony operátoru zvýší proměnnou po jejím použití v příkazu. V následujícím příkladu mají proměnné $a různé hodnoty, $c protože hodnota je přiřazena před $c$a změnami:

$a = 7
$c = $a++
$a
8
$c
7

Operátor dekrementace -- snižuje hodnotu proměnné o 1. Stejně jako u operátoru přírůstku se při použití operátoru v jednoduchém příkazu nevrátí žádná hodnota. K vrácení hodnoty použijte závorky následujícím způsobem:

$a = 7
--$a
$a
6
(--$a)
5

Verze předpony operátoru dekrementuje proměnnou před její hodnotou v příkazu následujícím způsobem:

$a = 7
$c = --$a
$a
6
$c
6

Verze přípony operátoru po použití jeho hodnoty v příkazu dekrementuje proměnnou. V následujícím příkladu mají proměnné $a různé hodnoty, $d protože hodnota je přiřazena před $d$a změnami:

$a = 7
$d = $a--
$a
6
$d
7

Operátor přiřazení při sjednocení s hodnotou null

Operátor přiřazení přiřazení ??= s hodnotou null přiřazuje hodnotu svého operandu zprava do levého operandu pouze v případě, že se operand vlevo vyhodnotí jako null. Operátor ??= nevyhodnocuje jeho operand zprava, pokud se operand vlevo vyhodnotí jako nenulový.

$x = $null
$x ??= 100
$x
100

Další informace naleznete v tématu Null-coalescing operátor.

Typy Microsoft .NET

Ve výchozím nastavení platí, že pokud má proměnná pouze jednu hodnotu, určuje hodnota, která je k proměnné přiřazena, datový typ proměnné. Například následující příkaz vytvoří proměnnou, která má typ System.Int32 :

$a = 6

Chcete-li najít typ .NET proměnné, použijte GetType metoda a jeho FullName vlastnost. Nezapomeňte za název metody GetType zahrnout závorky, i když volání metody nemá žádné argumenty:

$a = 6
$a.GetType().FullName
System.Int32

Chcete-li vytvořit proměnnou obsahující řetězec, přiřaďte k proměnné hodnotu řetězce. Chcete-li označit, že hodnota je řetězec, uzavřete ji do uvozovek následujícím způsobem:

$a = "6"
$a.GetType().FullName
System.String

Pokud je první hodnota přiřazená proměnné řetězec, PowerShell zachází se všemi operacemi jako s řetězcovými operacemi a přetypuje nové hodnoty na řetězce. K tomu dochází v následujícím příkladu:

$a = "file"
$a += 3
$a
file3

Pokud je první hodnota celé číslo, PowerShell zpracovává všechny operace jako celočíselné operace a přetypuje nové hodnoty na celá čísla. K tomu dochází v následujícím příkladu:

$a = 6
$a += "3"
$a
9

Novou skalární proměnnou můžete přetypovat jako libovolný typ .NET umístěním názvu typu do závorek, které předchází názvu proměnné nebo první hodnotě přiřazení. Při přetypování proměnné definujete typ dat, která lze v proměnné uložit.

Například následující příkaz přetypuje proměnnou jako typ řetězce:

[string]$a = 27
$a += 3
$a
273

Následující příklad přetypuje první hodnotu místo přetypování proměnné:

$a = [string]27

Datový typ existující proměnné nelze přetypovat, pokud jeho hodnota nejde převést na nový datový typ.

$a = "string"
[int]$a
InvalidArgument: Cannot convert value "string" to type "System.Int32". Error:
"The input string 'string' was not in a correct format."

Chcete-li změnit datový typ, je nutné nahradit jeho hodnotu následujícím způsobem:

[int]$a = 3

Pokud před názvem proměnné předepíšete datový typ, je typ této proměnné uzamčen, pokud typ explicitně nepřepíšete zadáním jiného datového typu. Pokud se pokusíte přiřadit hodnotu, která není kompatibilní s existujícím typem, a tento typ explicitně nepřepíšete, PowerShell zobrazí chybu, jak je znázorněno v následujícím příkladu:

$a = 3
$a = "string"
[int]$a = 3
$a = "string"
MetadataError:
Line |
   2 |  $a = "string"
     |  ~~~~~~~~~~~~~
     | Cannot convert value "string" to type "System.Int32". Error: "The input
string 'string' was not in a correct format."
[string]$a = "string"

V PowerShellu se datové typy proměnných, které obsahují více položek v poli, zpracovávají jinak než datové typy proměnných, které obsahují jednu položku. Pokud není datový typ výslovně přiřazen k proměnné pole, je datový typ vždy System.Object []. Tento datový typ je specifický pro pole.

Někdy můžete výchozí typ přepsat zadáním jiného typu. Například následující příkaz přetypuje proměnnou string [] jako typ pole:

[string []] $a = "one", "two", "three"

Proměnné PowerShellu můžou být libovolným datovým typem .NET. Kromě toho můžete přiřadit libovolný plně kvalifikovaný datový typ .NET, který je k dispozici v aktuálním procesu. Například následující příkaz určuje System.DateTime datový typ:

[System.DateTime]$a = "5/31/2005"

Proměnná bude přiřazena hodnota, která odpovídá datovému System.DateTime typu. Hodnota $a proměnné by byla následující:

Tuesday, May 31, 2005 12:00:00 AM

Přiřazení více proměnných

V PowerShellu můžete přiřadit hodnoty více proměnným pomocí jednoho příkazu. První prvek hodnoty přiřazení je přiřazen první proměnné, druhý prvek je přiřazen k druhé proměnné, třetí prvek třetí proměnné. To se označuje jako více přiřazení.

Například následující příkaz přiřadí hodnotu 1 proměnné $a , hodnotu 2 proměnné $b a hodnotu 3 proměnné $c :

$a, $b, $c = 1, 2, 3

Pokud hodnota přiřazení obsahuje více prvků než proměnné, přiřadí se všechny zbývající hodnoty poslední proměnné. Následující příkaz například obsahuje tři proměnné a pět hodnot:

$a, $b, $c = 1, 2, 3, 4, 5

Proto PowerShell přiřadí hodnotu 1 proměnné $a a hodnotu 2 proměnné $b . Přiřadí proměnné hodnoty 3, 4 a 5 $c . K přiřazení hodnot v $c proměnné třem dalším proměnným použijte následující formát:

$d, $e, $f = $c

Tento příkaz přiřadí hodnotu 3 proměnné $d , hodnotu 4 proměnné $e a hodnotu 5 proměnné $f .

Pokud hodnota přiřazení obsahuje méně prvků než proměnné, zbývající proměnné jsou přiřazeny hodnotu $null. Například následující příkaz obsahuje tři proměnné a dvě hodnoty:

$a, $b, $c = 1, 2

Proto PowerShell přiřadí hodnotu 1 proměnné $a a hodnotu 2 proměnné $b . Proměnná $c je $null.

Můžete také přiřadit jednu hodnotu více proměnným zřetězenými proměnnými. Následující příkaz například přiřadí hodnotu "tři" všem čtyř proměnným:

$a = $b = $c = $d = "three"

Kromě použití operace přiřazení k nastavení hodnoty proměnné můžete použít také rutinu Set-Variable . Následující příkaz například používá Set-Variable k přiřazení pole 1, 2, 3 proměnné $a .

Set-Variable -Name a -Value 1, 2, 3

Viz také