Operatory — informacjeAbout Operators

Krótki opisShort description

Opisuje operatory obsługiwane przez program PowerShell.Describes the operators that are supported by PowerShell.

Długi opisLong description

Operator jest elementem języka, którego można użyć w poleceniu lub wyrażeniu.An operator is a language element that you can use in a command or expression. Program PowerShell obsługuje kilka typów operatorów, które ułatwiają manipulowanie wartościami.PowerShell supports several types of operators to help you manipulate values.

Operatory arytmetyczneArithmetic Operators

Operatory arytmetyczne (,,,) służą + - * / % do obliczania wartości w poleceniu lub wyrażeniu.Use arithmetic operators (+, -, *, /, %) to calculate values in a command or expression. Za pomocą tych operatorów można dodawać, odejmować, mnożyć lub dzielić wartości oraz obliczać resztę (moduł) operacji dzielenia.With these operators, you can add, subtract, multiply, or divide values, and calculate the remainder (modulus) of a division operation.

Operator dodawania łączy elementy.The addition operator concatenates elements. Operator mnożenia Zwraca określoną liczbę kopii każdego elementu.The multiplication operator returns the specified number of copies of each element. Operatorów arytmetycznych można użyć dla dowolnego typu .NET, który implementuje te, na przykład:,,, Int String DateTime Hashtable i tablic.You can use arithmetic operators on any .NET type that implements them, such as: Int, String, DateTime, Hashtable, and Arrays.

Operatory bitowe (,,,, -band -bor -bxor -bnot -shl -shr ) manipulują wzorcami bitowymi w wartości.Bitwise operators (-band, -bor, -bxor, -bnot, -shl, -shr) manipulate the bit patterns in values.

Aby uzyskać więcej informacji, zobacz about_Arithmetic_Operators.For more information, see about_Arithmetic_Operators.

Operatory przypisaniaAssignment Operators

Operatory przypisania (,,,,) służą = += -= *= /= %= do przypisywania, zmieniania lub dołączania wartości do zmiennych.Use assignment operators (=, +=, -=, *=, /=, %=) to assign, change, or append values to variables. Operatory arytmetyczne z przypisaniem umożliwiają przypisanie wyniku operacji arytmetycznej do zmiennej.You can combine arithmetic operators with assignment to assign the result of the arithmetic operation to a variable.

Aby uzyskać więcej informacji, zobacz about_Assignment_Operators.For more information, see about_Assignment_Operators.

Operatory porównaniaComparison Operators

Operatory porównania (,,,,) służą -eq -ne -gt -lt -le -ge do porównywania wartości i warunków testowania.Use comparison operators (-eq, -ne, -gt, -lt, -le, -ge) to compare values and test conditions. Na przykład można porównać dwie wartości ciągu, aby określić, czy są równe.For example, you can compare two string values to determine whether they are equal.

Operatory porównania zawierają również operatory, które znajdują lub zastępują wzorce w tekście.The comparison operators also include operators that find or replace patterns in text. Operatory ( -match , -notmatch , -replace ) używają wyrażeń regularnych i ( -like , -notlike ) używają symboli wieloznacznych * .The (-match, -notmatch, -replace) operators use regular expressions, and (-like, -notlike) use wildcards *.

Operatory porównania zawierania określają, czy wartość testowa pojawia się w zestawie odwołań ( -in , -notin , -contains , -notcontains ).Containment comparison operators determine whether a test value appears in a reference set (-in, -notin, -contains, -notcontains).

Operatory porównywania typów ( -is , -isnot ) określają, czy obiekt ma dany typ.Type comparison operators (-is, -isnot) determine whether an object is of a given type.

Aby uzyskać więcej informacji, zobacz about_Comparison_Operators.For more information, see about_Comparison_Operators.

Operatory logiczneLogical Operators

Użyj operatorów logicznych ( -and ,,, -or -xor -not ! ), aby połączyć instrukcje warunkowe w pojedynczą złożoną instrukcję.Use logical operators (-and, -or, -xor, -not, !) to connect conditional statements into a single complex conditional. Można na przykład użyć operatora logicznego, -and Aby utworzyć filtr obiektów z dwoma różnymi warunkami.For example, you can use a logical -and operator to create an object filter with two different conditions.

