Ключевые концепции написания командлетов оболочки управления SharePoint

Дата последнего изменения: 1 октября 2009 г.

Применимо к: SharePoint Foundation 2010

В этой статье
Параметры командлетов
Конвейеры
Объекты PipeBind

При написании командлетов для SharePoint есть несколько основных концепций Windows PowerShell. Далее представлено не полное, но достаточное описание некоторых важных концепций реализации Windows PowerShell для SharePoint.

Параметры командлетов

Хотя пользователи вводят значения параметров в виде строк, Windows PowerShell пытается преобразовать эти значения в их правильный тип на основе определения параметра. Поэтому создаваемые командлеты должны предоставлять средства для проверки того, что тип значений параметров, которые передаются в командлет — правильные.

Пытайтесь не передавать параметры строкового типа или типа целых значений, если они не являются допустимыми типами для этого параметра. Вместо этого определите класс, ограничивающий диапазон и формат параметров. Кроме того проверяйте параметры с помощью метода Parse(String) типа параметра. Windows PowerShell поддерживает использование метода Parse() для преобразования строкового типа в другие типы данных.

Конвейеры

Среди основных улучшений Windows PowerShell по сравнению с Cmd.exe — встроенная способность Windows PowerShell совмещать последовательности командлетов в конвейер, последовательность команд. Конвейер позволяет передавать (или ставить в конвейер) выходные объекты одной команды как входные объекты последующих команд. Конвейеры команд позволяют разработчикам командлетов создавать сложные, гибкие последовательности команд, выходные объекты которых можно сохранять и использовать заново.

Процесс конвейеризации основан на поведении командлетов, при котором выходные объекты записываются в конвейер объектов, которым управляет Windows PowerShell. Это позволяет Windows PowerShell сопоставлять объект в конвейере с параметрами последующего командлета.

Чтобы конвейер работал, между выходом предшествующего командлета и входом последующих командлетов была явная связь. Эта связь может существовать на уровне объектов, где предшествующий объект в конвейере выделяет параметр последующего командлета. (Это называется конвейеризацией по значению). Также связь может существовать на уровне свойств, при этом свойства предшествующего объекта в конвейере выделяют параметры следующего командлета.

Конвейеризация по значению

Конвейеризация по значению означает, что следующий командлет использует весь объект из конвейера, при условии, что тип объекта правильный. Конвейеризация по значению обычно реализуются с помощью командлетов Set, при этом при передачи всего объекта сохраняется операция чтения из источника данных, а также с помощью командлетов New, которые поддерживают клонирование. Конвейеризация по значению также используется, если последующий командлет не может заново считать выходной объект предыдущего командлета.

Объекты PipeBind

Объекты PipeBind — это специальные объекты, уникальные для Windows PowerShell для SharePoint, которые предоставляют второй уровень наборов специализированных параметров, оптимизированных для SharePoint Foundation.

При использовании объектов SharePoint Foundation 2010 как параметров командлетов, следует применять соответствующий объект PipeBind вместо объекта SharePoint. Это очень важно, так как при этом пользователь командлета может указать значение параметра нужным образом. Объект PipeBind фактически представляет уровень, расположенный между входными данными для параметра пользователя и самим объектом параметра.

Например, командлет, который принимает параметр SPSite, может принимать сам объект SPSite, идентификатор GUID или URL-адрес этого семейства сайтов. Объект SPSitePipeBind должен убедиться, что независимо от используемого представления среды выполнения Windows PowerShell сам командлет представлен фактическим объектом SPSite.

ПримечаниеПримечание

Классы PipeBind не должны быть привязаны к определенным командлетам, а должны быть общими для всех командлетов. При написании командлетов PipeBind убедитесь, что для него не существует требований к среде реализации командлетов.

Реализация объекта PipeBind

При реализации объекта PipeBind следует создать класс, производный от базового класса SPCmdletPipeBind<TCmdletObject>. Для этого выполните следующие действия.

  1. Реализуйте конструктор класса.

  2. Перегрузите метод Read() объекта.

В классе PipeBind должен быть хотя бы один конструктор (но их может быть и больше). Когда Windows PowerShell пытается связать параметры, выполняется итерация по набору открытых конструкторов для определенного входного параметра с помощью конструктора PipeBind. Это значит, для всех возможных типов входных данных, представляющих параметр, должен существовать соответствующий конструктор.

Метод Read() объекта SPCmdletPipeBind<TCmdletObject> возвращает тип объекта, определенный в объектной модели SharePoint Foundation: public virtual TCmdletObject Read().

Учтите, что метод Read() следует перегрузить для каждой реализации объекта PipeBind, чтобы убедиться, что объект объектной модели извлекается правильно. При необходимости можно создать дополнительные перегрузки метода Read() для предоставления необходимых параметров.

Удостоверение командлетов и их атомарность

Командлеты должны содержать параметр Identity, который определяет объект, с которым нужно действовать. При написании командлетов нужно указать уникальный идентификатор в качестве значения параметра Identity. Обратите внимание, что у новых командлетов нет идентификатора; только после инициализации объекта создается его идентификатор.

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