Поиск на сайте: Расширенный поиск


Новые программы oszone.net Читать ленту новостей RSS
CheckBootSpeed - это диагностический пакет на основе скриптов PowerShell, создающий отчет о скорости загрузки Windows 7 ...
Вы когда-нибудь хотели создать установочный диск Windows, который бы автоматически установил систему, не задавая вопросо...
Если после установки Windows XP у вас перестала загружаться Windows Vista или Windows 7, вам необходимо восстановить заг...
Программа подготовки документов и ведения учетных и отчетных данных по командировкам. Используются формы, утвержденные п...
Red Button – это мощная утилита для оптимизации и очистки всех актуальных клиентских версий операционной системы Windows...
OSzone.net Microsoft PowerShell Windows PowerShell: Автоматизация управления каталогом RSS

Windows PowerShell: Автоматизация управления каталогом

Текущий рейтинг: 3.92 (проголосовало 12)
 Посетителей: 6857 | Просмотров: 9624 (сегодня 0)  Шрифт: - +

Обидно, что на выпуск первой версии Windows PowerShell отвели так мало времени. Сроки поджимали: мы готовили — ни много ни мало — Exchange Server 2007, а он завязан на Windows PowerShell. В общем, специалистам по Active

Directory работы хватало (параллельно готовили еще одну безделицу — Windows Server® 2008). В итоге функции управления Active Directory® в Windows PowerShell, прямо скажем, оставляют желать лучшего.

Честно говоря, управление Active Directory вообще в Windows PowerShell® есть. Разработчики Windows PowerShell мужественно пытались в последние минуты добавить более или менее пристойную поддержку интерфейса служб Active Directory (ADSI) — технологии, поддерживающей языки создания сценариев и уже известной пользователям VBScript.

Путь ADSI

Интерфейс ADSI схож по принципу действия с инструментарием WMI. Вы выдаете запрос, используя особый синтаксис. Запрос передается удаленному компьютеру (контроллеру домена, к примеру) и выполняется. Результатом запроса является объект или коллекция объектов Active Directory (скажем, отдельный пользователь или целая группа). Вы получаете ссылку на этот объект и можете с ней работать. Можно менять свойства объекта, при помощи методов сохранять изменения, удалять объекты и т. д. Например, чтобы создать пользователя, вы запрашиваете подразделение (OU) или контейнер, в котором пользователь будет размещен. В ответ вы получаете метод Create, при помощи которого можно создать пользователя.

Пока вы выполняете самые простые операции, работа с ADSI в Windows PowerShell кажется абсолютно простой и прозрачной. К примеру, такая команда используется для получения имени пользователя и значения атрибута Company, указанного для него:

$user = [ADSI]"LDAP://cn=Ringo,ou=Singers,dc=company,dc=pri" 
$user.Get("Company")

Пользователя можно подать на вход командлета Get-Member — это позволит узнать, какие свойства и методы у него есть. К сожалению, в Windows PowerShell 1.0 подобные объекты реализованы не самым лучшим образом. Как видно из рис. 1, оболочка не способна ни перечислить атрибуты каталога объекта, ни предоставить список методов, доступных для него, — в отличие от метода Get.

Поддержка этих функций улучшена в версии CTP консоли Windows PowerShell 2.0, но лишь отчасти. Все равно платформа Microsoft® .NET Framework, лежащая в основе, не позволяет администраторам видеть все то, что им нужно: платформа изначально создавалась для разработчиков. Еще одна проблема состоит в том, что специалисты по Windows PowerShell не всемогущи. Хорошую поддержку Active Directory можно реализовать только при участии тех, кто в ней разбирается. Другими словами, нужно подключить группу разработчиков Active Directory. Я уверен, через какое-то время именно так все и будет. В конце концов, оболочка Windows PowerShell появилась совсем недавно. Но что же нам делать до этого?

Возможно, вы помните, что в июньском выпуске журнала за 2007 год я рассказывал об использовании технологий ADSI в Windows PowerShell (technetmagazine.com/issues/2007/06/PowerShell). В ней можно найти дополнительную информацию об этой «встроенной» технологии. Здесь же я покажу вам несколько новых подходов.

Богатая экосиситема

Архитектор Windows PowerShell Джефри Сновер (Jeffrey Snover) нередко ссылается на богатство экосистемы, внутри которой оболочка существут. Под этим он подразумевает всю ту огромную работу, которую проделали разработчики, чтобы расширять оболочку Windows PowerShell могли не только сотрудники Майкрософт. Некоторые компании уже создают командлеты для Windows PowerShell, позволяющие управлять их продуктами из командной строки. Среди них VMWare, IBM, Citrix, Foundry.

Один из моих любимых примеров «богатства экосистемы» — программное обеспечение Quest. Эта компания предлагает ряд бесплатных командлетов для управления Active Directory. Загрузить их можно на веб-узле quest.com/powershell. Этой же компанией разработан бесплатный графический интерфейс PowerGUI (powergui.org), который надстраивается над Windows PowerShell, помогая работать с оболочкой тем, кто еще не до конца освоил командную строку. Интерфейс PowerGUI поможет изучить командлеты, предназначенные для управления Active Directory. И поверьте мне, вам захочется ими воспользоваться. По простоте и функциональности с этим набором командлетов не сравнится ни одно средство управления Active Directory. (Если вам нужны дополнительные сведения о PowerGUI, почитайте рубрику «Инструментарий» в январском выпуске журнала за 2008 год: technetmagazine.com/issues/2008/01/Toolbox.)

