Пользовательские переменные

 

Применимо к: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

Последнее изменение раздела: 2006-09-21

Переменная является ячейкой хранения данных. В отличие от многих сред программирования, в среде управления 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 очень гибким инструментом.