В этой статье, я покажу как можно управлять и обеспечивать защиту Active Directory, используя PowerShell. Я рассмотрю самые полезные командлеты PowerShell и приведу примеры их использования.
Создание новых пользователей Active Directory
Командлет New-ADUser предназначен для создания новых пользователей AD. По желанию Вы можете указать где создать нового пользователя с параметром -Path. В примере ниже, новый пользователь будет создан в Accounts Organizational Unit (OU). The -Server параметр так же является необязательным. Он используется для определения, на каком контроллере домена (DC) будет создан новый пользователь. Имейте ввиду, что вы не можете указывать незашифрованный пароль в -AccountPassword parameter. Вы должны преобразовать его в безопасную строку с помощью командлета ConvertTo-SecureString.
New-ADUser -DisplayName:"Russell Smith" -GivenName:"Russell" -Name:"Russell Smith" -Path:"OU=Accounts,DC=ad,DC=contoso,DC=com" -SamAccountName:"russellsmith" -Server:"dc1.ad.contoso.com" -Surname:"Smith" -Type:"user" -AccountPassword (ConvertTo-SecureString Pas$W0rd!!11 -AsPlainText -Force) -Enabled $true
Создание группы Active Directory
Добавление групп в AD просто с помощью командлета New-ADGroup. -Server и -Path параментры являются необязательными.
New-ADGroup -GroupCategory:"Security" -GroupScope:"Global" -Name:"Netwrix" -Path:"OU=Accounts,DC=ad,DC=contoso,DC=com" -SamAccountName:"Netwrix" -Server:"dc1.ad.co
Добавление пользователей в группы
Когда у Вас будут пользователи и группы на Вашем домене, Вы можете добавлять пользователей в группы командлетом Add-ADGroupMember.
Add-ADGroupMember -Identity Netwrix -Members russellsmith,bob.trent
Создание новой организационной единицы (OU — Organizational Unit)
Используйте командлет New-ADOrganizationalUni для того, чтобы создать новую организационную единицу в AD. Обратите внимание, что флаг -ProtectedFromAccidentalDeletion является необязательным. Если установлено значение $ true, вы не можете удалить OU, не изменив сначала состояние флага на $ false.
New-ADOrganizationalUnit -Name:"Sensitive" -Path:"OU=Accounts,DC=ad,DC=contoso,DC=com" -ProtectedFromAccidentalDeletion:$true -Server:"dc1.ad.contoso.com"
Удаление объектов Active Directory
Глагол ‘remove’ (удалить) используется в командлете AD для удаления объектов. Remove-ADUser и Remove-ADGroup используются для удаления пользователей и групп соответственно.
Remove-ADUser -Identity russellsmith Remove-ADGroup -Identity Netwrix
Прежде чем вы сможете удалить OU, необходимо установить флаг случайного удаления в false с помощью Set-ADObject.
Set-ADObject -Identity:"OU=Sensitive,OU=Accounts,DC=ad,DC=contoso,DC=com" -ProtectedFromAccidentalDeletion:$false -Server:"dc1.ad.contoso.com" Remove-ADOrganizationalUnit -Identity "OU=Sensitive,OU=Accounts,DC=ad,DC=contoso,DC=com"
Импорт пользователей из файла CSV
PowerShell позволяет легко автоматизировать задачи. В приведенном ниже сценарии я использую текстовый файл с разделителями-запятыми (CSV) для создания двух пользователей с помощью командлетов Import-Csv и New-ADUser. Единственная хитрость заключается в разделении первого поля каждой записи в текстовом файле, чтобы можно было разделить имена и фамилии для параметров -GiveName и -Surname командлета New-ADUser.
Import-Csv -Path c:\temp\users.csv | ForEach-Object { $givenName = $_.name.split()[0] $surname = $_.name.split()[1] New-ADUser -Name $_.name -Enabled $true –GivenName $givenName –Surname $surname -Accountpassword (ConvertTo-SecureString $_.password -AsPlainText -Force) -ChangePasswordAtLogon $true -SamAccountName $_.samaccountname –UserPrincipalName ($_.samaccountname+”@ad.contoso.com”) -City $_.city -Department $_.department }
Первая строка в текстовом файле содержит в себе имена полей. Вы можете добавить пользователей так много, как Вам нужно.
Перемещение объектов AD
Командет Move-ADObject предназначен для перемещения объектов AD. В примере ниже, я перемещаю учетную запись пользователя из Accounts OU в Users container.
Move-ADObject -Identity "CN=Russell Smith,OU=Accounts,DC=ad,DC=contoso,DC=com" -TargetPath "CN=Users,DC=ad,DC=contoso,DC=com"
Связать объект групповой политики
Хотя PowerShell нельзя использовать для создания объектов групповой политики (GPO), его можно использовать для выполнения других задач, связанных с групповой политикой. Командлет New-GPLink используется для связи существующих GPOs и OUs. В примере ниже, Я связываю GPO под названием Параметры брандмауэра с аккаунтами OU.
New-GPLink -Name "Firewall Settings" -Target "OU=Accounts,DC=ad,DC=contoso,DC=com" -LinkEnabled Yes -Enforced Yes
Отчеты Active Directory
Командлет Get-ADObject можно использовать для фильтрации directory и отображения информации об объектах. В приведенном ниже примере, я использую фильтр, чтобы найти аккаунты OU, и затем передать результаты в командлет Get-GPInheritence. Затем Select-Object используется для извлечения информации о объектах групповой политики, связанных с OU.
Get-ADObject -Filter {name -like "Accounts*"} | Get-GPInheritance | Select-Object -Expand gpolinks | ForEach-Object {Get-GPO -Guid $_.gpoid}
Одна из самых полезных командлетов для администраторов AD это Search-ADAccount командлет.
В примере ниже, я выполняю поиск заблокированных учетных записей пользователей в домене и автоматически разблокирую их с помощью Unlock-ADAccount.
Search-ADAccount –LockedOut | Unlock-ADAccount
Get-ADObject может использоваться со сложными фильтрами. Здесь я перечисляю все объекты, созданные после указанной даты ($ Date).
$Date = [Datetime]"02/07/2019" Get-ADObject -Filter 'WhenCreated -GT $Date'
Фильтры могут быть довольно сложными. В следующей команде я перечислю все удаленные объекты, у которых атрибут изменения более поздний, чем указанная дата, и который можно восстановить, за исключением Deleted Objects container.
Get-ADObject -Filter 'whenChanged -gt $Date -and isDeleted -eq $True -and name -ne "Deleted Objects"' -IncludeDeletedObjects
И последнее, я использую Get-EventLog для поиска в журналах событий на каждом контроллере домена (DC – Domain Controller) идентификатора события входа 4624. Обратите внимание на использование Get-ADDomainController для возврата всех DCs в домене. Получив необходимую информацию, я использую Write-Host для записи вывода в окно терминала с информацией, разделенной вкладками для лучшей читабельности.
$DCs = Get-ADDomainController -Filter * $startDate = (get-date).AddDays(-1) foreach ($DC in $DCs){ $slogonevents = Get-Eventlog -LogName Security -ComputerName $DC.Hostname -after $startDate | Where-Object {$_.eventID -eq 4624 }} foreach ($e in $slogonevents){ if (($e.EventID -eq 4624 ) -and ($e.ReplacementStrings[8] -eq 2)){ write-host "Type: Local Logon`tDate: "$e.TimeGenerated "`tStatus: Success`tUser: "$e.ReplacementStrings[5] "`tWorkstation: "$e.ReplacementStrings[11] } if (($e.EventID -eq 4624 ) -and ($e.ReplacementStrings[8] -eq 10)){ write-host "Type: Remote Logon`tDate: "$e.TimeGenerated "`tStatus: Success`tUser: "$e.ReplacementStrings[5] "`tWorkstation: "$e.ReplacementStrings[11] "`tIP Address: "$e.ReplacementStrings[18] }}