Путь Windows PowerShell

Любой прием, предполагающий использование командлетов, можно смело назвать «путем Windows PowerShell». Вам не приходится работать ни с классическими сценариями, ни с путаными объектами программирования. Вот мой самый любимый однострочник. Эта команда импортирует файл CSV и на основании данных, хранящихся в нем, создает десятки, даже сотни пользователей Active Directory:

Import-CSV 'C:\provision1.csv' |
ForEach-Object {New-QADUser -organizationalUnit 'company.pri/Singers' -name ($_.'First Name' + '.' + $_.'Last Name') 
-samAccountName $_.'Logon name' -city $_.city -title $_.'Job title' -department $_.department} 

После того как файл CSV импортирован и разбит на объекты, последние подаются на вход командлета ForEach-Object, который для каждого объекта выполняет тот фрагмент кода, который в тексте команды заключен в фигурные скобки. То есть сценарий запускается по одному разу для каждой строки файла CSV. В сценарии есть специальная переменная $_. Это ссылка на текущий объект, а именно на текущую строку файла CSV.

Для каждой строки я запускаю командлет New-QADUser. Это один из командлетов надстройки Quest — всего их там около десятка. Обратите внимание на имя командлета — QADUser. Буква Q — это, как вы, наверное, догадались, сокращение от Quest. Такое обозначение используется для того, чтобы избежать конфликтов с командлетом New-ADUser, который разработчики Microsoft Active Directory, вероятно, в ближайшем будущем выпустят. Так оба командлета можно будет загрузить в оболочку одновременно, и их будет проще различать.

Оставшаяся часть однострочника представляет собой набор параметров командлета New-QADUser. Вначале указывается подразделение (organizationalUnit), в котором будет располагаться новый пользователь. Затем идет имя атрибута, соответствующего столбцу First Name (Имя), потом точка, а после нее — атрибут, соответствующий столбцу Last Name (Фамилия).

Последнее, на что здесь нужно обратить внимание: параметр city в Active Directory будет заменен атрибутом l (или Locality-Name). Командлет тоже имеет параметр l, выполняющий практически те же самые функции. В большинстве случаев для параметров, соответствующих атрибутам Active Directory, можно использовать как имя атрибута, так и текстовую метку из средства «Пользователи и компьютеры Active Directory».

Еще один путь Windows PowerShell

Active Directory представляет собой иерархическое хранилище, а одна из сильных сторон Windows PowerShell — возможность представить любое иерархическое хранилище как диск и использовать хорошо знакомые команды управления хранилищами: Dir, Del, Ren, Copy и т. д. К сожалению, в Windows PowerShell 1.0 нет поставщика PSDrive для Active Directory, и поэтому Active Directory представить в виде диска не получится.

Но тут снова на выручку приходит богатство экосистемы: PowerShell Community Extensions. Это бесплатная надстройка, которую можно получить на веб-узле codeplex.com/powershellcx. После установки PowerShell Community Extensions вы сможете указать оболочке ваше доменное имя и затем управлять Active Directory так, словно это обычный диск:

CD COMPANY:  CD SINGERS  DIR

Эта команда переводит вас в домен COMPANY, в подразделение Singers OU и выдает список объектов (см. рис. 2). Теперь можно при помощи команды Del удалить пользователя, при помощи команды Md создать новое подразделение и т. д. В поставщике Community Extensions PSDrive есть подводные камни. Некоторые функции в нем могут давать неожиданные результаты — из-за того, что они просто не согласуются с принципами работы Active Directory. Кроме того, вы должны быть предельно внимательны: если вы перейдете в корень домена и запустите команду del * -recurse, вы удалите все объекты в домене (если у вас есть соответствующие полномочия). И по умолчанию никто вас переспрашивать не будет, действительно ли их нужно удалить. Но несмотря на это, приведенная команда позволяет сделать очень многое, так что нужны просто некоторые навыки и осторожность.

Приступайте к работе

На занятиях меня часто спрашивают, для чего можно сейчас использовать Windows PowerShell. Ведь далеко не каждый продукт Майкрософт задействует эту оболочку. Создается впечатление, что Windows PowerShell еще не готова к полноценной работе.

А на самом деле она уже работает на полную. Пусть в Майкрософт не создали набора средств для управления Active Directory из командной строки, зато другие разработчики взяли эту задачу на себя и отлично с ней справились. Windows PowerShell помогает выполнять задания по администрированию, в том числе позволяет администрировать самые трудоемкие из них, например создание большого количества пользователей. Нужно просто познакомиться с тем, что делает сообщество, чтобы оболочка Windows PowerShell стала действительно полезной. (Зайдите, к примеру, на веб-узел PowerShellCommunity.org, одним из спонсоров которого является Майкрософт. Я участвую в его администрировании.) Если в Windows PowerShell загрузить хороший инструментарий, можно будет создать сценарии для некоторыз задач администрирования, отнимающих много времени, и повысить эффективность работы администратора при одновременной экономии времени.

Автор: Дон Джонс  •  Иcточник: TechNet Magazine  •  Опубликована: 14.05.2008
Нашли ошибку в тексте? Сообщите о ней автору: выделите мышкой и нажмите CTRL + ENTER
Теги:   Powershell, скрипты.


Оценить статью:
Вверх
Комментарии посетителей
Комментарии отключены. С вопросами по статьям обращайтесь в форум.