about_Assignment_Operators

Kort beskrivning

Beskriver hur du använder operatorer för att tilldela värden till variabler.

Lång beskrivning

Tilldelningsoperatorer tilldelar en eller flera värden till en variabel. Likhetstecknet (=) är PowerShell-tilldelningsoperatorn. PowerShell har också följande sammansatta tilldelningsoperatorer: +=, -=, *=, %=, ++, --, . ??= Sammansatta tilldelningsoperatorer utför åtgärder på värdena före tilldelningen.

Syntax

Syntaxen för tilldelningsoperatorerna är följande:

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

Tilldelningsbara uttryck omfattar variabler och egenskaper. Värdet kan vara ett enda värde, en matris med värden eller ett kommando, ett uttryck eller en instruktion.

Operatorerna för ökning och minskning är oförutseliga operatorer. Var och en har prefix- och postfixversioner.

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

Värdet för det tilldelningsbara uttrycket måste vara ett tal eller så måste det konverteras till ett tal.

Använda tilldelningsoperatorn

Variabler heter minnesutrymmen som lagrar värden. Du lagrar värdena i variabler med hjälp av tilldelningsoperatorn =. Det nya värdet kan ersätta det befintliga värdet för variabeln, eller så kan du lägga till ett nytt värde i det befintliga värdet. Följande instruktion tilldelar till exempel värdet PowerShell till variabeln $MyShell :

$MyShell = "PowerShell"

När du tilldelar ett värde till en variabel i PowerShell skapas variabeln om den inte redan fanns. Den första av följande två tilldelningsuttryck skapar till exempel variabeln $a och tilldelar värdet 6 till $a. Den andra tilldelningssatsen tilldelar värdet 12 till $a. Den första instruktionen skapar en ny variabel. Den andra instruktionen ändrar endast dess värde:

$a = 6
$a = 12

Variabler i PowerShell har ingen specifik datatyp om du inte genererar dem. När en variabel endast innehåller ett objekt tar variabeln datatypen för objektet. När en variabel innehåller en samling objekt har variabeln datatypen System.Object . Därför kan du tilldela alla typer av objekt till samlingen. I följande exempel visas att du kan lägga till processobjekt, tjänstobjekt, strängar och heltal i en variabel utan att generera ett fel:

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

Eftersom tilldelningsoperatorn = har lägre prioritet än pipelineoperatorn |krävs inte parenteser för att tilldela resultatet av en kommandopipeline till en variabel. Följande kommando sorterar till exempel tjänsterna på datorn och tilldelar sedan de sorterade tjänsterna till variabeln $a :

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

Du kan också tilldela värdet som skapas av en -instruktion till en variabel, som i följande exempel:

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

Det här exemplet tilldelar noll till variabeln $a om värdet $b för är mindre än noll. Det tilldelar värdet $b för om $a värdet $b för inte är mindre än noll.

Om du vill tilldela en matris (flera värden) till en variabel separerar du värdena med kommatecken enligt följande:

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

Om du vill tilldela en hash-tabell till en variabel använder du standard-hashtabellens notation i PowerShell. Skriv ett vid tecken @ följt av nyckel/värde-par som avgränsas med semikolon ; och omges av klammerparenteser { }. Om du till exempel vill tilldela en hashtable till variabeln $a skriver du:

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

Om du vill tilldela hexadecimala värden till en variabel, föregår du värdet med 0x. PowerShell konverterar hexadecimalt värde (0x10) till ett decimalvärde (i det här fallet 16) och tilldelar det värdet till variabeln $a . Om du till exempel vill tilldela variabeln $a ett värde av 0x10 skriver du:

$a = 0x10

Om du vill tilldela ett exponentiellt värde till en variabel skriver du rotnumret, bokstaven eoch ett tal som representerar en multipel av 10. Om du till exempel vill tilldela värdet 3,1415 till kraften 1 000 till variabeln $a skriver du:

$a = 3.1415e3

PowerShell kan också konvertera kilobyte KB, megabyte MBoch gigabyte GB till byte. Om du till exempel vill tilldela variabeln $a ett värde på 10 kilobyte skriver du:

$a = 10kb

Använda sammansatta tilldelningsoperatorer

