about_Assignment_Operators

Краткое описание

Описывает, как использовать операторы для назначения значений переменным.

Подробное описание

Операторы назначения назначают одно или несколько значений переменной. Знак равенства (=) — это оператор назначения PowerShell. PowerShell также имеет следующие составные операторы присваивания: +=, -=, *=, %=, ++. --??= Операторы составного назначения выполняют операции со значениями перед назначением.

Синтаксис

Синтаксис операторов назначения выглядит следующим образом:

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

Присваиваемые выражения включают переменные и свойства. Это значение может быть одним значением, массивом значений или командой, выражением или оператором.

Операторы добавок и уменьшения являются унарными операторами. Каждая из них имеет префикс и версии postfix.

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

Значение присваиваемого выражения должно быть числом или должно быть преобразовано в число.

Использование оператора назначения

Переменные называются пространствами памяти, которые хранят значения. Значения хранятся в переменных с помощью оператора =присваивания. Новое значение может заменить существующее значение переменной или добавить новое значение к существующему значению. Например, следующая инструкция назначает значение PowerShell переменной $MyShell :

$MyShell = "PowerShell"

При назначении значения переменной в PowerShell создается переменная, если она еще не существует. Например, первая из следующих двух инструкций присваивания создает $a переменную и назначает значение 6 $a. Вторая инструкция присваивания присваивает значение 12 $a. Первая инструкция создает новую переменную. Вторая инструкция изменяет только его значение:

$a = 6
$a = 12

Переменные в PowerShell не имеют определенного типа данных, если они не приведены. Если переменная содержит только один объект, переменная принимает тип данных этого объекта. Если переменная содержит коллекцию объектов, переменная имеет тип данных System.Object . Таким образом, можно назначить любой тип объекта коллекции. В следующем примере показано, что можно добавлять объекты обработки, объекты службы, строки и целые числа в переменную, не создавая ошибку:

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

Так как оператор назначения имеет более низкий приоритет, чем оператор =|конвейера, круглые скобки не требуются для назначения результата конвейера команд переменной. Например, следующая команда сортирует службы на компьютере и назначает отсортированные службы переменной $a :

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

Можно также назначить значение, созданное оператором переменной, как показано в следующем примере:

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

В этом примере переменная присваивается нулю $a , если значение $b меньше нуля. Он назначает значение $b$a , указывающее, если значение $b не меньше нуля.

Чтобы назначить массив (несколько значений) переменной, разделите значения запятыми следующим образом:

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

Чтобы назначить хэш-таблицу переменной, используйте стандартную нотацию хэш-таблицы в PowerShell. Введите знак @ , за которым следует пара "ключ-значение", разделенные точкой с запятой ; и заключенные в фигурные скобки { }. Например, чтобы назначить хэш-файл переменной $a , введите:

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

Чтобы назначить шестнадцатеричные значения переменной, предшествуйте значению 0x. PowerShell преобразует шестнадцатеричное значение (0x10) в десятичное значение (в данном случае 16) и назначает это значение переменной $a . Например, чтобы назначить значение 0x10 переменной $a , введите:

$a = 0x10

Чтобы назначить экспоненциальное значение переменной, введите корневое число, букву eи число, представляющее несколько 10. Например, чтобы назначить значение 3.1415 1000 переменной $a , введите:

$a = 3.1415e3

PowerShell также может преобразовать килобайты KB, мегабайты MBи гигабайты GB в байты. Например, чтобы назначить переменной значение размером 10 килобайт $a , введите:

$a = 10kb

Использование операторов составных назначений

Операторы составного назначения выполняют числовые операции со значениями перед назначением.

Внимание

Операторы составных назначений не используют динамическую области. Переменная всегда находится в текущем область.

В следующем примере переменная $x определена в глобальном область. Фигурные скобки создают новую область. Переменная $x внутри фигурных скобок — это новый экземпляр, а не копия глобальной переменной.

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

При использовании оператора регулярного назначения вы получите копию переменной из родительской область. Но обратите внимание, что $x в родительском область не изменяется.

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

Назначение по оператору сложения

Назначение по оператору += добавления увеличивает значение переменной или добавляет указанное значение к существующему значению. Действие зависит от того, имеет ли переменная числовый или строковый тип и содержит ли переменная одно значение (скалярная) или несколько значений (коллекция).

Оператор += объединяет две операции. Сначала добавляется, а затем назначается. Поэтому следующие операторы эквивалентны:

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

Если переменная содержит одно числовое значение, += оператор увеличивает существующее значение по сумме справа от оператора. Затем оператор назначает результирующее значение переменной. В следующем примере показано, как использовать += оператор для увеличения значения переменной:

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

Если значение переменной является строкой, значение справа от оператора добавляется к строке следующим образом:

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