Aby uzyskać więcej informacji, zobacz about_Logical_Operators.For more information, see about_Logical_Operators.

Operatory przekierowaniaRedirection Operators

Użycie operatorów przekierowania ( > , >> ,, 2> 2>> i 2>&1 ) do wysyłania danych wyjściowych polecenia lub wyrażenia do pliku tekstowego.Use redirection operators (>, >>, 2>, 2>>, and 2>&1) to send the output of a command or expression to a text file. Operatory przekierowania działają jak Out-File polecenie cmdlet (bez parametrów), ale pozwalają również przekierować dane wyjściowe z błędami do określonych plików.The redirection operators work like the Out-File cmdlet (without parameters) but they also let you redirect error output to specified files. Możesz również użyć Tee-Object polecenia cmdlet, aby przekierować dane wyjściowe.You can also use the Tee-Object cmdlet to redirect output.

Aby uzyskać więcej informacji, zobacz about_RedirectionFor more information, see about_Redirection

Operatory Split i JoinSplit and Join Operators

-splitOperatory i -join dzielą i łączą podciągi.The -split and -join operators divide and combine substrings. -splitOperator dzieli ciąg na podciągi.The -split operator splits a string into substrings. -joinOperator łączy wiele ciągów w jeden ciąg.The -join operator concatenates multiple strings into a single string.

Aby uzyskać więcej informacji, zobacz about_Split i about_Join.For more information, see about_Split and about_Join.

Operatory typówType Operators

Użyj operatorów typu ( -is , -isnot ,), -as Aby znaleźć lub zmienić typ .NET Framework obiektu.Use the type operators (-is, -isnot, -as) to find or change the .NET Framework type of an object.

Aby uzyskać więcej informacji, zobacz about_Type_Operators.For more information, see about_Type_Operators.

Operatory jednoargumentoweUnary Operators

Operatory jednoargumentowe służą do zwiększania lub zmniejszania wartości zmiennych lub właściwości obiektów oraz do ustawiania wartości dodatnich lub ujemnych.Use unary operators to increment or decrement variables or object properties and to set integers to positive or negative numbers. Na przykład, aby zwiększyć zmienną $a z 9 do 10 , należy wpisać $a++ .For example, to increment the variable $a from 9 to 10, you type $a++.

Operatory specjalneSpecial Operators

Specjalne operatory mają określone przypadki użycia, które nie mieszczą się w żadnej innej grupie operator.Special operators have specific use-cases that do not fit into any other operator group. Na przykład specjalne Operatory umożliwiają uruchamianie poleceń, zmienianie typu danych wartości lub pobieranie elementów z tablicy.For example, special operators allow you to run commands, change a value's data type, or retrieve elements from an array.

Operator grupowania ( )Grouping operator ( )

Podobnie jak w innych językach, program (...) służy do przesłonięcia pierwszeństwa operatorów w wyrażeniach.As in other languages, (...) serves to override operator precedence in expressions. Na przykład: (1 + 2) / 3For example: (1 + 2) / 3

Jednak w programie PowerShell są dostępne dodatkowe zachowania.However, in PowerShell, there are additional behaviors.

  • (...) umożliwia poinformowanie danych wyjściowych polecenia w wyrażeniu.(...) allows you to let output from a command participate in an expression. Na przykład:For example:

    PS> (Get-Item *.txt).Count -gt 10
    True
    
  • Gdy jest używany jako pierwszy segment potoku, zawijają polecenie lub wyrażenie w nawiasach niezmiennie powoduje Wyliczenie wyniku wyrażenia.When used as the first segment of a pipeline, wrapping a command or expression in parentheses invariably causes enumeration of the expression result. Jeśli nawiasy zawijają polecenie, zostanie uruchomione w celu zakończenia z wszystkimi danymi wyjściowymi zebranymi w pamięci , zanim wyniki zostaną wysłane za pomocą potoku.If the parentheses wrap a command, it is run to completion with all output collected in memory before the results are sent through the pipeline.

Operator subexpression $( )Subexpression operator $( )

