Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Краткое описание
Описывает, как использовать операторы для назначения значений переменным.
Длинное описание
Операторы назначения назначают одно или несколько значений переменной. Знак равенства (=
) — это оператор назначения PowerShell. PowerShell также имеет следующие операторы назначения составных
Синтаксис
Синтаксис операторов назначения выглядит следующим образом:
-
<assignable-expression>
<assignment-operator>
<value>
Присваиваемые выражения включают переменные и свойства. Это значение может быть одним значением, массивом значений или командой, выражением или оператором.
Операторы добавок и уменьшения являются унарными операторами. У каждой есть версии с префиксом и постфиксом.
<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
Оператор инкремента можно поместить перед (префикс) или после (постфикс) переменной. Версия префикса оператора увеличивает переменную до использования значения в инструкции следующим образом:
$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. Оператор ??=
не вычисляет свой правый операнд, если левый операнд вычисляется как ненулевой.
$x = $null
$x ??= 100
$x
100
Дополнительные сведения см. в null-объединяющем операторе.
Типы Microsoft .NET
По умолчанию, если переменная имеет только одно значение, значение, назначенное переменной, определяет тип данных переменной. Например, следующая команда создает переменную с типом System.Int32:
$a = 6
Чтобы найти тип данных .NET переменной, используйте метод GetType и его свойство FullName. Не забудьте включить скобки после имени метода GetType 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
Можно привести новую скалярную скалярную переменную
Например, следующая команда приводит переменную в виде строкового типа:
[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
Эта команда назначает значение 3 переменной $d
, значение 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
См. также
PowerShell