Sammansatta tilldelningsoperatorer utför numeriska åtgärder på värdena före tilldelningen.

Viktigt!

Sammansatta tilldelningsoperatorer använder inte dynamisk omfång. Variabeln finns alltid i det aktuella omfånget.

I följande exempel definieras variabeln $x i det globala omfånget. Klammerparenteserna skapar ett nytt omfång. Variabeln $x inuti klammerparenteserna är en ny instans och inte en kopia av den globala variabeln.

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

När du använder den vanliga tilldelningsoperatorn får du en kopia av variabeln från det överordnade omfånget. Observera dock att i det $x överordnade omfånget ändras inte.

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

Tilldelningen efter additionsoperator

Tilldelningen efter additionsoperator += ökar antingen värdet för en variabel eller lägger till det angivna värdet i det befintliga värdet. Åtgärden beror på om variabeln har en numerisk eller strängtyp och om variabeln innehåller ett enda värde (en skalär) eller flera värden (en samling).

Operatorn += kombinerar två åtgärder. Först lägger den till och tilldelar sedan. Därför är följande instruktioner likvärdiga:

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

När variabeln innehåller ett enda numeriskt värde ökar operatorn += det befintliga värdet med beloppet till höger om operatorn. Sedan tilldelar operatorn det resulterande värdet till variabeln. I följande exempel visas hur du använder operatorn += för att öka värdet för en variabel:

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

När värdet för variabeln är en sträng läggs värdet till höger om operatorn i strängen enligt följande:

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

När värdet för variabeln är en matris lägger operatorn += till värdena till höger om operatorn i matrisen. Såvida inte matrisen uttryckligen skrivs genom gjutning kan du lägga till valfri typ av värde i matrisen på följande sätt:

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

och

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

När värdet för en variabel är en hash-tabell lägger operatorn += till värdet till höger om operatorn i hash-tabellen. Men eftersom den enda typ som du kan lägga till i en hash-tabell är en annan hash-tabell misslyckas alla andra tilldelningar.

Följande kommando tilldelar till exempel en hash-tabell till variabeln $a . Sedan använder den operatorn += för att lägga till en annan hash-tabell i den befintliga hash-tabellen, vilket i praktiken lägger till ett nytt nyckel/värde-par i den befintliga hash-tabellen. Det här kommandot lyckas enligt utdata:

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

Följande kommando försöker lägga till ett heltal "1" i hash-tabellen i variabeln $a . Det här kommandot misslyckas:

$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.

Tilldelningen efter subtraktionsoperator

Tilldelningen efter subtraktionsoperator -= minskar värdet för en variabel med det värde som anges till höger om operatorn. Den här operatorn kan inte användas med strängvariabler och kan inte användas för att ta bort ett element från en samling.

Operatorn -= kombinerar två åtgärder. Först subtraherar den och tilldelar sedan. Därför är följande instruktioner likvärdiga:

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

I följande exempel visas hur du använder operatorn -= för att minska värdet för en variabel:

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

Du kan också använda tilldelningsoperatorn -= för att minska värdet för en medlem i en numerisk matris. Det gör du genom att ange indexet för det matriselement som du vill ändra. I följande exempel minskas värdet för det tredje elementet i en matris (element 2) med 1:

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

Du kan inte använda operatorn -= för att ta bort värdena för en variabel. Om du vill ta bort alla värden som har tilldelats till en variabel använder du cmdletarna Clear-Item eller Clear-Variable för att tilldela ett värde för $null eller "" till variabeln.

$a = $null

Om du vill ta bort ett visst värde från en matris använder du matris notation för att tilldela ett värde $null till det specifika objektet. Följande instruktion tar till exempel bort det andra värdet (indexposition 1) från en matris:

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

Om du vill ta bort en variabel använder du cmdleten Remove-Variable . Den här metoden är användbar när variabeln uttryckligen omvandlas till en viss datatyp och du vill ha en otypad variabel. Följande kommando tar bort variabeln $a :

Remove-Variable -Name a

Tilldelning av multiplikationsoperator

Tilldelningen efter multiplikationsoperator *= multiplicerar ett numeriskt värde eller lägger till det angivna antalet kopior av strängvärdet för en variabel.