Zwraca wynik jednej lub kilku instrukcji.Returns the result of one or more statements. W przypadku pojedynczego wyniku zwraca wartość skalarną.For a single result, returns a scalar. Dla wielu wyników zwraca tablicę.For multiple results, returns an array. Użyj tego, jeśli chcesz użyć wyrażenia w innym wyrażeniu.Use this when you want to use an expression within another expression. Na przykład, aby osadzić wyniki polecenia w wyrażeniu ciągu.For example, to embed the results of command in a string expression.

PS> "Today is $(Get-Date)"
Today is 12/02/2019 13:15:20

PS> "Folder list: $((dir c:\ -dir).Name -join ', ')"
Folder list: Program Files, Program Files (x86), Users, Windows

Operator podwyrażenia tablicy @( )Array subexpression operator @( )

Zwraca wynik jednej lub kilku instrukcji jako tablicę.Returns the result of one or more statements as an array. Jeśli istnieje tylko jeden element, tablica ma tylko jedną składową.If there is only one item, the array has only one member.

@(Get-CimInstance win32_logicalDisk)

Składnia literału tabeli skrótów @{}Hash table literal syntax @{}

Podobnie jak w przypadku podwyrażenia tablicy, ta składnia jest używana do deklarowania tabeli skrótów.Similar to the array subexpression, this syntax is used to declare a hash table. Aby uzyskać więcej informacji, zobacz about_Hash_Tables.For more information, see about_Hash_Tables.

Call — operator &Call operator &

Uruchamia polecenie, skrypt lub blok skryptu.Runs a command, script, or script block. Operator wywołania, nazywany także "operatorem wywołania", umożliwia uruchamianie poleceń, które są przechowywane w zmiennych i reprezentowane przez ciągi lub bloki skryptów.The call operator, also known as the "invocation operator", lets you run commands that are stored in variables and represented by strings or script blocks. Operator wywołania jest wykonywany w zakresie podrzędnym.The call operator executes in a child scope. Aby uzyskać więcej informacji na temat zakresów, zobacz about_Scopes.For more about scopes, see about_Scopes.

Ten przykład zapisuje polecenie w ciągu i wykonuje go przy użyciu operatora call.This example stores a command in a string and executes it using the call operator.

PS> $c = "get-executionpolicy"
PS> $c
get-executionpolicy
PS> & $c
AllSigned

Operator wywołania nie analizuje ciągów.The call operator does not parse strings. Oznacza to, że nie można używać parametrów polecenia w ciągu podczas używania operatora call.This means that you cannot use command parameters within a string when you use the call operator.

PS> $c = "Get-Service -Name Spooler"
PS> $c
Get-Service -Name Spooler
PS> & $c
& : The term 'Get-Service -Name Spooler' is not recognized as the name of a
cmdlet, function, script file, or operable program. Check the spelling of
the name, or if a path was included, verify that the path is correct and
try again.

Polecenie cmdlet Invoke-Expression może wykonać kod, który powoduje błędy analizy podczas używania operatora call.The Invoke-Expression cmdlet can execute code that causes parsing errors when using the call operator.

