Работа PowerShell с Active Directory
Используя командлеты можно выполнять все традиционные операции в Active Directory — создавать, удалять, изменять, просматривать свойства объектов, перемещать, переименовывать и восстанавливать объекты, управлять группами, ролями FSMO, доменами и лесами, настраивать политики и многое другое. Хотя нужно отметить, что первое время в PS было мягко говоря мало командлетов для работы с Active Directory. Вся работа через ADSI работающий на достаточно низком уровне, путем опроса пространства имен «System.DirectoryServices» .NET Framework (подробнее
Зададим путь к контейнеру и просмотрим его свойства:
PS> $path = [ADSI]"LDAP://OU=testOU,DC=testdomain,DC=local" PS> $path | Format-List * |
Чтобы создать новый объект следует ввести:
PS> $user = $path.Create('user', 'cn= demo') |
И так далее. Выглядит довольно сложно. В состав Windows 2008 входит утилита ADSI Edit, которая упрощает поиск параметров для написания сценариев, в других версиях ОС ее необходимо устанавливать самостоятельно.
В новых ОС Windows 2008R2 и Windows 7 доступен ADPowershell (Active Directory Module for Windows PowerShell), командлеты которые имеют достаточно простой синтаксис. И более того Active Directory Administrative Center (ADAC) полностью реализован на PowerShell 2.0 и ADPowershell.
Чтобы ADPowershell установить в Windows 7, следует инсталлировать RSAT (Microsoft Remote Server Administration Tools,
PS> Add-WindowsFeature -Name "RSAT-AD-PowerShell" –IncludeAllSubFeature |
Кроме этого появились командлеты для работы с Active Directory сторонних разработчиков. Очень популярны AD PowerShell cmdlets (их еще называют QAD cmdlets) разработанные Quest Software, которые можно свободно скачать по адресу (
Так имена командлетов составлены из стандартной пары «действие-объект». На первой позиции стоят все те же английские глаголы — Get-, Set-, New-, Move-, Remove-, Rename- и так далее, на второй — описание объекта с префиксом QAD (-QADUser, -QADComputer, -QADGroup, -QADObject). Получить список QAD командлетов достаточно просто:
PS> Get-QCommand |
QAD командлеты понадобятся также в случае использования некоторых GUI к PowerShell в которых имеется функция для работы с ActiveDirectory.
Но есть минус, так как эти командлеты не входят в состав ОС и не поддерживается Microsoft, для их работы необходимо обязательное присутствие соответствующего провайдера. Учитывая, что пока новых ОС от Microsoft в природе нет, а парк машин может быть разным, в дальнейших примерах будем использовать командлеты QAD, как более универсальные. Если работает под обычной учетной записью, подключимся к КД как админ:
PS> $pw = read-host "Enter password" -AsSecureString *********** PS> Сonnect-QADService -service 'localhost' -proxy -ConnectionAccount 'testdomain\administrator' -ConnectionPassword $pw |
Для начала получим список пользователей и затем компьютеров:
PS> Get-QADUser | Get-Member PS> Get-QADComputer |
Все просто. Что узнать информацию по отдельному пользователю и параметру, просто подставляем его в вызов:
PS> Get-ADUser Vasja -Properties ManagedObjects |
Теперь просмотрим список пользователей, которые не регистрировались 2 месяца и сохраним в HTML файл для отчета:
PS> $last2months = (Get-Date).AddMonths(-2) PS> Get-QADUser -IncludedProperties LastLogon | where { $_.lastLogon -le $last2months} | Select DisplayName, LastLogon, AccountIsDisabled | ?{-not $_.AccountIsDisabled} | ConvertTo-Html | Out-File c:\report.html |
Чтобы в список не попали отключенные учетные записи, в команде проконтролировали значение AccountIsDisabled. Но следует учитывать, что атрибут LastLogon не реплицируется между контроллерами домена, поэтому если в сети их несколько, то это значение следует получить с каждого контроллера домена. Получим список контроллеров домена и затем опросим каждый на предмет LastLogon:
PS> Get-QADComputer -ComputerRole DomainController | foreach { (Get-QADUser -Service $_.Name -SamAccountName username).LastLogon.Value } |
Знак «?» является алиасом «Where-Object», специальная переменная «$_», которая часто используется в скриптах PS, указывает на текущий объект.
Например, выберем всех пользователей из отдела Sales проживающих в Москве, и укажем для них новый номер телефона.
PS> Get-QADUser -City Moscow -Department Sales | Set-QADUser -PhoneNumber ‘495-1111111’ |
Создадим новую доменную учетную запись.
PS> New-QADUser -name 'user' -ParentContainer 'OU=testOU,DC=testdomain,DC=local' -UserPassword 'P@ssword' |
Чтобы отключить, включить или разблокировать Unlock-QADUser учетную запись следует использовать командлеты Disable-QADUser и Enable-QADUser соответственно. Как видишь все достаточно просто. Также просто создавать и новые объекты:
PS> New-QADObject -type OrganizationUnit -ParentContainer teststomain.local -Name NewOU |
Теперь переместим в созданный контейнер ряд учетных записей:
PS> Get-QADUser -Department Sales | Move-QADObject -To testsdomain.local/Sales |
Управление группами выглядит аналогично:
Get-QADGroupMember Scorpio\Managers | where { $_.City -eq ‘Ekaterinburg’} | Add-QADGroupMember Scorpio\Ekaterinburg_Managers |
Экспериментируя с PowerShell можно запросто ошибиться, поэтому при изменении объектов AD лучше запустить выполение с ключем «-whatif» (что если). В этом случае вместо действительного изменения параметром, скрипт выведет в консоль все, что он должен был сделать. Очень удобно.
Понравилась статья? Оставьте комментарий или подпишитесь на RSS рассылку.
Комментарии
Комментариев пока что нет
Оставить комментарий