Udostępnij za pośrednictwem


o_Operatorach_Przydziału

Krótki opis

Opisuje sposób przypisywania wartości do zmiennych przy użyciu operatorów.

Długi opis

Operatory przypisania przypisują co najmniej jedną wartość do zmiennej. Znak równości (=) jest operatorem przypisania w PowerShell. PowerShell ma również następujące operatory przypisania złożonego: , +=, -=, *=, %=, ++, --, ??=. Operatory przypisania złożonego wykonują operacje na wartościach przed przypisaniem.

Składnia

Składnia operatorów przypisania jest następująca:

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

Wyrażenia możliwe do przypisania obejmują zmienne i właściwości. Wartość może być pojedynczą wartością, tablicą wartości lub poleceniem, wyrażeniem lub instrukcją.

Operatory przyrostu i dekrementacji są operatorami jednoargumentowymi. Każdy ma wersje z prefiksem i postfiksem.

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

Wartość przypisywanego wyrażenia musi być liczbą lub musi być konwertowana na liczbę.

Korzystanie z operatora przypisania

Zmienne są nazwanymi miejscami pamięci, które przechowują wartości. Wartości są przechowywane w zmiennych przy użyciu operatora przypisania =. Nowa wartość może zastąpić istniejącą wartość zmiennej lub dołączyć nową wartość do istniejącej wartości. Na przykład następująca instrukcja przypisuje wartość programu PowerShell do zmiennej $MyShell:

$MyShell = "PowerShell"

Po przypisaniu wartości do zmiennej w programie PowerShell zmienna zostanie utworzona, jeśli jeszcze nie istnieje. Na przykład pierwsza z następujących dwóch instrukcji przypisania tworzy zmienną $a i przypisuje wartość 6 do $a. Druga instrukcja przypisania przypisuje wartość 12 do $a. Pierwsza instrukcja tworzy nową zmienną. Druga deklaracja zmienia tylko swoją wartość.

$a = 6
$a = 12

Zmienne w programie PowerShell nie mają określonego typu danych, chyba że zostaną zrzutowane. Gdy zmienna zawiera tylko jeden obiekt, zmienna przyjmuje typ danych tego obiektu. Gdy zmienna zawiera kolekcję obiektów, zmienna ma typ danych System.Object. W związku z tym można przypisać dowolny typ obiektu do kolekcji. W poniższym przykładzie pokazano, że można dodawać obiekty procesu, obiekty usługi, ciągi i liczby całkowite do zmiennej bez generowania błędu:

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

Ponieważ operator przypisania = ma niższy priorytet niż operator potoku |, nie są wymagane nawiasy do przypisania wyniku z potoku poleceń do zmiennej. Na przykład następujące polecenie sortuje usługi na komputerze, a następnie przypisuje posortowane usługi do zmiennej $a:

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

Możesz również przypisać wartość utworzoną przez instrukcję do zmiennej, jak w poniższym przykładzie:

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

Ten przykład przypisuje zero do zmiennej $a, jeśli wartość $b jest mniejsza niż zero. Przypisuje wartość $b do $a, jeśli wartość $b nie jest mniejsza niż zero.

Aby przypisać tablicę (wiele wartości) do zmiennej, należy oddzielić wartości przecinkami w następujący sposób:

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

Aby przypisać tabelę skrótów do zmiennej, użyj standardowej notacji tabeli skrótów w programie PowerShell. Wpisz znak @, a następnie pary klucz/wartość rozdzielone średnikami ; i zawarte w nawiasach klamrowych { }. Aby na przykład przypisać tabelę skrótu do zmiennej $a, wpisz:

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

Aby przypisać wartości szesnastkowe do zmiennej, poprzedź wartość symbolem 0x. Program PowerShell konwertuje wartość szesnastkową (0x10) na wartość dziesiętną (w tym przypadku 16) i przypisuje tę wartość do zmiennej $a. Aby na przykład przypisać wartość 0x10 do zmiennej $a, wpisz:

$a = 0x10

Aby przypisać wartość wykładniczą do zmiennej, wpisz numer główny, literę ei liczbę reprezentującą wielokrotność 10. Aby na przykład przypisać wartość 3.1415 do potęgi 1000 do zmiennej $a, wpisz:

$a = 3.1415e3

Program PowerShell może również konwertować kilobajty KB, megabajty MBi gigabajty GB na bajty. Aby na przykład przypisać wartość 10 kilobajtów do zmiennej $a, wpisz:

$a = 10kb

Używanie operatorów przypisania złożonego

Operatory przypisania złożonego wykonują operacje liczbowe na wartościach przed przypisaniem.

Ważny

Operatory przypisania złożonego nie używają dynamicznego określania zakresu. Zmienna jest zawsze w bieżącym zakresie.

