PowerShell

Самые полезные командлеты PowerShell для управления и защиты Active Directory

В этой статье, я покажу как можно управлять и обеспечивать защиту 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]
 }}

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.