PS> & "1+1"
& : The term '1+1' is not recognized as the name of a cmdlet, function, script
file, or operable program. Check the spelling of the name, or if a path was
included, verify that the path is correct and try again.
At line:1 char:2
+ & "1+1"
+  ~~~~~
    + CategoryInfo          : ObjectNotFound: (1+1:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
PS> Invoke-Expression "1+1"
2

Operatora call można używać do wykonywania skryptów przy użyciu ich nazw plików.You can use the call operator to execute scripts using their filenames. W poniższym przykładzie przedstawiono plik skryptu zawierający spacje.The example below shows a script filename that contains spaces. Podczas próby wykonania skryptu program PowerShell wyświetla zawartość ciągu ujętego w cudzysłów zawierający nazwę pliku.When you try to execute the script, PowerShell instead displays the contents of the quoted string containing the filename. Operator Call umożliwia wykonywanie zawartości ciągu zawierającego nazwę pliku.The call operator allows you to execute the contents of the string containing the filename.

PS C:\Scripts> Get-ChildItem

    Directory: C:\Scripts


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        8/28/2018   1:36 PM             58 script name with spaces.ps1

PS C:\Scripts> ".\script name with spaces.ps1"
.\script name with spaces.ps1
PS C:\Scripts> & ".\script name with spaces.ps1"
Hello World!

Aby uzyskać więcej informacji na temat bloków skryptów, zobacz about_Script_Blocks.For more about script blocks, see about_Script_Blocks.

Operator tła &Background operator &

Uruchamia potok przed nim w tle w ramach zadania programu PowerShell.Runs the pipeline before it in the background, in a PowerShell job. Ten operator działa podobnie do operatora kontroli systemu UNIX ( & ), który uruchamia polecenie przed asynchronicznym użyciem podpowłoki jako zadania.This operator acts similarly to the UNIX control operator ampersand (&), which runs the command before it asynchronously in subshell as a job.

Ten operator jest funkcjonalnie równoważny z Start-Job .This operator is functionally equivalent to Start-Job. Domyślnie operator w tle uruchamia zadania w bieżącym katalogu roboczym obiektu wywołującego, który uruchomił zadania równoległe.By default, the background operator starts the jobs in the current working directory of the caller that started the parallel tasks. Poniższy przykład demonstruje podstawowe użycie operatora zadania w tle.The following example demonstrates basic usage of the background job operator.

Get-Process -Name pwsh &

To polecenie jest funkcjonalnie równoważne z następującym użyciem Start-Job :That command is functionally equivalent to the following usage of Start-Job:

Start-Job -ScriptBlock {Get-Process -Name pwsh}

Podobnie jak Start-Job , & operator w tle zwraca Job obiekt.Just like Start-Job, the & background operator returns a Job object. Ten obiekt może być używany z Receive-Job i Remove-Job , tak jak gdyby był używany Start-Job do uruchomienia zadania.This object can be used with Receive-Job and Remove-Job, just as if you had used Start-Job to start the job.

$job = Get-Process -Name pwsh &
Receive-Job $job -Wait

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
      0     0.00     221.16      25.90    6988 988 pwsh
      0     0.00     140.12      29.87   14845 845 pwsh
      0     0.00      85.51       0.91   19639 988 pwsh

Remove-Job $job

&Operator tła jest również terminatorem instrukcji, podobnie jak operator kontroli systemu UNIX ( & ).The & background operator is also a statement terminator, just like the UNIX control operator ampersand (&). Umożliwia to wywoływanie dodatkowych poleceń po & operatorze tła.This allows you to invoke additional commands after the & background operator. Poniższy przykład ilustruje wywoływanie dodatkowych poleceń po & operatorze tła.The following example demonstrates the invocation of additional commands after the & background operator.

$job = Get-Process -Name pwsh & Receive-Job $job -Wait

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
      0     0.00     221.16      25.90    6988 988 pwsh
      0     0.00     140.12      29.87   14845 845 pwsh
      0     0.00      85.51       0.91   19639 988 pwsh

Jest to odpowiednik następującego skryptu:This is equivalent to the following script:

$job = Start-Job -ScriptBlock {Get-Process -Name pwsh}
Receive-Job $job -Wait

Jeśli chcesz uruchomić wiele poleceń, każdy w swoim własnym procesie w tle, ale wszystko w jednym wierszu, po prostu umieść & między i po każdym z poleceń.If you want to run multiple commands, each in their own background process but all on one line, simply place & between and after each of the commands.

Get-Process -Name pwsh & Get-Service -Name BITS & Get-CimInstance -ClassName Win32_ComputerSystem &

Aby uzyskać więcej informacji na temat zadań programu PowerShell, zobacz about_Jobs.For more information on PowerShell jobs, see about_Jobs.

Operator rzutowania [ ]Cast operator [ ]

Konwertuje lub ogranicza obiekty do określonego typu.Converts or limits objects to the specified type. Jeśli obiekty nie mogą być konwertowane, program PowerShell generuje błąd.If the objects cannot be converted, PowerShell generates an error.

[DateTime]"2/20/88" - [DateTime]"1/20/88"
[Int] (7/2)
[String] 1 + 0
[Int] '1' + 0

Rzutowanie można także wykonać, gdy zmienna jest przypisana do przy użyciu notacji rzutowania.A cast can also be performed when a variable is assigned to using cast notation.

Operator przecinka ,Comma operator ,

Jako operator binarny, przecinek tworzy tablicę lub dołącza do tworzonej tablicy.As a binary operator, the comma creates an array or appends to the array being created. W trybie wyrażenia, jako jednoargumentowy operator, przecinek tworzy tablicę z tylko jednym elementem członkowskim.In expression mode, as a unary operator, the comma creates an array with just one member. Umieść przecinek przed elementem członkowskim.Place the comma before the member.

$myArray = 1,2,3
$SingleArray = ,1
Write-Output (,1)

Ponieważ Write-Object oczekuje argumentu, należy umieścić wyrażenie w nawiasach.Since Write-Object expects an argument, you must put the expression in parentheses.

Operator pozyskania kropki .Dot sourcing operator .

Uruchamia skrypt w bieżącym zakresie, dzięki czemu wszystkie funkcje, aliasy i zmienne tworzone przez skrypt są dodawane do bieżącego zakresu, zastępując istniejące.Runs a script in the current scope so that any functions, aliases, and variables that the script creates are added to the current scope, overriding existing ones. Parametry zadeklarowane przez skrypt stają się zmiennymi.Parameters declared by the script become variables. Parametry, dla których nie podano wartości, staną się zmiennymi bez żadnej wartości.Parameters for which no value has been given become variables with no value. Jednak zmienna automatyczna $args jest zachowywana.However, the automatic variable $args is preserved.

. c:\scripts\sample.ps1 1 2 -Also:3

Uwaga

Po następują spacja operator pozyskania kropki.The dot sourcing operator is followed by a space. Użyj miejsca, aby odróżnić kropkę od symbolu kropki ( . ), który reprezentuje bieżący katalog.Use the space to distinguish the dot from the dot (.) symbol that represents the current directory.

W poniższym przykładzie skrypt Sample.ps1 w bieżącym katalogu jest uruchamiany w bieżącym zakresie.In the following example, the Sample.ps1 script in the current directory is run in the current scope.

. .\sample.ps1

Operator formatowania -fFormat operator -f

Formatuje ciągi przy użyciu metody format obiektów String.Formats strings by using the format method of string objects. Wprowadź ciąg formatu po lewej stronie operatora i obiekty, które mają być sformatowane po prawej stronie operatora.Enter the format string on the left side of the operator and the objects to be formatted on the right side of the operator.

"{0} {1,-10} {2:N}" -f 1,"hello",[math]::pi
1 hello      3.14

Jeśli musisz zachować nawiasy klamrowe ( {} ) w ciągu sformatowanym, możesz je wypróbować przez Podwajanie nawiasów klamrowych.If you need to keep the curly braces ({}) in the formatted string, you can escape them by doubling the curly braces.

"{0} vs. {{0}}" -f 'foo'
foo vs. {0}

Aby uzyskać więcej informacji, zobacz Metoda String. format i formatowanie złożone.For more information, see the String.Format method and Composite Formatting.

Operator indeksu [ ]Index operator [ ]

Wybiera obiekty z indeksowanych kolekcji, takich jak tablice i tabele skrótów.Selects objects from indexed collections, such as arrays and hash tables. Indeksy tablicy są oparte na zero, więc pierwszy obiekt jest indeksowany jako [0] .Array indexes are zero-based, so the first object is indexed as [0]. W przypadku tablic (tylko) można również użyć indeksów ujemnych do pobrania ostatnich wartości.For arrays (only), you can also use negative indexes to get the last values. Tabele skrótów są indeksowane przez wartość klucza.Hash tables are indexed by key value.

PS> $a = 1, 2, 3
PS> $a[0]
1
PS> $a[-1]
3
(Get-HotFix | Sort-Object installedOn)[-1]
$h = @{key="value"; name="PowerShell"; version="2.0"}
$h["name"]
PowerShell
$x = [xml]"<doc><intro>Once upon a time...</intro></doc>"
$x["doc"]
intro
-----
Once upon a time...

Operator potoku |Pipeline operator |

Wysyła ("potoki") dane wyjściowe polecenia poprzedzającego je do polecenia, które następuje po nim.Sends ("pipes") the output of the command that precedes it to the command that follows it. Gdy dane wyjściowe zawierają więcej niż jeden obiekt ("Kolekcja"), operator potoku wysyła obiekty pojedynczo.When the output includes more than one object (a "collection"), the pipeline operator sends the objects one at a time.

Get-Process | Get-Member
Get-Service | Where-Object {$_.StartType -eq 'Automatic'}

Operatory łańcucha potoku && i ||Pipeline chain operators && and ||

Warunkowo wykonuj potoku po prawej stronie na podstawie sukcesu potoku po lewej stronie.Conditionally execute the right-hand side pipeline based on the success of the left-hand side pipeline.

# If Get-Process successfully finds a process called notepad,
# Stop-Process -Name notepad is called
Get-Process notepad && Stop-Process -Name notepad
# If npm install fails, the node_modules directory is removed
npm install || Remove-Item -Recurse ./node_modules

Aby uzyskać więcej informacji, zobacz About_Pipeline_Chain_Operators.For more information, see About_Pipeline_Chain_Operators.

Operator zakresu ..Range operator ..

Reprezentuje sekwencyjne liczby całkowite w tablicy liczb całkowitych, uwzględniając górną i dolną granicę.Represents the sequential integers in an integer array, given an upper, and lower boundary.

1..10
foreach ($a in 1..$max) {Write-Host $a}

Możesz również tworzyć zakresy w odwrotnej kolejności.You can also create ranges in reverse order.

10..1
5..-5 | ForEach-Object {Write-Output $_}

Począwszy od programu PowerShell 6, operator zakresu działa z znakami , a także liczbami całkowitymi.Beginning in PowerShell 6, the range operator works with Characters as well as Integers.

Aby utworzyć zakres znaków, ujmij znaki graniczne w cudzysłowy.To create a range of characters, enclose the boundary characters in quotes.

PS> 'a'..'f'
a
b
c
d
e
f
PS> 'F'..'A'
F
E
D
C
B
A

Operator dostępu do elementów członkowskich .Member access operator .

Uzyskuje dostęp do właściwości i metod obiektu.Accesses the properties and methods of an object. Nazwa elementu członkowskiego może być wyrażeniem.The member name may be an expression.

$myProcess.peakWorkingSet
(Get-Process PowerShell).kill()
'OS', 'Platform' | Foreach-Object { $PSVersionTable. $_ }

Statyczny operator członkowski ::Static member operator ::

Wywołuje statyczne właściwości i metody klasy .NET Framework.Calls the static properties and methods of a .NET Framework class. Aby znaleźć właściwości statyczne i metody obiektu, użyj statycznego parametru Get-Member polecenia cmdlet.To find the static properties and methods of an object, use the Static parameter of the Get-Member cmdlet. Nazwa elementu członkowskiego może być wyrażeniem.The member name may be an expression.

[datetime]::Now
'MinValue', 'MaxValue' | Foreach-Object { [int]:: $_ }

Trzyelementowy — operator ? <if-true> : <if-false>Ternary operator ? <if-true> : <if-false>

Można użyć operatora Trzyelementowy jako zamiennika if-else instrukcji w prostych sytuacjach warunkowych.You can use the ternary operator as a replacement for the if-else statement in simple conditional cases.

Aby uzyskać więcej informacji, zobacz about_If.For more information, see about_If.

Operator łączenia wartości null ??Null-coalescing operator ??

Operator łączenia wartości null ?? zwraca wartość operandu po lewej stronie, jeśli nie ma wartości null.The null-coalescing operator ?? returns the value of its left-hand operand if it isn't null. W przeciwnym razie oblicza argument operacji po prawej stronie i zwraca jego wynik.Otherwise, it evaluates the right-hand operand and returns its result. ??Operator nie oblicza swojego operandu po prawej stronie, jeśli argument operacji po lewej stronie ma wartość różną od null.The ?? operator doesn't evaluate its right-hand operand if the left-hand operand evaluates to non-null.

$x = $null
$x ?? 100
100

W poniższym przykładzie operand z prawej strony nie zostanie oceniony.In the following example, the right-hand operand won't be evaluated.

[string] $todaysDate = '1/10/2020'
$todaysDate ?? (Get-Date).ToShortDateString()
1/10/2020

Operator przypisania łączenia wartości null ??=Null-coalescing assignment operator ??=

Operator przypisania łączenia wartości null ??= przypisuje wartość jego operandu po lewej stronie tylko wtedy, gdy operand z lewej strony ma wartość null.The null-coalescing assignment operator ??= assigns the value of its right-hand operand to its left-hand operand only if the left-hand operand evaluates to null. ??=Operator nie oblicza swojego operandu po prawej stronie, jeśli argument operacji po lewej stronie ma wartość różną od null.The ??= operator doesn't evaluate its right-hand operand if the left-hand operand evaluates to non-null.

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

W poniższym przykładzie operand z prawej strony nie zostanie oceniony.In the following example, the right-hand operand won't be evaluated.

[string] $todaysDate = '1/10/2020'
$todaysDate ??= (Get-Date).ToShortDateString()
1/10/2020

Operatory warunkowe o wartości null ?. i ?[]Null-conditional operators ?. and ?[]

Uwaga

Ta funkcja została przeniesiona z eksperymentalnych do popularnych w programie PowerShell 7,1.This feature was moved from experimental to mainstream in PowerShell 7.1.

Operator warunkowy o wartości null stosuje dostęp do elementu członkowskiego, ?. lub dostęp ?[] do elementów, operacji do jego operandu tylko wtedy, gdy ten operand ma wartość inną niż null; w przeciwnym razie zwraca wartość null.A null-conditional operator applies a member access, ?., or element access, ?[], operation to its operand only if that operand evaluates to non-null; otherwise, it returns null.

Ponieważ program PowerShell zezwala ? na część nazwy zmiennej, do używania tych operatorów jest wymagana formalna Specyfikacja nazwy zmiennej.Since PowerShell allows ? to be part of the variable name, formal specification of the variable name is required for using these operators. Dlatego wymagane jest użycie {} wokół nazw zmiennych, takich jak ${a} lub, gdy ? jest częścią nazwy zmiennej ${a?} .So it is required to use {} around the variable names like ${a} or when ? is part of the variable name ${a?}.

W poniższym przykładzie zwracana jest wartość propName .In the following example, the value of PropName is returned.

$a = @{ PropName = 100 }
${a}?.PropName
100

Poniższy przykład zwróci wartość null, bez próby uzyskania dostępu do nazwy elementu członkowskiego propName.The following example will return null, without trying to access the member name PropName.

$a = $null
${a}?.PropName

Podobnie zostanie zwrócona wartość elementu.Similarly, the value of the element will be returned.

$a = 1..10
${a}?[0]
1

A gdy operand ma wartość null, element nie jest dostępny i zwracana jest wartość null.And when the operand is null, the element isn't accessed and null is returned.

$a = $null
${a}?[0]

Uwaga

Ponieważ program PowerShell zezwala ? na część nazwy zmiennej, do używania tych operatorów jest wymagana formalna Specyfikacja nazwy zmiennej.Since PowerShell allows ? to be part of the variable name, formal specification of the variable name is required for using these operators. Dlatego wymagane jest użycie {} wokół nazw zmiennych, takich jak ${a} lub, gdy ? jest częścią nazwy zmiennej ${a?} .So it is required to use {} around the variable names like ${a} or when ? is part of the variable name ${a?}.

Składnia nazwy zmiennej ${<name>} nie powinna być pomylona z $() operatorem podwyrażenia.The variable name syntax of ${<name>} should not be confused with the $() subexpression operator. Aby uzyskać więcej informacji, zobacz sekcję nazwa zmiennej w about_Variables.For more information, see Variable name section of about_Variables.

Zobacz teżSee also

about_Arithmetic_Operatorsabout_Arithmetic_Operators

about_Assignment_Operatorsabout_Assignment_Operators

about_Comparison_Operatorsabout_Comparison_Operators

about_Logical_Operatorsabout_Logical_Operators

about_Operator_Precedenceabout_Operator_Precedence

about_Type_Operatorsabout_Type_Operators

about_Pipeline_Chain_Operatorsabout_Pipeline_Chain_Operators

about_Splitabout_Split

about_Joinabout_Join

about_Redirectionabout_Redirection