W poniższym przykładzie zmienna $x jest zdefiniowana w zakresie globalnym. Nawiasy klamrowe tworzą nowy zakres. Zmienna $x wewnątrz nawiasów klamrowych jest nowym wystąpieniem, a nie kopią zmiennej globalnej.

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

Gdy używasz operatora przypisania regularnego, otrzymujesz kopię zmiennej z zakresu nadrzędnego. Należy jednak zauważyć, że $x w zakresie nadrzędnym nie jest zmieniana.

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

Przypisanie za pomocą operatora dodawania

Przypisanie przez operator dodawania += zwiększa wartość zmiennej lub dołącza określoną wartość do istniejącej wartości. Akcja zależy od tego, czy zmienna ma typ liczbowy, czy ciągowy oraz czy zmienna zawiera pojedynczą wartość (skalarną) czy wiele wartości (kolekcja).

Operator += łączy dwie operacje. Najpierw dodaje, a następnie przypisuje. W związku z tym następujące stwierdzenia są równoważne:

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

Gdy zmienna zawiera pojedynczą wartość liczbową, operator += zwiększa istniejącą wartość o kwotę po prawej stronie operatora. Następnie operator przypisuje wynikową wartość do zmiennej. W poniższym przykładzie pokazano, jak za pomocą operatora += zwiększyć wartość zmiennej:

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

Gdy wartość zmiennej jest ciągiem, wartość po prawej stronie operatora jest dołączana do ciągu w następujący sposób:

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

Gdy wartość zmiennej jest tablicą, operator += dołącza wartości po prawej stronie operatora do tablicy. Jeśli tablica nie jest jawnie typowana przez rzutowanie, można dołączyć dowolny typ wartości do tablicy w następujący sposób:

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

i

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

Gdy wartość zmiennej jest tabelą skrótów, operator += dołącza wartość po prawej stronie operatora do tabeli skrótów. Jednak ponieważ jedynym typem, który można dodać do tabeli skrótów, jest znowu tabela skrótów, wszystkie inne przypisania kończą się niepowodzeniem.

Na przykład następujące polecenie przypisuje tabelę skrótów do zmiennej $a. Następnie używa operatora +=, aby dołączyć kolejną tabelę skrótów do istniejącej tabeli skrótów, co skutecznie dodaje nową parę klucz-wartość do istniejącej tabeli skrótów. To polecenie powiedzie się, jak pokazano w danych wyjściowych:

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

Następujące polecenie próbuje dołączyć liczbę całkowitą "1" do tabeli skrótów w zmiennej $a. To polecenie kończy się niepowodzeniem:

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

Operator przypisania przez odejmowanie

Operator przypisania przez odejmowanie -= dekrementuje wartość zmiennej według wartości określonej po prawej stronie operatora. Tego operatora nie można używać ze zmiennymi ciągu i nie można go użyć do usunięcia elementu z kolekcji.

Operator -= łączy dwie operacje. Najpierw odejmuje, a następnie przypisuje. W związku z tym następujące stwierdzenia są równoważne:

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

W poniższym przykładzie pokazano, jak za pomocą operatora -= zmniejszyć wartość zmiennej:

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

Możesz również użyć operatora przypisania -=, aby zmniejszyć wartość elementu członkowskiego tablicy liczbowej. W tym celu określ indeks elementu tablicy, który chcesz zmienić. W poniższym przykładzie wartość trzeciego elementu tablicy (element 2) jest zmniejszana o 1:

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

Nie można użyć operatora -=, aby usunąć wartości zmiennej. Aby usunąć wszystkie wartości przypisane do zmiennej, użyj polecenia cmdlet Clear-Item lub Clear-Variable, aby przypisać wartość $null lub "" do zmiennej.

$a = $null

Aby usunąć określoną wartość z tablicy, użyj notacji tablicy, aby przypisać wartość $null do określonego elementu. Na przykład następująca instrukcja usuwa drugą wartość (położenie indeksu 1) z tablicy:

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

Aby usunąć zmienną, użyj polecenia cmdlet Remove-Variable. Ta metoda jest przydatna, gdy zmienna jest jawnie rzutowana do określonego typu danych, a chcesz mieć zmienną bez typowania. Następujące polecenie usuwa zmienną $a:

Remove-Variable -Name a

Przypisanie operatorem mnożenia

Przypisanie przez operator mnożenia *= mnoży wartość liczbową lub dołącza określoną liczbę kopii wartości ciągu zmiennej.

Gdy zmienna zawiera pojedynczą wartość liczbową, ta wartość jest mnożona przez wartość po prawej stronie operatora. Na przykład w poniższym przykładzie pokazano, jak użyć operatora *=, aby pomnożyć wartość zmiennej:

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

