Powershell – наводим порядок в группах доступа


Когда в инфраструктуре существует несколько лесов, то при настройке доступа к ресурсам нужно придерживаться простого правила: к ресурсу привязывается локальная группа, в которую включаются глобальные группы с пользователями из разных доменов/лесов.

Если этот принцип нарушен, и к ресурсу привязана глобальная группа, то невозможно в нее включить «чужих» пользователей и дать им доступ к ресурсу. Когда администратору надо срочно дать доступ к ресурсу пользователям из другого леса, то обычно в такой ситуации он преобразует глобальную группу в универсальную, затем в локальную и тут же добавляет в нее учетку, т.к. создание глобальной группы в другом лесе может потребовать дополнительных усилий: жалко времени, либо нужно привлечь другого администратора, провести согласование и утверждение и т.д.

Время идет, и инфраструктура засоряется такими мелочами по самую крышу. В один прекрасный момент все понимают, что нужно навести порядок с группами. Искать проблемные группы вручную и тем более вручную переносить пользователей из одной группы в другую это слишком трудоемко. Ниже описано, как использовать для этой задачи Powershell.

Получить список всех локальных групп (в текущем домене):

$LGs = Get-ADGroup -LDAPFilter «(&(&(&(objectCategory=group)(objectClass=group)(grouptype=-2147483644))))»

Получить список групп, у которых в членах группы есть пользователи:

$LGs1 = $LGs | ? { Get-ADGroupMember $_ | ? {$_.ObjectClass -eq «user»} }

Вывести список для анализа:

$LGs1 | % { $_.Name} | sort

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

Скопировать пользователей из одной группы в другую:

Get-ADGroupMember «имя группы ОТкуда» | ? {$_.ObjectClass -eq «user»} | % { Add-ADGroupMember «имя группы КУДА» -Server «TO.domain.ru» -Members $_ -ErrorAction SilentlyContinue }

Здесь:

· «имя группы ОТкуда» — одна из локальных групп найденных выше

· «TO.domain.ru» — соответствующая ей глобальная группа в домене, к которому относятся копируемые пользователи

· -ErrorAction SilentlyContinue помогает нам избежать явной фильтрации учетных записей пользователей: только учетки «того» леса могут быть добавлены в глобальную группу «того же» леса — остальные просто отсеются.

Легкой вам уборки мусора!

Powershell – Поиск неиспользуемых учетных записей компьютеров


При поиске неиспользуемых учетных записей пользователей удобно использовать оснастку ADUC. Достаточно создать запрос и получить список:

clip_image001

Но вот для учетных записей компьютеров этот способ не реализован в ADUC. Более того неудобно даже создавать запрос в формате LDAP, т.к. для атрибута LastLogon требуется указывать дату в системном формате.

Что ж используем простой скрипт Powershell для поиска учетных записей компьютеров, которые не логинились 60 и более дней:

$time = (get-date).AddDays(-60)

Get-ADComputer -Filter {LastLogon -lt $time} -Properties LastLogon |

select-object Name,@{Name=»LastLogon»; Expression={[DateTime]::FromFileTime($_.lastLogon)}} |

export-csv OldComputers.csv -notypeinformation

Результаты записываются в файл и могут быть загружены в Excel для анализа или могут быть использованы сразу для дальнейшей обработки. Например, можно запретить учетные записи командлетом Disable-ADAccount или/и переместить в другой контейнер командлетом Move-ADObject.

Некоторые проблемы Split DNS


Если вы собираетесь внедрить или уже внедрили Split DNS в своей ИТ-инфраструктуре, то перед вами стоит задача следить за непротиворечивостью DNS-записей на внутренних и внешних DNS серверах.

Читать далее