Если значение переменной является массивом, += оператор добавляет значения справа от оператора в массив. Если массив явно не типируется путем приведения, можно добавить в массив любой тип значения, как показано ниже.

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

и

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

Если значение переменной является хэш-таблицей, += оператор добавляет значение справа от оператора в хэш-таблицу. Однако, поскольку единственный тип, который можно добавить в хэш-таблицу, является другой хэш-таблицей, все остальные назначения завершаются ошибкой.

Например, следующая команда назначает хэш-таблицу переменной $a . Затем оператор используется += для добавления другой хэш-таблицы в существующую хэш-таблицу, эффективно добавляя новую пару "ключ-значение" в существующую хэш-таблицу. Эта команда завершается успешно, как показано в выходных данных:

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

Следующая команда пытается добавить целое число "1" в хэш-таблицу в переменной $a . Эта команда завершается ошибкой:

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

Назначение по оператору вычитания

Назначение по оператору -= вычитания уменьшает значение переменной по значению, указанному справа от оператора. Этот оператор нельзя использовать с строковыми переменными, и его нельзя использовать для удаления элемента из коллекции.

Оператор -= объединяет две операции. Сначала вычитается, а затем назначается. Поэтому следующие операторы эквивалентны:

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

В следующем примере показано, как использовать оператор для уменьшения -= значения переменной:

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

Оператор присваивания можно также использовать -= для уменьшения значения элемента числового массива. Для этого укажите индекс элемента массива, который требуется изменить. В следующем примере значение третьего элемента массива (элемент 2) уменьшается на 1:

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

Оператор нельзя использовать -= для удаления значений переменной. Чтобы удалить все значения, назначенные переменной, используйте командлеты Clear-Item или Clear-Variable для назначения значения $null или "" переменной.

$a = $null

Чтобы удалить определенное значение из массива, используйте нотацию массива, чтобы назначить значение определенному $null элементу. Например, следующая инструкция удаляет второе значение (положение индекса 1) из массива:

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

Чтобы удалить переменную, используйте командлет Remove-Variable . Этот метод полезен, если переменная явно приведение к конкретному типу данных и требуется нетипичная переменная. Следующая команда удаляет $a переменную:

Remove-Variable -Name a

Назначение по оператору умножения

Назначение оператором умножения умножает *= числовое значение или добавляет указанное число копий строкового значения переменной.

Если переменная содержит одно числовое значение, это значение умножается на значение справа от оператора. Например, в следующем примере показано, как использовать *= оператор для умножения значения переменной:

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

В этом случае *= оператор объединяет две операции. Сначала он умножается, а затем назначается. Поэтому следующие операторы эквивалентны:

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

Если переменная содержит строковое значение, PowerShell добавляет указанное число строк к значению следующим образом:

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

Чтобы умножить элемент массива, используйте индекс для идентификации элемента, который требуется умножить. Например, следующая команда умножает первый элемент в массиве (положение индекса 0) на 2:

$a[0] *= 2

Назначение по оператору деления

Назначение по оператору /= деления делит числовое значение на значение, указанное справа от оператора. Оператор не может использоваться со строковыми переменными.

Оператор /= объединяет две операции. Сначала он делится, а затем назначается. Поэтому следующие два оператора эквивалентны:

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

Например, следующая команда использует /= оператор для деления значения переменной:

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

Чтобы разделить элемент массива, используйте индекс для идентификации элемента, который требуется изменить. Например, следующая команда делит второй элемент в массиве (позиция индекса 1) на 2:

$a[1] /= 2

Назначение по модулу оператора

Назначение по модулу оператора %= делит значение переменной по значению справа от оператора. %= Затем оператор назначает остаток (известный как модулу) переменной. Этот оператор можно использовать только в том случае, если переменная содержит одно числовое значение. Этот оператор нельзя использовать, если переменная содержит строковую переменную или массив.

Оператор %= объединяет две операции. Сначала он разделяет и определяет оставшуюся часть, а затем назначает оставшуюся часть переменной. Поэтому следующие операторы эквивалентны:

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

В следующем примере показано, как использовать %= оператор для сохранения модуля квитента:

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

Операторы увеличения и уменьшения

Оператор добавок ++ увеличивает значение переменной на 1. При использовании оператора добавочного увеличения в простой инструкции не возвращается значение. Чтобы просмотреть результат, отобразите значение переменной следующим образом:

$a = 7
++$a
$a
8

Чтобы принудительно возвращать значение, заключите переменную и оператор в круглые скобки, как показано ниже.

$a = 7
(++$a)
8

Оператор добавок можно поместить до (префикс) или после (postfix) переменной. Версия префикса оператора увеличивает переменную до использования значения в инструкции следующим образом:

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

Версия постфикса оператора увеличивает переменную после того, как его значение используется в инструкции. В следующем примере переменные имеют разные значения, $c$a так как значение назначается $c перед $a изменениями:

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