W tym przypadku operator *= łączy dwie operacje. Najpierw mnoży, a następnie przypisuje. W związku z tym następujące stwierdzenia są równoważne:

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

Gdy zmienna zawiera wartość ciągu, program PowerShell dołącza określoną liczbę ciągów do wartości w następujący sposób:

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

Aby pomnożyć element tablicy, użyj indeksu, aby zidentyfikować element, który chcesz pomnożyć. Na przykład następujące polecenie mnoży pierwszy element w tablicy (pozycja indeksu 0) przez 2:

$a[0] *= 2

Przypisanie według operatora dzielenia

Operator dzielenia /= dzieli wartość liczbową przez wartość określoną po prawej stronie operatora. Nie można użyć operatora ze zmiennymi ciągu.

Operator /= łączy dwie operacje. Najpierw dzieli, a następnie przypisuje. W związku z tym następujące dwa stwierdzenia są równoważne.

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

Na przykład następujące polecenie używa operatora /=, aby podzielić wartość zmiennej:

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

Aby podzielić element tablicy, użyj indeksu, aby zidentyfikować element, który chcesz zmienić. Na przykład następujące polecenie dzieli drugi element w tablicy (pozycja indeksu 1) przez 2:

$a[1] /= 2

Przypisanie przez operator modulu

Przypisanie przez operator modulo %= powoduje podział wartości zmiennej przez wartość po prawej stronie operatora. Następnie operator %= przypisuje resztę (znaną jako modulus) do zmiennej. Tego operatora można użyć tylko wtedy, gdy zmienna zawiera pojedynczą wartość liczbową. Nie można użyć tego operatora, gdy zmienna zawiera zmienną ciągu lub tablicę.

Operator %= łączy dwie operacje. Najpierw dzieli i określa resztę, a następnie przypisuje resztę do zmiennej. W związku z tym następujące stwierdzenia są równoważne:

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

W poniższym przykładzie pokazano, jak użyć operatora %=, aby zapisać modulo ilorazu:

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

Operatory inkrementacji i dekrementacji

Operator inkrementacji ++ zwiększa wartość zmiennej o 1. Jeśli używasz operatora inkrementacji w prostej instrukcji, żadna wartość nie jest zwracana. Aby wyświetlić wynik, wyświetl wartość zmiennej w następujący sposób:

$a = 7
++$a
$a
8

Aby wymusić zwrócenie wartości, należy ująć zmienną i operator w nawiasy w następujący sposób:

$a = 7
(++$a)
8

Operator inkrementacji można umieścić przed (prefiks) lub po (postfiks) zmiennej. Wersja prefiksowa operatora zwiększa zmienną przed użyciem jej wartości w instrukcji w następujący sposób:

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

Wersja postinkrementacyjna operatora zwiększa zmienną po użyciu jej wartości w instrukcji. W poniższym przykładzie, zmienne $c i $a mają różne wartości, ponieważ wartość jest przypisywana do $c przed zmianą $a.

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

Operator dekrementacji -- zmniejsza wartość zmiennej o 1. Podobnie jak w przypadku operatora inkrementacji, żadna wartość nie jest zwracana podczas używania operatora w prostej instrukcji. Użyj nawiasów, aby zwrócić wartość w następujący sposób:

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

Wersja operatora w formie prefiksu dekrementuje zmienną przed użyciem jej wartości w instrukcji w następujący sposób:

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

Wersja postfiksowa operatora dekrementuje zmienną po użyciu jej wartości w instrukcji. W poniższym przykładzie, zmienne $d i $a mają różne wartości, ponieważ wartość jest przypisywana do $d przed zmianą $a.

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

Operator przypisania z łączeniem wartości null

Operator przypisania z łączeniem wartości null ??= przypisuje wartość operandu prawego do operandu lewostronnego tylko wtedy, gdy operand lewostronny jest oceniany jako null. Operator ??= nie ocenia operandu po prawej stronie, jeśli operand po lewej stronie zwróci wartość inną niż null.

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

Aby uzyskać więcej informacji, zobacz operator łączenia wartości null.

Typy platformy Microsoft .NET

Domyślnie, gdy zmienna ma tylko jedną wartość, wartość przypisana do zmiennej określa typ danych zmiennej. Na przykład następujące polecenie tworzy zmienną o typie System.Int32:

$a = 6

Aby znaleźć typ zmiennej w platformie .NET, użyj metody GetType i jej właściwości FullName. Pamiętaj, aby uwzględnić nawiasy po nazwie metody GetType, mimo że wywołanie metody nie ma argumentów:

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

Aby utworzyć zmienną zawierającą ciąg, przypisz wartość ciągu do zmiennej. Aby wskazać, że wartość jest ciągiem, należy ująć ją w cudzysłów w następujący sposób:

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