När en variabel innehåller ett enda numeriskt värde multipliceras det värdet med värdet till höger om operatorn. I följande exempel visas till exempel hur du använder operatorn *= för att multiplicera värdet för en variabel:

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

I det här fallet kombinerar operatorn *= två åtgärder. Först multipliceras den och tilldelas sedan. Därför är följande instruktioner likvärdiga:

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

När en variabel innehåller ett strängvärde lägger PowerShell till det angivna antalet strängar i värdet enligt följande:

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

Om du vill multiplicera ett element i en matris använder du ett index för att identifiera det element som du vill multiplicera. Följande kommando multiplicerar till exempel det första elementet i matrisen (indexposition 0) med 2:

$a[0] *= 2

Tilldelningen efter divisionsoperator

Tilldelningen efter divisionsoperator /= delar upp ett numeriskt värde med det värde som anges till höger om operatorn. Operatorn kan inte användas med strängvariabler.

Operatorn /= kombinerar två åtgärder. Först delar den upp och tilldelar sedan. Därför är följande två uttryck likvärdiga:

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

Följande kommando använder till exempel operatorn /= för att dela upp värdet för en variabel:

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

Om du vill dela upp ett element i en matris använder du ett index för att identifiera det element som du vill ändra. Följande kommando delar till exempel det andra elementet i matrisen (indexposition 1) med 2:

$a[1] /= 2

Tilldelningen efter modulusoperator

Tilldelningen efter modulusoperator %= delar värdet för en variabel med värdet till höger om operatorn. Sedan tilldelar operatorn %= resten (kallas modulus) till variabeln. Du kan bara använda den här operatorn när en variabel innehåller ett enda numeriskt värde. Du kan inte använda den här operatorn när en variabel innehåller en strängvariabel eller en matris.

Operatorn %= kombinerar två åtgärder. Först delar den upp och bestämmer resten och tilldelar sedan resten till variabeln. Därför är följande instruktioner likvärdiga:

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

I följande exempel visas hur du använder operatorn %= för att spara modulus för en kvot:

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

Operatorerna för ökning och minskning

Inkrementsoperatorn ++ ökar värdet för en variabel med 1. När du använder inkrementsoperatorn i en enkel instruktion returneras inget värde. Om du vill visa resultatet visar du värdet för variabeln enligt följande:

$a = 7
++$a
$a
8

Om du vill framtvinga att ett värde returneras omger du variabeln och operatorn inom parenteser enligt följande:

$a = 7
(++$a)
8

Inkrementsoperatorn kan placeras före (prefix) eller efter (postfix) en variabel. Prefixversionen av operatorn ökar en variabel innan dess värde används i -instruktionen enligt följande:

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

Postfixversionen av operatorn ökar en variabel efter att dess värde har använts i -instruktionen. I följande exempel har variablerna $c och $a olika värden eftersom värdet tilldelas till $c före $a ändringar:

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

Den minskande operatorn -- minskar värdet för en variabel med 1. Precis som med inkrementsoperatorn returneras inget värde när du använder operatorn i en enkel instruktion. Använd parenteser för att returnera ett värde enligt följande:

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

Prefixversionen av operatorn minskar en variabel innan dess värde används i -instruktionen enligt följande:

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

Postfixversionen av operatorn minskar en variabel efter att dess värde har använts i -instruktionen. I följande exempel har variablerna $d och $a olika värden eftersom värdet tilldelas till $d före $a ändringar:

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

Null-sammanslutande tilldelningsoperator

Tilldelningsoperatorn ??= null-coalescing tilldelar endast värdet för sin högra operande till sin vänstra operande om den vänstra operanden utvärderas till null. Operatorn ??= utvärderar inte sin högra operand om den vänstra operanden utvärderas till icke-null.

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

Mer information finns i Operatorn Null-coalescing.

Microsoft .NET-typer

När en variabel bara har ett värde avgör som standard värdet som tilldelas variabeln datatypen för variabeln. Följande kommando skapar till exempel en variabel som har typen System.Int32 :

$a = 6

Om du vill hitta .NET-typen för en variabel använder du metoden GetType och egenskapen FullName . Se till att inkludera parenteserna efter GetType-metodnamnet , även om metodanropet inte har några argument:

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