Оператор -- уменьшения уменьшает значение переменной на 1. Как и в случае с оператором добавок, значение не возвращается при использовании оператора в простой инструкции. Используйте скобки для возврата значения следующим образом:

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

Версия префикса оператора уменьшает переменную, прежде чем ее значение будет использоваться в инструкции, как показано ниже.

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

Версия postfix оператора уменьшает переменную после использования его значения в инструкции. В следующем примере переменные имеют разные значения, $d$a так как значение назначается $d перед $a изменениями:

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

Оператор присвоения присваивания null-объединения

Оператор назначения объединения со значением NULL ??= присваивает значение правого операнда левому операнду только в том случае, если левый операнд имеет значение NULL. Оператор ??= не вычисляет правый операнд, если значение левого операнда отлично от NULL.

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

Дополнительные сведения см. в разделе "Оператор объединения null".

Типы Microsoft .NET

По умолчанию, если переменная имеет только одно значение, значение, назначенное переменной, определяет тип данных переменной. Например, следующая команда создает переменную с типом System.Int32 :

$a = 6

Чтобы найти тип .NET переменной, используйте метод GetType и его свойство FullName . Не забудьте включить скобки после имени метода GetType , даже если вызов метода не имеет аргументов:

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

Чтобы создать переменную, содержащую строку, назначьте строковое значение переменной. Чтобы указать, что значение является строкой, заключите ее в кавычки следующим образом:

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

Если первое значение, назначенное переменной, является строкой, PowerShell обрабатывает все операции как строковые операции и приводит новые значения к строкам. Это происходит в следующем примере:

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

Если первое значение является целым числом, PowerShell обрабатывает все операции как целые операции и приводит новые значения к целым числам. Это происходит в следующем примере:

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

Вы можете привести новую скалярную переменную как любой тип .NET, поместив имя типа в квадратные скобки, предшествующие имени переменной или первому значению назначения. При приведение переменной определяет тип данных, которые можно хранить в переменной.

Например, следующая команда приводит переменную в виде строкового типа:

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

В следующем примере выполняется приведение первого значения вместо приведения переменной:

$a = [string]27

Невозможно переадресовать тип данных существующей переменной, если его значение не может быть преобразовано в новый тип данных.

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

Чтобы изменить тип данных, необходимо заменить его значение следующим образом:

[int]$a = 3

Кроме того, при выполнении имени переменной с типом данных тип этой переменной блокируется, если вы явно не переопределите тип, указав другой тип данных. Если вы пытаетесь назначить значение, несовместимое с существующим типом, и вы явно не переопределите тип, PowerShell отображает ошибку, как показано в следующем примере:

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

В PowerShell типы данных переменных, содержащих несколько элементов в массиве, обрабатываются по-разному от типов данных переменных, содержащих один элемент. Если тип данных не назначается переменной массива, тип данных всегда System.Object []. Этот тип данных зависит от массивов.

Иногда можно переопределить тип по умолчанию, указав другой тип. Например, следующая команда приводит переменную в качестве типа массива string [] :

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

Переменные PowerShell могут быть любым типом данных .NET. Кроме того, можно назначить любой полный тип данных .NET, доступный в текущем процессе. Например, следующая команда указывает System.DateTime тип данных:

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

Переменная будет назначена значение, соответствующее типу System.DateTime данных. Значение переменной $a будет следующим:

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

Назначение нескольких переменных

В PowerShell можно назначать значения нескольким переменным с помощью одной команды. Первый элемент значения назначения назначается первой переменной, второй элемент назначается второй переменной, третьему элементу третьей переменной. Это называется множественным присваиванием.

Например, следующая команда назначает значение 1 $a переменной, значение 2 $b переменной и значение 3 переменной $c :

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

Если значение назначения содержит больше элементов, чем переменные, все остальные значения назначаются последней переменной. Например, следующая команда содержит три переменные и пять значений:

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

Поэтому PowerShell назначает значение 1 переменной $a и значение 2 переменной $b . Он назначает значения 3, 4 и 5 переменной $c . Чтобы назначить значения в переменной $c трем другим переменным, используйте следующий формат:

$d, $e, $f = $c

Эта команда назначает переменной $d значение 3, значение 4 $e переменной и значение 5 переменной $f .

Если значение назначения содержит меньше элементов, чем переменные, остальные переменные присваиваются значению $null. Например, следующая команда содержит три переменных и два значения:

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

Поэтому PowerShell назначает значение 1 переменной $a и значение 2 переменной $b . Переменная $c .$null

Можно также назначить одно значение нескольким переменным, связав переменные. Например, следующая команда назначает значение "три" всем четырем переменным:

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

Помимо использования операции назначения для задания значения переменной, можно также использовать командлет Set-Variable . Например, следующая команда используется Set-Variable для назначения массива 1, 2, 3 переменной $a .

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

См. также