Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Назначение: Windows PowerShell 2.0, Windows PowerShell 3.0
Вставьте сюда введение.
РАЗДЕЛ
about_assignment_operators
КРАТКОЕ ОПИСАНИЕ
В этой статье описано, как присваивать значения переменным с помощью операторов.
ПОДРОБНОЕ ОПИСАНИЕ
Операторы присваивания присваивают переменной одно или несколько значений. Они могут выполнять числовые операции над значениями перед присваиванием.
В Windows PowerShell® поддерживаются перечисленные ниже операторы присваивания.
Operator Description
------- -----------
= Sets the value of a variable to the specified value.
+= Increases the value of a variable by the specified value, or
appends the specified value to the existing value.
-= Decreases the value of a variable by the specified value.
*= Multiplies the value of a variable by the specified value, or
appends the specified value to the existing value.
/= Divides the value of a variable by the specified value.
%= Divides the value of a variable by the specified value and
then assigns the remainder (modulus) to the variable.
++ Increases the value of a variable, assignable property, or
array element by 1.
-- Decreases the value of a variable, assignable property, or
array element by 1.
СИНТАКСИС
Синтаксис операторов присваивания выглядит следующим образом:
<assignable-expression> <assignment-operator> <value>
Выражения, которые можно присваивать, включают переменные и свойства. Значение может быть одиночным, а также представленным массивом значений, командой, выражением или инструкцией.
Операторы инкремента и декремента — унарные операторы. Каждый из них может быть как постфиксным, так и префиксным.
<assignable-expression><operator>
<operator><assignable-expression>
Присваиваемое выражение должно быть числом или выражением, которое можно преобразовать в число.
ПРИСВАИВАНИЕ ЗНАЧЕНИЙ
Переменные — именованные области памяти, в которых хранятся значения. Для хранения значений в переменных используется оператор присваивания (=). Можно заменить существующее значение переменной новым, а также добавить новое значение к существующему.
Основной оператор присваивания — знак равенства (=) (ASCII 61). Например, следующая инструкция присваивает значение Windows PowerShell переменной $MyShell:
$MyShell = "Windows PowerShell"
Если вы присваиваете значение переменной в Windows PowerShell, переменная создается, если она еще не существует. Например, первая из следующих двух инструкций присваивания создает переменную $a и присваивает ей значение 6. Вторая инструкция присваивания присваивает переменной $a значение 12. Первая инструкция создает новую переменную. Вторая инструкция только изменяет ее значение:
$a = 6
$a = 12
Тип данных для переменных в Windows PowerShell не определен, если вы не привели их к определенному типу. Если переменная содержит только один объект, она принимает тип данных этого объекта. Если переменная содержит коллекцию объектов, она принимает тип данных System.Object. Таким образом, можно присвоить коллекции любой тип объекта. В следующем примере показано, что в переменную можно добавлять объекты процесса, объекты службы, строки и целые числа без возникновения ошибки:
$a = get-process
$a += get-service
$a += "string"
$a += 12
Так как у оператора присваивания (=) более низкий приоритет, чем у оператора конвейера (|), чтобы присвоить переменной результат конвейера команд, скобки не требуются. Например, следующая команда сортирует имена служб на компьютере, а затем присваивает отсортированные службы переменной $a:
$a = get-service | sort name
Можно также присвоить переменной значение, созданное с помощью инструкции, как показано в следующем примере:
$a = if ($b -lt 0) { 0 } else { $b }
В этом примере переменной $a присваивается значение 0, если значение переменной $b меньше 0. Значение переменной $b присваивается переменной $a, если значение $b не меньше нуля.
ОПЕРАТОР ПРИСВАИВАНИЯ (=)
Оператор присваивания (=) присваивает значения переменным. Если переменной уже задано значение, оператор присваивания (=) заменяет это значение без предупреждения.
Следующая инструкция присваивает целочисленное значение 6 переменной $a:
$a = 6
Чтобы присвоить переменной строковое значение, заключите его в кавычки:
$a = "baseball"
Чтобы присвоить переменной массив (несколько значений), разделяйте значения запятыми:
$a = "apple", "orange", "lemon", "grape"
Чтобы присвоить переменной хэш-таблицу, используйте стандартную нотацию хэш-таблицы в Windows PowerShell. Введите знак "@", а после него пары "ключ-значение", разделенные точкой с запятой (;) и заключенные в фигурные скобки ({ }). Например, чтобы присвоить хэш-таблицу переменной $a, введите:
$a = @{one=1; two=2; three=3}
Чтобы присвоить переменной шестнадцатеричное значение, введите "0x" перед значением. Windows PowerShell преобразовывает шестнадцатеричное значение (0x10) в десятичное значение (в данном случае 16) и присваивает это значение переменной $a. Например, чтобы присвоить значение 0x10 переменной $a, введите:
$a = 0x10
Чтобы присвоить переменной значение экспоненты, введите число основания, букву "e" и число, кратное 10. Например, чтобы присвоить переменной $a значение 3,1415 со степенью 1000, введите:
$a = 3.1415e3
Windows PowerShell может также преобразовывать килобайты (КБ), мегабайты (МБ) и гигабайты (ГБ) в байты. Например, чтобы присвоить 10 килобайт в качестве значения переменной $a, введите:
$a = 10kb
ОПЕРАТОР ПРИСВАИВАНИЯ СО СЛОЖЕНИЕМ (+=)
Оператор присваивания со сложением (+=) увеличивает значение переменной или добавляет указанное значение к существующему. Это действие зависит от того, имеет ли переменная числовой или строковый тип и содержит ли она одно (скалярное) значение или несколько значений (коллекцию).
Оператор += объединяет две операции. Сначала он прибавляет, а затем присваивает. Таким образом, следующие инструкции эквивалентны:
$a += 2
$a = ($a + 2)
Если переменная содержит одно числовое значение, оператор += увеличивает существующее значение на число справа от оператора. Затем оператор присваивает переменной полученное значение. В следующем примере показано, как использовать оператор += для увеличения значения переменной:
C:\PS> $a = 4
C:\PS> $a += 2
C:\PS> $a
6
Если значение переменной является строкой, значение справа от оператора добавляется в конец строки:
C:\PS> $a = "Windows"
C:\PS> $a += " PowerShell"
C:\PS> $a
Windows PowerShell
Если значение переменной является массивом, оператор += добавляет в конец массива значения справа от оператора. Если тип массива не задан явно с помощью приведения, можно добавить в конец массива любой тип значения:
C:\PS> $a = 1,2,3
C:\PS> $a += 2
C:\PS> $a
1
2
3
2
C:\PS> $a += "String"
C:\PS> $a
1
2
3
2
String
Если значение переменной является хэш-таблицей, оператор += добавляет конец в хэш-таблицы значение справа от оператора. Но так как единственный тип, который можно добавить в хэш-таблицу — другая хэш-таблица, все остальные присваивания неприменимы.
Например, следующая команда присваивает хэш-таблицу переменной $a. Затем оператор += используется для добавления другой хэш-таблицы в конец существующей, при этом фактически добавляется новая пара "ключ-значение" в существующую хэш-таблицу. Эта команда выполняется успешно, как показано в выходных данных:
C:\PS> $a = @{a = 1; b = 2; c = 3}
C:\PS> $a += @{mode = "write"}
C:\PS> $a
Name Value
---- -----
a 1
b 2
mode write
c 3
Следующая команда пытается добавить целое число (1) в конец хэш-таблицы в переменной $a. Эта команда завершается со сбоем:
C:\PS> $a = @{a = 1; b = 2; c = 3}
C:\PS> $a += 1
You can add another hash table only to a hash table.
At line:1 char:6
+ $a += <<<< 1
ОПЕРАТОР ПРИСВАИВАНИЯ С ВЫЧИТАНИЕМ (-=)
Оператор присваивания с вычитанием (-=) уменьшает значение переменной на значение, которое указано справа от оператора. Этот оператор не может использоваться со строковыми переменными и для удаления элемента из коллекции.
Оператор -= объединяет две операции. Сначала он вычитает, а затем присваивает. Таким образом, следующие инструкции эквивалентны:
$a -= 2
$a = ($a - 2)
В следующем примере показано, как использовать оператор -= для уменьшения значения переменной:
C:\PS> $a = 8
C:\PS> $a -= 2
C:\PS> $a
6
Можно также использовать оператор присваивания -=, чтобы уменьшить значение элемента в числовом массиве. Для этого укажите индекс того элемента массива, который требуется изменить. В следующем примере значение третьего элемента массива (элемент 2) уменьшается на 1:
C:\PS> $a = 1,2,3
C:\PS> $a[2] -= 1.
C:\PS> $a
1
2
2
С помощью оператора -= невозможно удалять значения переменной. Для удаления всех значений, присвоенных переменной, используйте командлеты Clear-Item или Clear-Variable, чтобы присвоить переменной значения $null или "".
$a = $null
Чтобы удалить конкретное значение из массива, используйте нотацию массива для присваивания значения $null конкретному элементу. Например, следующая инструкция удаляет из массива второе значение (с индексом 1):
C:\PS> $a = 1,2,3
C:\PS> $a
1
2
3
C:\PS> $a[1] = $null
C:\PS> $a
1
3
Чтобы удалить переменную, используйте командлет Remove-Variable. Этот метод полезен, когда переменная явно приведена к определенному типу данных и требуется нетипизированная переменная. Следующая команда удаляет переменную $a:
remove-variable a
ОПЕРАТОР ПРИСВАИВАНИЯ С УМНОЖЕНИЕМ (*=)
Оператор присваивания с умножением (*=) умножает числовое значение или добавляет указанное число копий строкового значения переменной.
Если переменная содержит одно числовое значение, это значение умножается на значение справа от оператора. Например, в следующем примере показано использование оператора *= для умножения значения переменной:
C:\PS> $a = 3
C:\PS> $a *= 4
C:\PS> $a
12
В этом случае оператор *= объединяет две операции. Сначала он умножает, а затем присваивает. Таким образом, следующие инструкции эквивалентны:
$a *= 2
$a = ($a * 2)
Если переменная содержит строковое значение, Windows PowerShell добавляет в конец значения указанное количество строк:
C:\PS> $a = "file"
C:\PS> $a *= 4
C:\PS> $a
filefilefilefile
Для умножения элемента массива используйте индекс, чтобы определить элемент, который требуется умножить. Например, следующая команда умножает на 2 первый элемент в массиве (с индексом 0):
$a[0] *= 2
ОПЕРАТОР ПРИСВАИВАНИЯ С ДЕЛЕНИЕМ (/=)
Оператор присваивания с делением (/=) делит числовое значение на значение, указанное справа оператора. Этот оператор не может использоваться со строковыми переменными.
Оператор /= объединяет две операции. Сначала он делит, а затем присваивает. Таким образом, следующие две инструкции эквивалентны:
$a /= 2
$a = ($a / 2)
Например, следующая команда использует оператор /=, чтобы поделить значение переменной:
C:\PS> $a = 8
C:\PS> $a /=2
C:\PS> $a
4
Для деления элемента массива используйте индекс, чтобы определить элемент, который требуется поделить. Например, следующая команда делит на 2 второй элемент в массиве (с индексом 1):
$a[1] /= 2
ОПЕРАТОР ПРИСВАИВАНИЯ ПО МОДУЛЮ (%=)
Оператор присваивания по модулю (%=) делит значение переменной на значение справа от оператора. Затем оператор %= присваивает переменной остаток (известный как модуль). Этот оператор можно использовать, только если переменная содержит одно числовое значение. Этот оператор невозможно использовать, если переменная содержит строковую переменную или массив.
Оператор %= объединяет две операции. Сначала он делит и определяет остаток, а затем присваивает этот остаток переменной. Таким образом, следующие инструкции эквивалентны:
$a %= 2
$a = ($a % 2)
В следующем примере показано, как использовать оператор %=, чтобы сохранить модуль частного:
C:\PS> $a = 7
C:\PS> $a %= 4
C:\PS> $a
3
ОПЕРАТОРЫ ИНКРЕМЕНТА И ДЕКРЕМЕНТА
Оператор инкремента (++) увеличивает значение переменной на 1. При использовании оператора инкремента в простой инструкции значение не возвращается. Чтобы просмотреть результат, отобразите значение переменной:
C:\PS> $a = 7
C:\PS> ++$a
C:\PS> $a
8
Чтобы принудительно возвратить значение, заключите переменную и оператор в круглые скобки:
C:\PS> $a = 7
C:\PS> (++$a)
8
Оператор инкремента можно задать до переменной или после нее (тогда он будет префиксным или постфиксным соответственно). Префиксная версия оператора увеличивает переменную перед использованием ее значения в инструкции:
C:\PS> $a = 7
C:\PS> $c = ++$a
C:\PS> $a
8
C:\PS> $c
8
Постфиксная версия оператора увеличивает переменную после использования ее значения в инструкции. В следующем примере у переменных $c и $a разные значения, так как значение присваивается $c перед изменением $a:
C:\PS> $a = 7
C:\PS> $c = $a++
C:\PS> $a
8
C:\PS> $c
7
Оператор декремента (--) уменьшает значение переменной на 1. Как и в случае с оператором инкремента, при использовании этого оператора в простой инструкции значение не возвращается. Используйте круглые скобки, чтобы возвратить значение:
C:\PS> $a = 7
C:\PS> --$a
C:\PS> $a
6
C:\PS> (--$a)
5
Префиксная версия оператора уменьшает переменную перед использованием ее значения в инструкции:
C:\PS> $a = 7
C:\PS> $c = --$a
C:\PS> $a
6
C:\PS> $c
6
Постфиксная версия оператора уменьшает переменную после использования ее значения в инструкции. В следующем примере у переменных $d и $a разные значения, так как значение присваивается $d перед изменением $a:
C:\PS> $a = 7
C:\PS> $d = $a--
C:\PS> $a
6
C:\PS> $d
7
ТИПЫ MICROSOFT .NET FRAMEWORK
Если переменной присвоено только одно значение, по умолчанию это значение определяет ее тип данных. Например, следующая команда создает переменную, которая имеет тип целого числа (System.Int32):
$a = 6
Чтобы найти тип .NET Framework переменной, используйте метод GetType и его свойство FullName, как показано ниже. Обязательно добавьте круглые скобки после имени метода GetType, даже если при вызове этого метода не задаются аргументы:
C:\PS> $a = 6
C:\PS> $a.gettype().fullname
System.Int32
Чтобы создать переменную, содержащую строку, присвойте переменной строковое значение. Чтобы указать, что значение является строкой, заключите его в кавычки:
C:\PS> $a = "6"
C:\PS> $a.gettype().fullname
System.String
Если строка — первое значение, присвоенное переменной, Windows PowerShell считает все операции строковыми и приводит новые значения к строковому типу. Это показано в следующем примере:
C:\PS> $a = "file"
C:\PS> $a += 3
C:\PS> $a
file3
Если первое значение — целое число, Windows PowerShell считает все операции целочисленными и приводит новые значения к типу целых чисел. Это показано в следующем примере:
C:\PS> $a = 6
C:\PS> $a += "3"
C:\PS> $a
9
Можно привести новую скалярную переменную к любому типу .NET Framework, поместив имя типа в квадратные скобки, предшествующие имени переменной или первому присвоенному значению. При приведении переменной можно определить типы данных, которые могут храниться в переменной. Можно также определить поведение переменной при манипулировании ею.
Например, следующая команда приводит переменную к строковому типу:
C:\PS> [string]$a = 27
C:\PS> $a += 3
C:\PS> $a
273
В следующем примере приведено первое значение вместо приведения переменной:
$a = [string]27
В случае приведения переменной к определенному типу общепринято приводить переменную, а не значение. Тем не менее невозможно повторно привести существующую переменную к определенному типу данных, если ее значение невозможно преобразовать в новый тип данных. Чтобы изменить тип данных, необходимо заменить значение:
C:\PS> $a = "string"
C:\PS> [int]$a
Cannot convert value "string" to type "System.Int32". Error: "Input
string was not in a correct format."
At line:1 char:8
+ [int]$a <<<<
C:\PS> [int]$a =3
Кроме того, если перед именем переменной ввести тип данных, тип этой переменной блокируется. Этого можно избежать, если явно переопределить этот тип данных, указав другой. Если вы попробуете присвоить значение, несовместимое с существующим типом, явным образом не переопределив этот тип, Windows PowerShell отобразит сообщение об ошибке, как показано в следующем примере:
C:\PS> $a = 3
C:\PS> $a = "string"
C:\PS> [int]$a = 3
C:\PS> $a = "string"
Cannot convert value "string" to type "System.Int32". Error: "Input
string was not in a correct format."
At line:1 char:3
+ $a <<<< = "string"
C:\PS> [string]$a = "string"
В Windows PowerShell типы данных тех переменных, которые содержат несколько элементов в массиве, обрабатываются иначе, чем типы данных тех переменных, которые содержат один элемент. Если тип данных специально не присвоен переменной массива, этим типом данных всегда будет System.Object []. Этот тип данных относится к массивам.
В некоторых случаях тип по умолчанию можно переопределить, указав другой тип. Например, следующая команда приводит переменную к типу строкового массива []:
[string []] $a = "one", "two", "three"
Переменные в Windows PowerShell могут быть любого типа данных .NET Framework. Кроме того, можно присвоить любой полностью соответствующий требованиям тип данных .NET Framework, доступный в текущем процессе. Например, следующая команда задает тип данных System.DateTime:
[system.datetime]$a = "5/31/2005"
Переменной присваивается значение, соответствующее типу данных System.DateTime. Значение переменной $a будет таким:
Tuesday, May 31, 2005 12:00:00 AM
ПРИСВАИВАНИЕ ЗНАЧЕНИЙ НЕСКОЛЬКИМ ПЕРЕМЕННЫМ
В Windows PowerShell можно присвоить значения нескольким переменным с помощью одной команды. Первый элемент присваиваемого значения присваивается первой переменной, второй элемент — второй, третий элемент — третьей и т. д. Например, следующая команда присваивает значение 1 переменной $a, значение 2 — переменной $b и значение 3 — переменной $c:
C:\PS> $a, $b, $c = 1, 2, 3
Если переменных меньше, чем элементов в присваиваемом значении, все остальные значения присваиваются последней переменной. Например, следующая команда содержит три переменные и пять значений:
$a, $b, $c = 1, 2, 3, 4, 5
Таким образом, Windows PowerShell присваивает значение 1 переменной $a и значение 2 переменной $b. Значения 3, 4 и 5 присваиваются переменной $c. Чтобы присвоить значения в переменной $c трем другим переменным, используйте следующий формат:
$d, $e, $f = $c
Эта команда присваивает значение 3 переменной $d, значение 4 переменной $e и значение 5 переменной $f.
Можно также присвоить одно значение нескольким переменным, связав переменные в цепочку. Например, следующая команда присваивает значение "три" всем четырем переменным:
$a = $b = $c = $d = "three"
КОМАНДЛЕТЫ, СВЯЗАННЫЕ С ПЕРЕМЕННОЙ
Помимо операции присваивания, для присваивания значений переменной можно также использовать командлет Set-Variable. Например, в следующей команде используется командлет Set-Variable, чтобы присвоить массив значений 1, 2, 3 переменной $a.
Set-Variable -name a -value 1, 2, 3
СМ. ТАКЖЕ
about_Arrays
about_Hash_Tables
about_Variables
Clear-Variable
Remove-Variable
Set-Variable