Om du vill skapa en variabel som innehåller en sträng tilldelar du ett strängvärde till variabeln. Om du vill ange att värdet är en sträng omger du det inom citattecken enligt följande:

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

Om det första värdet som tilldelas variabeln är en sträng behandlar PowerShell alla åtgärder som strängåtgärder och omvandlar nya värden till strängar. Detta inträffar i följande exempel:

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

Om det första värdet är ett heltal behandlar PowerShell alla åtgärder som heltalsåtgärder och omvandlar nya värden till heltal. Detta inträffar i följande exempel:

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

Du kan omvandla en ny skalär variabel som valfri .NET-typ genom att placera typnamnet inom hakparenteser som föregår antingen variabelnamnet eller det första tilldelningsvärdet. När du omvandlar en variabel definierar du vilken typ av data som kan lagras i variabeln.

Följande kommando omvandlar till exempel variabeln som en strängtyp:

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

I följande exempel returneras det första värdet i stället för att variabeln omvandlas:

$a = [string]27

Du kan inte omarbeta datatypen för en befintlig variabel om dess värde inte kan konverteras till den nya datatypen.

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

Om du vill ändra datatypen måste du ersätta dess värde enligt följande:

[int]$a = 3

När du föregår ett variabelnamn med en datatyp låses dessutom typen av variabel om du inte uttryckligen åsidosätter typen genom att ange en annan datatyp. Om du försöker tilldela ett värde som är inkompatibelt med den befintliga typen och du inte uttryckligen åsidosätter typen, visar PowerShell ett fel som visas i följande exempel:

$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"

I PowerShell hanteras datatyperna för variabler som innehåller flera objekt i en matris på ett annat sätt än de datatyper av variabler som innehåller ett enda objekt. Om inte en datatyp är specifikt tilldelad till en matrisvariabel är datatypen alltid System.Object []. Den här datatypen är specifik för matriser.

Ibland kan du åsidosätta standardtypen genom att ange en annan typ. Följande kommando omvandlar till exempel variabeln som en string [] matristyp:

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

PowerShell-variabler kan vara valfri .NET-datatyp. Dessutom kan du tilldela alla fullständigt kvalificerade .NET-datatyper som är tillgängliga i den aktuella processen. Följande kommando anger till exempel en System.DateTime datatyp:

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

Variabeln tilldelas ett värde som överensstämmer System.DateTime med datatypen. Värdet för variabeln $a skulle vara följande:

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

Tilldela flera variabler

I PowerShell kan du tilldela värden till flera variabler med hjälp av ett enda kommando. Det första elementet i tilldelningsvärdet tilldelas till den första variabeln, det andra elementet tilldelas till den andra variabeln, det tredje elementet till den tredje variabeln. Detta kallas för flera tilldelningar.

Följande kommando tilldelar till exempel värdet 1 till variabeln $a , värdet 2 till variabeln $b och värdet 3 till variabeln $c :

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

Om tilldelningsvärdet innehåller fler element än variabler tilldelas alla återstående värden till den sista variabeln. Följande kommando innehåller till exempel tre variabler och fem värden:

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

Därför tilldelar PowerShell värdet 1 till variabeln $a och värdet 2 till variabeln $b . Den tilldelar värdena 3, 4 och 5 till variabeln $c . Om du vill tilldela värdena i variabeln $c till tre andra variabler använder du följande format:

$d, $e, $f = $c

Det här kommandot tilldelar värdet 3 till variabeln $d , värdet 4 till variabeln $e och värdet 5 till variabeln $f .

Om tilldelningsvärdet innehåller färre element än variabler tilldelas de återstående variablerna värdet $null. Följande kommando innehåller till exempel tre variabler och två värden:

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

Därför tilldelar PowerShell värdet 1 till variabeln $a och värdet 2 till variabeln $b . Variabeln $c är $null.

Du kan också tilldela ett enda värde till flera variabler genom att länka variablerna. Följande kommando tilldelar till exempel värdet "tre" till alla fyra variablerna:

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

Förutom att använda en tilldelningsåtgärd för att ange ett variabelvärde kan du även använda cmdleten Set-Variable . Följande kommando använder Set-Variable till exempel för att tilldela en matris med 1, 2, 3 till variabeln $a .

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

Se även