about_Assignment_Operators
Korte beschrijving
Hierin wordt beschreven hoe u operators gebruikt om waarden toe te wijzen aan variabelen.
Lange beschrijving
Toewijzingsoperatoren wijzen een of meer waarden toe aan een variabele. Ze kunnen numerieke bewerkingen uitvoeren op de waarden vóór de toewijzing.
PowerShell ondersteunt de volgende toewijzingsoperatoren.
| Operator | Beschrijving |
|---|---|
| = | Hiermee stelt u de waarde van een variabele in op de opgegeven waarde. |
| += | Hiermee wordt de waarde van een variabele verhoogd op basis van de opgegeven waarde, of |
| voegt de opgegeven waarde toe aan de bestaande waarde. | |
| -= | Hiermee wordt de waarde van een variabele verlaagd op basis van de opgegeven waarde. |
| *= | Vermenigvuldigt de waarde van een variabele met de opgegeven waarde, of |
| voegt de opgegeven waarde toe aan de bestaande waarde. | |
| /= | Deelt de waarde van een variabele door de opgegeven waarde. |
| %= | Deelt de waarde van een variabele door de opgegeven waarde en |
| wijst vervolgens de rest (modulus) toe aan de variabele. | |
| ++ | Verhoogt de waarde van een variabele, toewijsbare eigenschap of |
| matrixelement met 1. | |
| -- | Hiermee verlaagt u de waarde van een variabele, toewijsbare eigenschap of |
| matrixelement met 1. |
Syntax
De syntaxis van de toewijzingsoperatoren is als volgt:
<assignable-expression> <assignment-operator> <value>
Toewijsbare expressies bevatten variabelen en eigenschappen. De waarde kan één waarde, een matrix met waarden of een opdracht, expressie of instructie zijn.
De operatoren voor verhogingen en verlagen zijn unaire operators. Elk bevat voorvoegsel- en voorvoegselversies.
<assignable-expression><operator>
<operator><assignable-expression>
De toewijsbare expressie moet een getal zijn of moet converteerbaar zijn naar een getal.
Waarden toewijzen
Variabelen zijn benoemde geheugenruimten waarmee waarden worden opgeslagen. U slaat de waarden in variabelen op met behulp van de toewijzingsoperator =. De nieuwe waarde kan de bestaande waarde van de variabele vervangen of u kunt een nieuwe waarde toevoegen aan de bestaande waarde.
De basistoewijzingsoperator is het gelijkteken =(ASCII 61). Met de volgende instructie wordt bijvoorbeeld de waarde van PowerShell toegewezen aan de $MyShell variabele:
$MyShell = "PowerShell"
Wanneer u een waarde toewijst aan een variabele in PowerShell, wordt de variabele gemaakt als deze nog niet bestond. Met de eerste van de volgende twee toewijzingsinstructies wordt bijvoorbeeld de $a variabele gemaakt en wordt een waarde van 6 toegewezen aan $a. Met de tweede toewijzingsinstructie wordt een waarde van 12 toegewezen aan $a. Met de eerste instructie wordt een nieuwe variabele gemaakt. De tweede instructie wijzigt alleen de waarde:
$a = 6
$a = 12
Variabelen in PowerShell hebben geen specifiek gegevenstype, tenzij u ze cast. Wanneer een variabele slechts één object bevat, neemt de variabele het gegevenstype van dat object. Wanneer een variabele een verzameling objecten bevat, heeft de variabele het gegevenstype System.Object. Daarom kunt u elk type object toewijzen aan de verzameling. In het volgende voorbeeld ziet u dat u procesobjecten, serviceobjecten, tekenreeksen en gehele getallen aan een variabele kunt toevoegen zonder een fout te genereren:
$a = Get-Process
$a += Get-Service
$a += "string"
$a += 12
Omdat de toewijzingsoperator = een lagere prioriteit heeft dan de pijplijnoperator |, zijn haakjes niet vereist om het resultaat van een opdrachtpijplijn toe te wijzen aan een variabele. Met de volgende opdracht worden bijvoorbeeld de services op de computer gesorteerd en worden de gesorteerde services vervolgens toegewezen aan de $a variabele:
$a = Get-Service | Sort-Object -Property name
U kunt ook de waarde die met een instructie is gemaakt, toewijzen aan een variabele, zoals in het volgende voorbeeld:
$a = if ($b -lt 0) { 0 } else { $b }
In dit voorbeeld wordt nul toegewezen aan de $a variabele als de waarde $b kleiner is dan nul. Hiermee wordt de waarde van $b$a opgegeven als de waarde $b niet kleiner is dan nul.
De toewijzingsoperator
De toewijzingsoperator = wijst waarden toe aan variabelen. Als de variabele al een waarde heeft, vervangt de toewijzingsoperator = de waarde zonder waarschuwing.
Met de volgende instructie wordt de geheel getalwaarde 6 toegewezen aan de $a variabele:
$a = 6
Als u een tekenreekswaarde wilt toewijzen aan een variabele, plaatst u de tekenreekswaarde als volgt tussen aanhalingstekens:
$a = "baseball"
Als u een matrix (meerdere waarden) wilt toewijzen aan een variabele, scheidt u de waarden als volgt met komma's:
$a = "apple", "orange", "lemon", "grape"
Als u een hash-tabel wilt toewijzen aan een variabele, gebruikt u de standaard-hashtabelnotatie in PowerShell. Typ een bijteken @ gevolgd door sleutel-waardeparen die worden gescheiden door puntkomma's ; en tussen accolades { }. Als u bijvoorbeeld een hash-tabel wilt toewijzen aan de $a variabele, typt u:
$a = @{one=1; two=2; three=3}
Als u hexadecimale waarden wilt toewijzen aan een variabele, gaat u vooraf aan de waarde met 0x.
PowerShell converteert de hexadecimale waarde (0x10) naar een decimale waarde (in dit geval 16) en wijst die waarde toe aan de $a variabele. Als u bijvoorbeeld een waarde van 0x10 wilt toewijzen aan de $a variabele, typt u:
$a = 0x10
Als u een exponentiële waarde wilt toewijzen aan een variabele, typt u het hoofdnummer, de letter een een getal dat een veelvoud van 10 vertegenwoordigt. Als u bijvoorbeeld een waarde van 3,1415 wilt toewijzen aan de macht van 1000 aan de $a variabele, typt u:
$a = 3.1415e3
PowerShell kan ook kilobytes, megabytes KBMBen gigabytes GB converteren naar bytes. Als u bijvoorbeeld een waarde van 10 kilobytes wilt toewijzen aan de $a variabele, typt u:
$a = 10kb
De toewijzing per opteloperator
Met de toewijzing door de operator voor optellen += wordt de waarde van een variabele verhoogd of wordt de opgegeven waarde toegevoegd aan de bestaande waarde. De actie is afhankelijk van of de variabele een numeriek of tekenreekstype heeft en of de variabele één waarde (een scalaire) of meerdere waarden (een verzameling) bevat.
De += operator combineert twee bewerkingen. Eerst wordt het toegevoegd en vervolgens toegewezen.
Daarom zijn de volgende beweringen gelijkwaardig:
$a += 2
$a = ($a + 2)
Wanneer de variabele één numerieke waarde bevat, wordt de bestaande waarde door de += operator verhoogd met het bedrag aan de rechterkant van de operator. Vervolgens wijst de operator de resulterende waarde toe aan de variabele. In het volgende voorbeeld ziet u hoe u de += operator gebruikt om de waarde van een variabele te verhogen:
$a = 4
$a += 2
$a
6
Wanneer de waarde van de variabele een tekenreeks is, wordt de waarde aan de rechterkant van de operator als volgt aan de tekenreeks toegevoegd:
$a = "Windows"
$a += " PowerShell"
$a
Windows PowerShell
Wanneer de waarde van de variabele een matrix is, voegt de += operator de waarden aan de rechterkant van de operator toe aan de matrix. Tenzij de matrix expliciet wordt getypt door cast-conversie, kunt u elk type waarde als volgt aan de matrix toevoegen:
$a = 1,2,3
$a += 2
$a
1
2
3
2
en
$a += "String"
$a
1
2
3
2
String
Wanneer de waarde van een variabele een hashtabel is, voegt de += operator de waarde aan de rechterkant van de operator toe aan de hashtabel. Omdat het enige type dat u aan een hashtabel kunt toevoegen echter een andere hashtabel is, mislukken alle andere toewijzingen.
Met de volgende opdracht wordt bijvoorbeeld een hash-tabel toegewezen aan de $a variabele.
Vervolgens wordt de += operator gebruikt om een andere hash-tabel toe te voegen aan de bestaande hash-tabel, waardoor er effectief een nieuw sleutel-waardepaar wordt toegevoegd aan de bestaande hash-tabel.
Deze opdracht slaagt, zoals wordt weergegeven in de uitvoer:
$a = @{a = 1; b = 2; c = 3}
$a += @{mode = "write"}
$a
Name Value
---- -----
a 1
b 2
mode write
c 3
Met de volgende opdracht wordt geprobeerd een geheel getal '1' toe te voegen aan de hash-tabel in de $a variabele. Deze opdracht mislukt:
$a = @{a = 1; b = 2; c = 3}
$a += 1
You can add another hash table only to a hash table.
At line:1 char:6
+ $a += <<<< 1
De toewijzing per aftrekkingsoperator
Met de toewijzing per aftrekkingsoperator -= wordt de waarde van een variabele afgetrokken door de waarde die aan de rechterkant van de operator is opgegeven. Deze operator kan niet worden gebruikt met tekenreeksvariabelen en kan niet worden gebruikt om een element uit een verzameling te verwijderen.
De -= operator combineert twee bewerkingen. Eerst wordt het afgetrokken en vervolgens toegewezen. Daarom zijn de volgende beweringen gelijkwaardig:
$a -= 2
$a = ($a - 2)
In het volgende voorbeeld ziet u hoe u de -= operator gebruikt om de waarde van een variabele te verlagen:
$a = 8
$a -= 2
$a
6
U kunt ook de -= toewijzingsoperator gebruiken om de waarde van een lid van een numerieke matrix te verlagen. Hiertoe geeft u de index op van het matrixelement dat u wilt wijzigen. In het volgende voorbeeld wordt de waarde van het derde element van een matrix (element 2) met 1 verlaagd:
$a = 1,2,3
$a[2] -= 1
$a
1
2
2
U kunt de -= operator niet gebruiken om de waarden van een variabele te verwijderen. Als u alle waarden wilt verwijderen die aan een variabele zijn toegewezen, gebruikt u de cmdlets Clear-Item of Clear-Variable om een waarde van $null of "" aan de variabele toe te wijzen.
$a = $null
Als u een bepaalde waarde uit een matrix wilt verwijderen, gebruikt u matrix notatie om een waarde van $null het specifieke item toe te wijzen. Met de volgende instructie wordt bijvoorbeeld de tweede waarde (indexpositie 1) uit een matrix verwijderd:
$a = 1,2,3
$a
1
2
3
$a[1] = $null
$a
1
3
Als u een variabele wilt verwijderen, gebruikt u de cmdlet Remove-Variable . Deze methode is handig wanneer de variabele expliciet wordt gecast naar een bepaald gegevenstype en u een niet-getypte variabele wilt. Met de volgende opdracht verwijdert u de $a variabele:
Remove-Variable -Name a
De toewijzing per vermenigvuldigingsoperator
De toewijzing per vermenigvuldigingsoperator *= vermenigvuldigt een numerieke waarde of voegt het opgegeven aantal exemplaren van de tekenreekswaarde van een variabele toe.
Wanneer een variabele één numerieke waarde bevat, wordt die waarde vermenigvuldigd met de waarde aan de rechterkant van de operator. In het volgende voorbeeld ziet u bijvoorbeeld hoe u de *= operator gebruikt om de waarde van een variabele te vermenigvuldigen:
$a = 3
$a *= 4
$a
12
In dit geval combineert de *= operator twee bewerkingen. Eerst wordt het vermenigvuldigd en vervolgens toegewezen. Daarom zijn de volgende instructies equivalent:
$a *= 2
$a = ($a * 2)
Wanneer een variabele een tekenreekswaarde bevat, voegt PowerShell als volgt het opgegeven aantal tekenreeksen toe aan de waarde:
$a = "file"
$a *= 4
$a
filefilefilefile
Als u een element van een matrix wilt vermenigvuldigen, gebruikt u een index om het element te identificeren dat u wilt vermenigvuldigen. Met de volgende opdracht wordt bijvoorbeeld het eerste element in de matrix (indexpositie 0) met 2 vermenigvuldigd:
$a[0] *= 2
De toewijzing per delingsoperator
De toewijzing per delingsoperator /= verdeelt een numerieke waarde door de waarde die aan de rechterkant van de operator is opgegeven. De operator kan niet worden gebruikt met tekenreeksvariabelen.
De /= operator combineert twee bewerkingen. Eerst wordt het verdeeld en vervolgens toegewezen. Daarom zijn de volgende twee instructies equivalent:
$a /= 2
$a = ($a / 2)
Met de volgende opdracht wordt bijvoorbeeld de /= operator gebruikt om de waarde van een variabele te delen:
$a = 8
$a /=2
$a
4
Als u een element van een matrix wilt delen, gebruikt u een index om het element te identificeren dat u wilt wijzigen. Met de volgende opdracht wordt bijvoorbeeld het tweede element in de matrix (indexpositie 1) door 2 gedeeld:
$a[1] /= 2
De toewijzing door modulus-operator
De toewijzing door modulusoperator %= deelt de waarde van een variabele door de waarde aan de rechterkant van de operator. Vervolgens wijst de %= operator de rest (ook wel de modulus genoemd) toe aan de variabele. U kunt deze operator alleen gebruiken wanneer een variabele één numerieke waarde bevat. U kunt deze operator niet gebruiken wanneer een variabele een tekenreeksvariabele of een matrix bevat.
De %= operator combineert twee bewerkingen. Eerst wordt de rest verdeeld en bepaald en vervolgens wordt de rest toegewezen aan de variabele. Daarom zijn de volgende instructies equivalent:
$a %= 2
$a = ($a % 2)
In het volgende voorbeeld ziet u hoe u de %= operator gebruikt om de modulus van een quotiënt op te slaan:
$a = 7
$a %= 4
$a
3
De operatoren voor incrementele en degradatie
De increment-operator ++ verhoogt de waarde van een variabele met 1. Wanneer u de increment-operator in een eenvoudige instructie gebruikt, wordt er geen waarde geretourneerd. Als u het resultaat wilt weergeven, geeft u de waarde van de variabele als volgt weer:
$a = 7
++$a
$a
8
Als u wilt afdwingen dat een waarde wordt geretourneerd, plaatst u de variabele en de operator tussen haakjes:
$a = 7
(++$a)
8
De incrementele operator kan vóór (voorvoegsel) of na (postfix) een variabele worden geplaatst. De voorvoegselversie van de operator incrementeert een variabele voordat de waarde in de instructie wordt gebruikt, als volgt:
$a = 7
$c = ++$a
$a
8
$c
8
Met de navoegselversie van de operator wordt een variabele verhoogd nadat de waarde ervan in de instructie is gebruikt. In het volgende voorbeeld hebben de $c variabelen $a verschillende waarden omdat de waarde wordt toegewezen aan $c voordat $a de wijzigingen worden gewijzigd:
$a = 7
$c = $a++
$a
8
$c
7
De operator -- voor aflopen verlaagt de waarde van een variabele met 1. Net als bij de incrementele operator wordt er geen waarde geretourneerd wanneer u de operator in een eenvoudige instructie gebruikt. Gebruik haakjes om een waarde als resultaat te geven:
$a = 7
--$a
$a
6
(--$a)
5
De voorvoegselversie van de operator degradeert een variabele voordat de waarde wordt gebruikt in de instructie, als volgt:
$a = 7
$c = --$a
$a
6
$c
6
De postfixversie van de operator degradeert een variabele nadat de waarde ervan in de instructie is gebruikt. In het volgende voorbeeld hebben de $d variabelen $a verschillende waarden omdat de waarde wordt toegewezen aan $d voordat $a de wijzigingen worden gewijzigd:
$a = 7
$d = $a--
$a
6
$d
7
Microsoft .NET-typen
Wanneer een variabele slechts één waarde heeft, bepaalt de waarde die aan de variabele is toegewezen het gegevenstype van de variabele. Met de volgende opdracht maakt u bijvoorbeeld een variabele met het type Integer (System.Int32):
$a = 6
Als u het .NET-type van een variabele wilt vinden, gebruikt u de methode GetType en de eigenschap FullName als volgt. Zorg ervoor dat u de haakjes na de naam van de GetType-methode opneemt, ook al heeft de aanroep van de methode geen argumenten:
$a = 6
$a.GetType().FullName
System.Int32
Als u een variabele wilt maken die een tekenreeks bevat, wijst u een tekenreekswaarde toe aan de variabele. Als u wilt aangeven dat de waarde een tekenreeks is, plaatst u deze als volgt tussen aanhalingstekens:
$a = "6"
$a.GetType().FullName
System.String
Als de eerste waarde die aan de variabele is toegewezen een tekenreeks is, behandelt PowerShell alle bewerkingen als tekenreeksbewerkingen en worden nieuwe waarden naar tekenreeksen gecast. Dit gebeurt in het volgende voorbeeld:
$a = "file"
$a += 3
$a
file3
Als de eerste waarde een geheel getal is, behandelt PowerShell alle bewerkingen als gehele getallen en worden nieuwe waarden naar gehele getallen gecast. Dit gebeurt in het volgende voorbeeld:
$a = 6
$a += "3"
$a
9
U kunt een nieuwe scalaire variabele casten als elk .NET-type door de typenaam tussen vierkante haken te plaatsen die voorafgaan aan de naam van de variabele of de eerste toewijzingswaarde. Wanneer u een variabele castt, kunt u bepalen welke typen gegevens in de variabele kunnen worden opgeslagen. En u kunt bepalen hoe de variabele zich gedraagt wanneer u deze bewerkt.
Met de volgende opdracht wordt de variabele bijvoorbeeld als tekenreekstype gecast:
[string]$a = 27
$a += 3
$a
273
In het volgende voorbeeld wordt de eerste waarde gecast in plaats van de variabele te casten:
$a = [string]27
Wanneer u een variabele naar een bepaald type cast, is de algemene conventie het casten van de variabele, niet de waarde. U kunt het gegevenstype van een bestaande variabele echter niet opnieuw converteren als de waarde niet kan worden geconverteerd naar het nieuwe gegevenstype. Als u het gegevenstype wilt wijzigen, moet u de waarde als volgt vervangen:
$a = "string"
[int]$a
Cannot convert value "string" to type "System.Int32". Error: "Input string was
not in a correct format." At line:1 char:8 + [int]$a <<<<
[int]$a = 3
Wanneer u een variabelenaam voorafgaat aan een gegevenstype, wordt het type van die variabele vergrendeld, tenzij u het type expliciet overschrijft door een ander gegevenstype op te geven. Als u probeert een waarde toe te wijzen die niet compatibel is met het bestaande type en u het type niet expliciet overschrijft, wordt in PowerShell een fout weergegeven, zoals wordt weergegeven in het volgende voorbeeld:
$a = 3
$a = "string"
[int]$a = 3
$a = "string"
Cannot convert value "string" to type "System.Int32". Error: "Input
string was not in a correct format."
At line:1 char:3
+ $a <<<< = "string"
[string]$a = "string"
In PowerShell worden de gegevenstypen variabelen die meerdere items in een matrix bevatten, anders verwerkt dan de gegevenstypen van variabelen die één item bevatten. Tenzij een gegevenstype specifiek is toegewezen aan een matrixvariabele, is het gegevenstype altijd System.Object []. Dit gegevenstype is specifiek voor matrices.
Soms kunt u het standaardtype overschrijven door een ander type op te geven. Met de volgende opdracht wordt de variabele bijvoorbeeld als matrixtype string [] gecast:
[string []] $a = "one", "two", "three"
PowerShell-variabelen kunnen elk .NET-gegevenstype zijn. Daarnaast kunt u elk volledig gekwalificeerde .NET-gegevenstype toewijzen dat beschikbaar is in het huidige proces. Met de volgende opdracht wordt bijvoorbeeld een System.DateTime gegevenstype opgegeven:
[System.DateTime]$a = "5/31/2005"
Aan de variabele wordt een waarde toegewezen die voldoet aan het System.DateTime gegevenstype. De waarde van de $a variabele is het volgende:
Tuesday, May 31, 2005 12:00:00 AM
Meerdere variabelen toewijzen
In PowerShell kunt u waarden toewijzen aan meerdere variabelen met behulp van één opdracht. Het eerste element van de toewijzingswaarde wordt toegewezen aan de eerste variabele, het tweede element wordt toegewezen aan de tweede variabele, het derde element aan de derde variabele, enzovoort. Dit staat bekend als meerdere toewijzingen.
Met de volgende opdracht wordt bijvoorbeeld de waarde 1 toegewezen aan de $a variabele, de waarde 2 aan de $b variabele en de waarde 3 aan de $c variabele:
$a, $b, $c = 1, 2, 3
Als de toewijzingswaarde meer elementen dan variabelen bevat, worden alle resterende waarden toegewezen aan de laatste variabele. De volgende opdracht bevat bijvoorbeeld drie variabelen en vijf waarden:
$a, $b, $c = 1, 2, 3, 4, 5
Daarom wijst PowerShell de waarde 1 toe aan de $a variabele en de waarde 2 aan de $b variabele. De waarden 3, 4 en 5 worden toegewezen aan de $c variabele.
Gebruik de volgende indeling om de waarden in de $c variabele toe te wijzen aan drie andere variabelen:
$d, $e, $f = $c
Met deze opdracht wordt de waarde 3 toegewezen aan de $d variabele, de waarde 4 aan de $e variabele en de waarde 5 aan de $f variabele.
Als de toewijzingswaarde minder elementen bevat dan variabelen, worden de resterende variabelen aan de waarde $nulltoegewezen. De volgende opdracht bevat bijvoorbeeld drie variabelen en twee waarden:
$a, $b, $c = 1, 2
Daarom wijst PowerShell de waarde 1 toe aan de $a variabele en de waarde 2 aan de $b variabele. De $c variabele is $null.
U kunt ook één waarde toewijzen aan meerdere variabelen door de variabelen te koppelen. Met de volgende opdracht wordt bijvoorbeeld een waarde van 'drie' toegewezen aan alle vier de variabelen:
$a = $b = $c = $d = "three"
Variabele-gerelateerde cmdlets
Naast het gebruik van een toewijzingsbewerking om een variabelewaarde in te stellen, kunt u ook de cmdlet Set-Variable gebruiken. De volgende opdracht gebruikt Set-Variable bijvoorbeeld om een matrix van 1, 2, 3 toe te wijzen aan de $a variabele.
Set-Variable -Name a -Value 1, 2, 3