Главная Windows, Без рубрики, Новое Active Directory, PowerShell, Windows 2008 R2
  • Типовые задачи администрирования AD с использованием PowerShell

    monolisa-ascii_thumbВсем администраторам Active Directory периодически приходится сталкиваться с рутинными задачами, которые хотелось бы так или иначе автоматизировать. Как правило, это делается с использованием скриптов на наиболее известных языках программирования: VBScript, Jscript, PowerShell. Последний я считаю наиболее удобным. Благодаря некоторым из его особенностей те же процедуры, которые занимают в VBScript десяток строк и требуют понимания работы WMI, LDAP и еще многих китайских слов – в PowerShell занимает всего пять строк и требуют всего лишь знания программирования на уровне школьных уроков информатики. В настоящей статье мы рассмотрим типовые задачи администрирования Active Directory, и их автоматизацию с помощью PowerShell.

    P.S. Статья рассчитана на полных, или почти полных «чайников», пару раз видевших или где-то слышавших о PowerShell. На звание Терминатора не претендую, по сему просьба ногами не пинать.

     

    Общие положения

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

    В первую очередь, необходимо заметить, что для того, чтобы все нормально работало – необходимо иметь хотя бы один контроллер домена Windows Server 2008 R2 с установленной компонентой ActiveDirectory Web Services. Увы и ах, Windows Server 2003 уходит на свалку истории. Для работы с модулем ad_powershell необходимо установить Remote Server Administration Tools, его так же можно установить на рабочем компьютере и запускать скрипты оттуда. Разумеется, ОС на компьютере должна быть не ниже Windows 7. На контроллерах домена Windows Server 2008 R2 необходимые компоненты уже установлены.
    Перед тем, как выполнять скрипты – необходимо установить политику выполнения скриптов. По умолчанию, в целях безопасности включена политика Restricted, что означает, что на данном компьютере вообще запрещен запуск любых PowerShell-скриптов. О том, какие еще бывают политики выполнения – можно почитать в мануале:

    Get-Help Set-ExecutionPolicy –Detailed

    В нашем случае я рекомендую установить политику RemoteSigned, что позволит запускать любые собственноручно написанные скрипты, при этом запуск скриптов, скачанных из Интернета будет возможен только при наличии цифровой подписи с доверенным сертификатом. Запустите оболочку PowerShell с правами администратора (Run as Administrator) и выполните команду

    Set-ExecutionPolicy RemoteSigned

    Можно так же выбрать политику Unrestricted, что вообще позволит запускать любой скрипт, независимо от того, откуда он взялся – но я делать этого не рекомендую из соображений безопасности.

    Теперь можно проверить работу скриптов – написать простейший скрипт «Hello World!». Я предпочитаю пользоваться PowerShell ISE, хотя можно писать и в простейшем Notepad’е. PowerShell ISE – удобная среда програмирования для PowerShell с возможностью отладки. Входит в состав ОС Wondows 7 и 2008 R2. Вобщем, рекомендую.

    image

    Теперь переходим непосредственно к автоматизации. Для того, чтобы создать объекты в Active Directory, или изменить какие-либо свойства, нам необходим список объектов со всеми необходимыми параметрами. Например, список пользователей может содержать следующие парамеры: Имя, Фамилия, Логин, Пароль. Проще всего для этого использовать CSV-файл. CSV – это текстовый файл, содержащий список объектов (например – пользователей), с разделением параметров каким-либо символом (как правило, это запятая «,», хотя может быть и точка с запятой, знак табуляции и т.д.). Каждый объект обозначается одной строчкой. Так же, первая строчка может содержать список параметров.

     

    Пример:

     

    Name;Surname;Login;Password

    Ivan,Ivanov;i.ivanov;p@ssw0rd1

    Petr,Petrov;p.petrov;p@ssw0rd2

    Sidor;Sidorov;s.sidorov;p@ssw0rd3

     

    Чтобы получить список объектов из CSV-файла, используется командлет Import-CSV:

    $Users = Import-CSV “c:\temp\users.csv”

    Такой файл можно создать и в блокноте, но проще всего будет использовать Microsoft Excel. В Excel необходимо при сохранении файла выбрать формат CSV. Интересно, что Excel при сохранении в формат CSV в качестве разделителя использует знак “;”, хотя вроде бы написано «CSV (разделители – запятые)». PowerShell же по умолчанию считает, что в качестве разделителя используется запятая («,»). Чтобы наш скрипт работал корректно – необходимо либо заменить в CSV-файле все точки с запятой на запятые (используя автозамену в блокноте) либо же, что на мой взгляд правильнее – указать в скрипте использовать точку с запятой в качестве разделителя:

    $Users = Import-CSV “c:\temp\users.csv” –Delimiter “;”

    Чтобы проверить, как прошел импорт – можно посмотреть, что хранится в переменной $Users.

    image

    Как видим, в переменной $Users теперь хранится массив объектов с параметрами Name, Surname, Login, Password. Эти параметры можно использовать для создания учетных записей пользователей в AD.

    Прежде чем приступить к работе с Active Directory, необходимо произвести импорт соответствующего модуля в PowerShell. Только после этого появятся команды для работы с AD:

    Import-Module ActiveDirectory

    Эту строку можно (и даже нужно) вставлять в начало всех скриптов – чтобы не вводить эту команду вручную.

     

    Создание учетных записей пользователей

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

    Для нашего примера, в качестве списка пользователей будем брать CSV-файл со следующими полями:

     

    • Name – имя пользователя
    • Surname – фамилия пользователя
    • Password – пароль
    • OU – организационное подразделение, где будет находиться пользователь (вида Contoso_Users/Fin/Accounting)

     

    Вначале нам нужно импортировать пользователей из списка:

    $Users = Import-CSV $1 –Delimiter “;”

    Параметр $1 означает, что в качестве пути к CSV-файлу будет использоваться первый по счету параметр командной строки. Запускаться скрипт будет следующим образом:

    PS C:\Users\admin > Add_Users.ps1 c:\temp\users.csv

    Далее нам нужно пройтись по всему массиву пользователей из списка:

    Foreach($CurrentUser in $Users) {

    Знак открытой фигурной скобки означает начало цикла. Этот цикл проходит по всем объектам списка, и прискаивает текущий объект переменной $CurrentUser.

    Затем, для упрощения – присвоим значения соответствующих полей отдельным переменным:

     

    $Name = $CurrentUser.Name

    $Surname = $CurrentUser.Surname

    $Password = $CurrentUser.Password

    $OU = $CurrentUser.OU

     

    Для того, чтобы задать пароль пользователю – необходимо перевести его в шифрованный формат SecureString:

    $SecurePwd = ConvertTo-SecureString -AsPlainText -Force -String $Password

    Так же, OU нам нужно перевести в формат, соответствующий стандарту LDAP (для примера выше: “OU=Accounting,OU= Fin,OU= Contoso_Users,DC=contoso,DC=com”).

     

    Для этого вначале разделим строку $OU на отдельные составляющие:

    $OUTmp = $OU –Split “/”

     

    В результате переменная $OUTmp будет содержать массив из всех элементов пути:

    PS C:\Users\admin> $OUTmp

    Contoso_Users

    Fin

    Accounting

     

    Далее, используя командлет Foreach-Object, получим из нашего массива первую часть LDAP-пути:

     

    $Path = “” #незабудьте проинициализировать переменную!

    $OUTmp | ForEach-Object {$Path = "OU=$_," + $Path}

     

    В переменной $Path появляется первая часть LDAP-пути:

     

    PS C:\Users\admin> $Path

    OU=Accounting,OU=Fin,OU=Contoso_Users,

     

    Теперь нам нужно получить полный путь, добавив к пути домен:

     

    $Path += “DC=contoso,DC=com”

    Получили полный LDAP-путь:

    PS C:\Users\admin> $Path

    OU=Accounting,OU=Fin,OU=Contoso_Users,DC=contoso,DC=com

     

    Теперь сформируем дисплейное имя пользователя, его логин, User Principal Name.

     

    $Login = $Name[0] + “.” + $Surname #логин формируется из первой буквы имени и фамилии, например: i.ivanov

    $Displayname = $Name + “ “ + $Surname #Дисплейное имя: Ivan Ivanov

    $UserPrincipalName = $Login + “@contoso.com

     

    Наконец, можно перейти к самой главной процедуре: созданию учетной записи пользователя.

     

    New-ADUser $Displayname –SamAccountName $Login –UserPrincipalName $UserPrincipalName -DisplayName $DisplayName -AccountPassword $SecurePwd -ChangePasswordAtLogon 1 -Path $Path

    Здесь, в принципе, все параметры понятны. Параметр -ChangePasswordAtLogon 1 означает, что пользователю будет предложено сменить пароль сразу после логина.

    По умолчанию в PowerShell, в отличие от стандартного визарда в оснастке ActiveDirectory Users And Computers учетные записи только что созданных пользователей будут отключены (Disabled). Поэтому сразу после создания учетные записи нужно включить:

    Enable-ADAccount $Login

    Теперь нужно закрыть цикл знаком «}». Можно сохранять скрипт и пробовать.

    Готовый скрипт будет выглядеть следующим образом:

     

    Import-Module ActiveDirectory

    $Users = Import-CSV $1 –Delimiter “;”

    Foreach($CurrentUser in $Users) {

    $Name = $CurrentUser.Name

    $Surname = $CurrentUser.Surname

    $Password = $CurrentUser.Password

    $OU = $CurrentUser.OU

    $SecurePwd = ConvertTo-SecureString -AsPlainText -Force -String $Password

    $OUTmp = $OU –Split “/”

    $Path = “” #незабудьте проинициализировать переменную!

    $OUTmp | ForEach-Object {$Path = "OU=$_," + $Path}

    $Path += “DC=contoso,DC=com”

    $Login = $Name[0] + “.” + $Surname

    $Displayname = $Name + “ “ + $Surname #в кавычках – пробел!

    $UserPrincipalName = $Login + “@contoso.com”

    New-ADUser $Displayname –SamAccountName $Login –UserPrincipalName $UserPrincipalName -DisplayName $DisplayName -AccountPassword $SecurePwd -ChangePasswordAtLogon 1 -Path $Path

    Enable-ADAccount $Login

    }

     

    Создание учетных записей компьютеров

    Как известно, для работы с Active Directory перво-наперво необходимо вводить компьютеры в домен. Сделать это можно двумя способами:

    · Мышкой – самый известный способ, через «Свойства» «Моего компьютера». Легко и просто.

    · Командой netdom join. Тоже несложно, и можно использовать в скриптах.

    У первого способа есть существенный недостаток: учетные записи компьютеров создаются в дефолтном OU Computers. В организациях же, как правило имеются разные OU для разных типов компьютеров (сервер, десктоп, ноутбук), а так же отдельные OU для разных отделов/департаментов/и т.д., с различными групповыми политиками, действующими для разных OU. Поэтому после ввода компьютеров в домен необходимо переносить учетные записи компьютеров вручную в соответствующий OU, а затем перезагружать компьютер еще раз, чтобы на нем применились все необходимые политики. При использовании команды netdom можно указать нужное OU, но набирать все это с клавиатуры – та еще задачка, особенно – когда компьютеров много, и особенно, что часто бывают – задачку эту поручают простым эникейщикам. Где-то в какой-то букве обязательно ошибется.

    Самый лучший выход из этой ситуации – создать учетные записи компьютеров заранее, в соответствующих OU. Тогда компьютер сразу после ввода в домен и перезагрузки применит все соответствующие политики.

    Разумеется, учетные записи компьютеров, как и пользователей, можно создавать и вручную. Но, поскольку мы – админы, а не эникейщики – будем использовать PowerShell.

    Для учетных записей, как и для компьютеров, используем CSV-файл

    ComputerName;OU

    Server1;Cnotoso_Computers/Servers

    Server2;Cnotoso_Computers/Servers

    Desktop1;Cnotoso_Computers/Desktops

    Desktop2;Cnotoso_Computers/Desktops

    Desktop3;Cnotoso_Computers/Desktops

    Laptop1;Cnotoso_Computers/Laptops

     

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

     

    Import-Module ActiveDirectory

    $Computers = Import-CSV $1 –Delimiter “;”

    Foreach($CurrentComputer in $Computers) {

    $ComputerName = $CurrentComputer.ComputerName

    $OU = $CurrentComputer.OU

    $OUTmp = $OU –Split “/”

    $Path = “” #незабудьте проинициализировать переменную!

    $OUTmp | ForEach-Object {$Path = "OU=$_," + $Path}

    $Path += “DC=contoso,DC=com”

    New-ADComputer –Name $ComputerName –Path $Path

    }

     

    Массовый сброс паролей

    Иногда бывает необходимо массово сбросить пароли у множества пользователей.

    Структура CSV-файла:

    • Login – логин пользователя
    • NewPassword – новый пароль

    Import-Module ActiveDirectory

    $Users = Import-CSV $1 –Delimiter “;”

    Foreach($CurrentUser in $Users) {

    $Login = $CurrentUser.Login

    $NewPassword = $CurrentUser.NewPassword

    $SecurePwd = ConvertTo-SecureString -AsPlainText -Force -String $Password

    Set-ADAccountPassword –Identity $Login –Reset –NewPassword $SecurePwd

    }

     

    Массовое изменение параметров

    Допустим, в вашей организации были приняты новые корпоративные стандарты, которые требуют, чтобы у каждого пользователя в AD были указаны, помимо всего остального: адрес электронной почты, номер мобильного телефона, название организации, должность. Из отдела кадров вам прислали табличку со следующими полями:

     

    • Имя
    • Фамилия
    • E-Mail
    • Телефон
    • Организация (у компании несколько юр.лиц)
    • Должность

     

    Из нее мы создаем CSV-файл с полями:

     

    • Name
    • Surname
    • E-Mail
    • Phone
    • Organization
    • JobTitle

     

    Скрипт будет следующего вида:

     

    Import-Module ActiveDirectory

    $Users = Import-CSV $1 –Delimiter “;”

    Foreach($CurrentUser in $Users) {

    $Name = $CurrentUser.Name

    $Surname = $CurrentUser.Surname

    $Email = $CurrentUser.E-Mail

    $Phone = $CurrentUser.Phone

    $Organization = $CurrentUser.Organization

    $JobTitle = $CurrentUser.JobTitle

    $Login = (Get-ADuser –Filter {GivenName –eq $Name –and Surname –eq $Surname}).SamAccountName #ищем юзера с заданным именем и фамилией и возвращаем его логин

    Set-ADUser $Login –EmailAddress $Email –MobilePhone $Phone –Company $Organization –Title $JobTitle

    }

     

    Заключение

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

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

    Например:

     

    • Добавить обработку ошибок (например, если пользователь с таким именем уже существует, или наоборот – не существует) – конструкции типа try… catch…
    • Автоматическую генерацию паролей заданной длины и сложности
    • Вывод логинов с автоматически сгенерированными праолями для только что созданных учетных записей в CSV-файл – командлет Export-CSV

     

    Ресурсы

    Эти ресурсы очень сильно помогут в изучении PowerShell. Во всяком случае мне они помогли.

    Надеюсь, эта статья была вам полезна, и кто-то, кто раньше боялся консоли – перестанет ее бояться. Улыбка

    Александр Косивченко

  • Главная Windows, Без рубрики, Новое PowerShell, Windows 2008 R2
    • Эволюция ntbackup в wbadmin

      backupgСтарая истина – “бэкапы не нужны до того времени пока они не понадобятся” актуальна всегда и постоянно. Со времен Windows NT для архивации и восстановления использовалась утилита NTBackup. Проблем с ней не возникало и она верой и правдой служила долгие годы. Настройки были просты и производились как в графическом интерфейсе так и в командной строке. Синтаксис был простой, наприме для того что бы выполнить бэкап System State (состояния системы) достаточно было воспользоваться командой: NTBACKUP backup systemstate /f “D:\Backup\SystemState-backup.bkf”

    • Главная Windows, Без рубрики, Новое IIS, Windows 2008 R2, Windows Server 2008
      • Установка и первоначальная настройка Joomla на Windows Web Server 2008

        Итак, почему Web Server 2008? Все очень просто, во-первых,  Web Server 2008 содержит роль  (IIS 7.0) необходимую для корректной работы Joomla. Во-вторых,  Internet Information Services 7 – это безопасная, управляемая и расширяемая платформа для веб-сайтов. На одном сервере с IIS можно устанавливать ASP.NET и PHP веб-приложения.  В третьих, IIS бесплатен, в редакции Windows Web Server 2008 не требуются лицензии клиентского доступа (лицензия требуется только на сервер). В четвертых, на нем могут работать самые распространенные  веб-приложения, и их довольно-таки много, это WordPress, Drupal, Moodle, nopCommerce, DotNetNuke Community, Wiki и другие. Легкость и быстрота установки, надежность и защищенность – все это говорит в пользу использования IIS.

      • Главная Security, Windows, Без рубрики, Новое Active Directory, Security, Windows 2008 R2
        • Проектирования Инфраструктуры Открытых Ключей. Часть 1

          keyБезопасность сети формируется из комплекса элементов, один из важнейших – инфраструктура открытых ключей. Теоретические основы проектирования PKI [1] рассматривается в этой статье. Полагаю, что всем хорошо известно: внедрение инфраструктуры открытых ключей все чаще   становится насущной необходимостью огромного числа компаний.

        • Главная Exchange/UC, Windows, Без рубрики, Новое Active Directory, Exchange 2007, Exchange 2010, Windows 2008 R2
          • Exchange Server 2010: Быстрый старт

            logo1111

            Продолжаю делать “гамбуреры”,  на этот раз  новое видео рассказывает о том как с 0 установить почтовый сервер Exchange 2010. Мануалов по нажатиям клавиш “Enter” в интернете достаточно, но я пошел другим путем. Постарался дать готовое решение. Я прекрасно понимаю, что 50 минут очень мало даже для экскурсного знакомства с данным продуктом. Но все же я постарался вложить в это время тот прожиточный минимум, который должен убрать панику от слова Exchange  у людей не знакомых с данным продуктом. На мой взгляд основные концепции для успешного старта я дал.

          • Главная Networks, Windows, Без рубрики, Новое Active Directory, Windows 2008 R2
            • Вопросы по Active Directory + Ответы

              logo Нашел в себе силы написать ответы на вопросы. Старался как можно полнее и яснее ответить на эти вопросы. Но сами понимаете, это достаточно трудно, да и если все детально описывать, то получится очередной resource kit. Пытался больше сосредоточиться на вопросах связанных с логикой работы AD, на другие вопросы предоставил ссылки в конце статьи. Большинство решений по вопросам проверены на практике или на стендах, на другие отвечал с использованием теории или логики. Будем верить, что теория не врет. По неясным вопросам готов пояснить дополнительно в комментариях («Истина рождается в споре»).

            • Главная Virtualization, Windows, Без рубрики, Новое Virtualization, Windows 2008 R2
              • Мобильная виртуализация (Часть третья. Virtual Server 2005)

                logo Хотелось бы отметить , что данная статья предназначена в основном для тренеров MCT. Но, в общем она будет полезна энтузиастам которые будут устанавливать Virtual Server 2005 на платформу Windows 2008R2.

              • Главная Virtualization, Windows, Без рубрики, Новое Hyper-V, Windows 2008 R2, Windows 7
                • Мобильная виртуализация. (Часть вторая. Virtualization Software (Hyper-V))

                  141181 После того, как Вы приобрели оборудование, описанное в моей первой статье (Мобильная виртуализация. Hardware), перед нами встает задача его конфигурирования. Будем исходить из того, что ноутбук, как правило, продается уже с предустановленной операционной системой и голографической наклейкой на задней части, подтверждающей легитимность её использования, поэтому трогать текущую операционную систему не будем. Мы также будем исходить из предположения, что «родной» операционной системой являются Windows Vista или Windows 7.

                • Главная Windows, Без рубрики, Новое Active Directory, Windows 2008 R2, Windows 7
                  • Group Policy: Основы. Часть 2

                    logo_thumb[2]

                    Продолжаем разговор о групповых политиках. Вторая часть доклада, посвященного основам групповых политик. В ней слушатели продолжают знакомиться с базовыми теоретическими понятиями, необходимыми для управления компьютерами в домене Active Directory. Обе части ориентированы на людей не работавших до этого с групповыми политиками, либо имеющих пробелы в знаниях по данному вопросу.

                    • Сравнение редакций SharePoint или Какая редакция мне подойдет?

                      microsoft_sharepoint

                      В недрах российского Microsoft (силами нашего автора – Николая Муравлянникова) недавно локализовали краткое сравнение по функциональности SharePoint разных редакций. Приводим этот документ.

                      Существует два выпуска SharePoint – Foundation и SharePoint Server. В свою очередь на сервере SharePoint может быть разрешена только функциональность, покрываемая лицензией Standard или расширенная функциональность Enterprise. С точки зрения лицензирования это определяется лицензиями клиентского доступа а не серверным продуктом. На сервер просто включается та или иная функциональность.