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

Чтобы назначить переменную, добавьте перед строкой знак доллара ($). Необходимо заключить строку в фигурные скобки ({ }), если она содержит пробелы или другие специальные знаки. Используя запись ссылки на индекс массива ([ ]), можно обращаться к элементам переменной массива или хэш-таблицы.

Дополнительные сведения о массивах см. в разделе Массивы.

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

Переменные очень полезны, если нужно сохранить значение. Значения присваиваются переменным с использованием оператора присваивания. Дополнительные сведения об операторах см. в разделе Синтаксис.

Например, чтобы присвоить значение 8 переменной $Example, воспользуйтесь следующей командой:

Копировать код
$Example = 8

Эта команда присваивает целочисленное значение 8 переменной $Example. Впоследствии можно вызвать переменную $Example в другой команде, чтобы получить это значение. Передача значений через переменные идентична непосредственному вводу этих значений. Например, следующие две команды выполняют одинаковые действия, если переменной $Example2 присвоено значение "Hello":

Копировать код
Write-Host $Example2
Write-Host "Hello"

Хранение в переменной выходных данных команды

В переменных можно сохранять выходные данные команд для их последующего использования. Если команда присвоена переменной, результат выполнения команды вычисляется в ходе ее выполнения. Выходное значение команды присваивается переменной. Например, при выполнении в командной строке команды $CurrentDate = Get-Date и последующем вызове переменной $CurrentDate в течение нескольких секунд будет всегда выводиться одно и то же значение переменной.

При присваивании переменной выходных данных команды можно также получить доступ к свойствам и методам базового объекта. Например, чтобы просмотреть свойства и методы, доступные после присваивания переменной $CurrentDate команды Get-Date, можно воспользоваться командой $CurrentDate | Get-Member. При использовании команды $CurrentDate | Get-Member в списке возвращаются следующие свойства:

Копировать код
Date				 Property	 System.DateTime Date {get;}
Day				Property	 System.Int32 Day {get;}
DayOfWeek			Property	 System.DayOfWeek DayOfWeek {get;}
DayOfYear			Property	 System.Int32 DayOfYear {get;}
Hour				 Property	 System.Int32 Hour {get;}
Kind				 Property	 System.DateTimeKind Kind {get;}
Millisecond		Property	 System.Int32 Millisecond {get;}
Minute			 Property	 System.Int32 Minute {get;}
Month				Property	 System.Int32 Month {get;}
Second			 Property	 System.Int32 Second {get;}
Ticks				Property	 System.Int64 Ticks {get;}
TimeOfDay			Property	 System.TimeSpan TimeOfDay {get;}
Year				 Property	 System.Int32 Year {get;}
DateTime			 ScriptProperty System.Object DateTime {get=if ($this.Di...

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

Копировать код
$CurrentDate.Year

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

Хранение в переменной выходных данных команды Dir

В переменной можно хранить выходные данные команды Dir. Так как команда Dir возвращает несколько строк, каждая из этих строк сохраняется в переменной как новый элемент массива. Впоследствии можно получить доступ к любому объекту файла, хранящемуся в этом созданном массиве. Дополнительные сведения о массивах см. в разделе Массивы.

Следующая команда присваивает выходные данные команды Dir переменной $DirOutput:

Копировать код
$DirOutput = Dir

Впоследствии можно выбрать конкретный объект файла, указав нужный индекс массива следующим образом:

Копировать код
$DirOutput[1].Name

Можно также создать простую циклическую процедуру, которая будет обрабатывать весь массив и отображать имя и размер каждого из хранящихся в массиве файлов следующим образом:

Копировать код
0..$DirOutput.Length | ForEach { $DirOutput[$_].Name + " is " + $DirOutput[$_].Length + " bytes long." }

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

  • Команда 0..$DirOutput.Length указывает среде управления Exchange вывести целое число в диапазоне от 0 до значения размера массива, хранящегося в переменной $DirOutput.

  • Выходные данные команды 0..$DirOutput.Length передаются по конвейеру в команду ForEach, которая циклически обрабатывает элементы массива, пока не достигнет его конца. Команда ForEach выполняет команды, заключенные в фигурные скобки { }.

  • Переменная $_ хранит текущий объект, который находится в конвейере. В данном случае объект в конвейере представляет собой целое число, полученное в результате выполнения командой 0..$DirOutput.Length счета от 0 до максимального индекса массива. Эта переменная используется в команде $DirOutput[$_].Name и команде $DirOutput[$_].Length для выбора элемента массива, к которому нужно получить доступ.

  • Дополнительные сведения о переменной $ см. в разделе Переменные среды.

  • Знаки плюса «+» используются для слияния выходных данных команды $DirOutput[$_].Name и команды $DirOutput[$_].Length, а также добавленных строк, в результате чего выходные данные имеют следующий вид:

    Копировать код
    abv_dg.dll is 416144 bytes long.
    addxa.dll is 285056 bytes long.
    ASDat.MSI is 5626880 bytes long.
    ASEntDat.MSI is 5626880 bytes long.
    ASEntIRS.MSI is 910336 bytes long.
    ASEntSig.MSI is 45056 bytes long.
    BPA.Common.dll is 211848 bytes long.
    BPA.ConfigCollector.dll is 101272 bytes long.
    BPA.NetworkCollector.dll is 52128 bytes long.
    

Эти примеры показывают, как можно использовать свойство Length несколько раз для вывода разных сведений об одной переменной. Это доступно благодаря тому, что в переменной $DirOutput хранится несколько типов данных. Первый тип данных — непосредственно объект каталога, второй тип данных — объекты файлов. При выполнении команды $DirObject.Length без указания индекса массива предоставляется доступ к типам родительских объектов каталога, которые хранятся в массиве. Если задан индекс массива, например $DirObject[5].Length, предоставляется доступ к дочерним объектам файлов, хранящимся в объекте каталога.

Такое поведение характерно для многих объектов. Как правило, можно получить доступ ко многим уровням данных объектов, которые содержатся в одной переменной. Возможность получать доступ к таким данным делает среду управления Exchange очень гибким инструментом.