Jeśli pierwszą wartością przypisaną do zmiennej jest ciąg, program PowerShell traktuje wszystkie operacje jako operacje ciągów i rzutuje nowe wartości na ciągi. Dzieje się tak w poniższym przykładzie:

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

Jeśli pierwsza wartość jest liczbą całkowitą, program PowerShell traktuje wszystkie operacje jako operacje całkowite i rzutuje nowe wartości na liczby całkowite. Dzieje się tak w poniższym przykładzie:

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

Możesz nową zmienną skalarną rzutować na dowolny typ platformy .NET, umieszczając nazwę typu w nawiasach, które poprzedzają nazwę zmiennej lub pierwszą przypisywaną wartość. Podczas rzutowania zmiennej definiujesz typ danych, które mogą być przechowywane w zmiennej.

Na przykład następujące polecenie rzutuje zmienną na typ ciągu znaków.

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

Poniższy przykład rzutuje tę pierwszą wartość, zamiast rzutowania zmiennej.

$a = [string]27

Nie można ponownie przekształcić typu danych istniejącej zmiennej, jeśli nie można przekonwertować jej wartości na nowy typ danych.

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

Aby zmienić typ danych, musisz zastąpić jego wartość w następujący sposób:

[int]$a = 3

Ponadto w przypadku poprzedzania nazwy zmiennej typem danych typ tej zmiennej jest zablokowany, chyba że jawnie zastąpisz typ, określając inny typ danych. Jeśli spróbujesz przypisać wartość niezgodną z istniejącym typem i nie zastąpisz jawnie typu, program PowerShell wyświetli błąd, jak pokazano w poniższym przykładzie:

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

W programie PowerShell typy danych zmiennych, które zawierają wiele elementów w tablicy, są obsługiwane inaczej niż typy danych zmiennych zawierających jeden element. Jeśli typ danych nie jest specjalnie przypisany do zmiennej tablicowej, typ danych jest zawsze System.Object []. Ten typ danych jest specyficzny dla tablic.

Czasami można zastąpić domyślny typ, określając inny typ. Na przykład następujące polecenie przekształca zmienną na typ tablicy string []:

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

Zmienne programu PowerShell mogą być dowolnym typem danych platformy .NET. Ponadto można przypisać dowolny w pełni kwalifikowany typ danych platformy .NET, który jest dostępny w bieżącym procesie. Na przykład następujące polecenie określa System.DateTime typ danych:

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

Wartość zgodna z typem danych System.DateTime zostanie przypisana do zmiennej. Wartość zmiennej $a będzie następująca:

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

Przypisywanie wielu zmiennych

W programie PowerShell można przypisywać wartości do wielu zmiennych przy użyciu jednego polecenia. Pierwszy element wartości przypisania jest przypisywany do pierwszej zmiennej, drugi element jest przypisywany do drugiej zmiennej, trzeciego elementu do trzeciej zmiennej. Jest to nazywane wielokrotnym przypisaniem.

Na przykład następujące polecenie przypisuje wartość 1 do zmiennej $a, wartość 2 do zmiennej $b i wartość 3 do zmiennej $c:

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

Jeśli wartość przypisania zawiera więcej elementów niż zmienne, wszystkie pozostałe wartości są przypisane do ostatniej zmiennej. Na przykład następujące polecenie zawiera trzy zmienne i pięć wartości:

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

W związku z tym program PowerShell przypisuje wartość 1 do zmiennej $a i wartość 2 do zmiennej $b. Przypisuje wartości 3, 4 i 5 do zmiennej $c. Aby przypisać wartości w zmiennej $c do trzech innych zmiennych, użyj następującego formatu:

$d, $e, $f = $c

To polecenie przypisuje wartość 3 do zmiennej $d, wartość 4 do zmiennej $e i wartość 5 do zmiennej $f.

Jeśli wartość przypisania zawiera mniej elementów niż zmienne, pozostałe zmienne są przypisane do wartości $null. Na przykład następujące polecenie zawiera trzy zmienne i dwie wartości:

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

W związku z tym program PowerShell przypisuje wartość 1 do zmiennej $a i wartość 2 do zmiennej $b. Zmienna $c jest $null.

Można również przypisać jedną wartość do wielu zmiennych, łącząc zmienne. Na przykład następujące polecenie przypisuje wartość "trzy" do wszystkich czterech zmiennych:

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

Oprócz używania operacji przypisania w celu ustawienia wartości zmiennej można również użyć polecenia cmdlet Set-Variable. Na przykład następujące polecenie używa Set-Variable do przypisania tablicy 1, 2, 3 do zmiennej $a.

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

Zobacz też