Поиск и сообщение о неактивных учетных записях Active Directory
Среда Active Directory не может существовать без устаревших учетных записей. Хотя Active Directory может содержать миллионы активных и неактивных объектов, это не обязательно означает, что вам не нужен процесс, который поможет вам идентифицировать неактивные (устаревшие) учетные записи. В этой статье мы поможем вам понять проблемы и способы сбора устаревших учетных записей пользователей и компьютеров из вашей среды Active Directory с помощью сценариев PowerShell.
Устаревшие учетные записи в вашем Active Directory
Каждая Active Directory будет иметь устаревшие учетные записи. Давайте рассмотрим некоторые из основных причин, которые приводят к устаревшим учетным записям в среде Active Directory.
- Когда компьютер переименовывается и контроллер домена AD недоступен для удаления предыдущей учетной записи компьютера в базе данных Active Directory, старая учетная запись компьютера останется в базе данных AD. Если операции переименования происходят довольно часто, это приведет к сотням устаревших учетных записей компьютеров.
- У вас будут устаревшие учетные записи пользователей и компьютеров, если вы перенесли свою среду и не удалили старые учетные записи компьютеров и пользователей.
- Всякий раз, когда сотрудник покидает организацию, его или ее учетная запись пользователя остается в Active Directory, если у вас нет процесса, который позаботится о перемещении или удалении учетной записи из базы данных Active Directory.
Как собрать устаревшие учетные записи с помощью PowerShell
Microsoft предоставляет необходимые командлеты PowerShell, которые можно использовать для простого сбора устаревшей информации об учетных записях из Active Directory. Вы можете использовать командлеты PowerShell Get-ADComputer и Search-ADAccount для сбора устаревших учетных записей.
Сценарий 1. Сбор устаревших учетных записей компьютеров
Вы можете использовать приведенный ниже сценарий PowerShell для сбора устаревших учетных записей компьютеров из каждого домена в лесу Active Directory. Обязательно измените имя леса Active Directory в переменной $CurForestName в скрипте. Сценарий создает отчет CSV в файле C:TempStaleCompAccounts.CSV. Сценарий соберет имя компьютера, SamAccountName, DistinguishedName и версию операционной системы.
### Сценарий начинается здесь ###
$GDomList = "C:TempDomList.DPC"
Remove-item $GDomList -ErrorAction SilentlyContinue
$TestCSVFile = "C:TempStaleCompAccounts.CSV"
Remove-item $TestCSVFile -ErrorAction SilentlyContinue
$ThisString="Computer Name, SamAccountName, DistinguishedName, OperatingSystem, In AD Domain"
Add-Content "$TestCSVFile" $ThisString
$CurForestName = "TechGenix.com"
$R=Get-ADForest $CurForestName
ForEach ($DomName in $R.Domains)
{
Add-Content $GDomList $DomName
}
$TotNo=0
$ItemCount=0
$TestText = ""
$TestStatus=""
$SumVal = ""
$DaysInactive = 90
$time = (Get-Date).Adddays(-($DaysInactive))
ForEach ($ThisDomain in Get-Content "$GDomList")
{
$CompsInactiveCount=Get-ADComputer -Filter {LastLogonTimeStamp -lt $time} -ResultPageSize 2000 -resultSetSize $null -Server $ThisDomain -Properties Name,OperatingSystem,SamAccountName,DistinguishedName
IF ($Error.count -eq 0)
{
}
else
{
$ErrorOrNot="Yes"
}
IF ($ErrorOrNot -eq "Yes")
{
$TestText = "Please check to make sure a Domain Controller is reachable to execute AD Test."
$SumVal = ""
$TestStatus="Error executing Dynamic Pack."
}
else
{
$Items = $CompsInactiveCount
$ItemCount=$CompsInactiveCount.Count
$FinalText = ""
$SumVal=$ItemCount
ForEach ($ThisItem in $Items)
{
$TotNo++
}
$FinalVal="Total Stale Computers: ["+$TotNo+"]"+",,,,"+$ThisDomain
Add-Content "$TestCSVFile" $FinalVal
$TotSrv=0
ForEach ($ThisItem in $Items)
{
IF ($ThisItem.OperatingSystem -like "*Server*")
{
$TotSrv++
}
}
$FinalVal="Total Stale Servers: ["+$TotSrv+"]"+",,,,"+$ThisDomain
Add-Content "$TestCSVFile" $FinalVal
ForEach ($ThisItem in $Items)
{
$FinalVal=$ThisItem.Name+","+$ThisItem.SamAccountName+","+"""+$ThisItem.DistinguishedName+"""+","+$ThisItem.OperatingSystem+","+$ThisDomain
Add-Content "$TestCSVFile" $FinalVal
}
IF ($TotNo -ge 500)
{
$TestText = "More than 500 Stale computer accounts were found in AD Domains. Please load and check result."
$TestStatus="High"
$SumVal = $TotNo
}
else
{
$TestText = "Less than 500 Stale computer accounts were found in AD Domains. Please load and check result."
$TestStatus="Low"
$SumVal = $TotNo
}
IF ($TotNo -eq 0)
{
$TestText = "No Stale computers were found in Active Directory forest."
$TestStatus="Passed"
$SumVal = $TotNo
}
}
}
$STR = $ADTestName +","+$TestStartTime+","+$TestStatus+","+$SumVal +","+$TestText
### Сценарий заканчивается здесь ###
Сценарий 2: Сбор устаревших учетных записей пользователей
Вы можете использовать приведенный ниже сценарий PowerShell для сбора устаревших учетных записей пользователей из каждого домена в лесу Active Directory. Обязательно измените имя леса Active Directory в переменной $CurForestName в приведенном ниже сценарии. Скрипт создает отчет CSV в файле C:TempStaleUserAccounts.CSV. Сценарий соберет имя пользователя, SamAccountName и DistinguishedName устаревших учетных записей пользователей.
### Сценарий начинается здесь ###
$GDomList = "C:TempDomList.DPC"
Remove-item $GDomList -ErrorAction SilentlyContinue
$TestCSVFile = "C:TempStaleUserAccounts.CSV"
Remove-item $TestCSVFile -ErrorAction SilentlyContinue
$ThisString="User Name, SamAccountName, DistinguishedName, In AD Domain"
Add-Content "$TestCSVFile" $ThisString
$CurForestName = "TechGenix.com"
$R=Get-ADForest $CurForestName
ForEach ($DomName in $R.Domains)
{
Add-Content $GDomList $DomName
}
$TotNo=0
$ItemCount=0
$TestText = ""
$TestStatus=""
$SumVal = ""
ForEach ($ThisDomain in Get-Content "$GDomList")
{
$UsersInactiveAccountList=Search-ADAccount -Server $ThisDomain -AccountInactive -TimeSpan 90.00:00:00 -ResultPageSize 2000 -resultSetSize $null | ?{$_.enabled -eq $true} | Select-Object Name, SamAccountName, DistinguishedName
IF ($Error.count -eq 0)
{
}
else
{
$ErrorOrNot="Yes"
}
IF ($ErrorOrNot -eq "Yes")
{
$TestText = "Please check to make sure a Domain Controller is reachable to execute Dynamic Pack."
$SumVal = ""
$TestStatus="Error executing Dynamic Pack."
}
else
{
$Items = $UsersInactiveAccountList
$ItemCount=$UsersInactiveAccountList.Count
$FinalText = ""
$SumVal=$ItemCount
ForEach ($ThisItem in $Items)
{
$TotNo++
}
$FinalVal="Total Stale User Accounts: ["+$TotNo+"]"+",,,"+$ThisDomain
Add-Content "$TestCSVFile" $FinalVal
ForEach ($ThisItem in $Items)
{
$FinalVal=$ThisItem.Name+","+$ThisItem.SamAccountName+","+"""+$ThisItem.DistinguishedName+"""+","+$ThisDomain
Add-Content "$TestCSVFile" $FinalVal
}
IF ($TotNo -ge 500)
{
$TestText = "More than 500 Stale user accounts were found in AD Domains. Please load and check result."
$TestStatus="High"
$SumVal = $TotNo
}
else
{
$TestText = "Less than 500 Stale user accounts were found in AD Domains. Please load and check result."
$TestStatus="Low"
$SumVal = $TotNo
}
IF ($TotNo -eq 0)
{
$TestText = "No Stale user accounts were found in AD Domains."
$TestStatus="Passed"
$SumVal = $TotNo
}
}
}
$STR = $ADTestName +","+$TestStartTime+","+$TestStatus+","+$SumVal +","+$TestText
### Сценарий заканчивается здесь ###
Оба сценария PowerShell входят в состав пакетов Dynamic Pack, поставляемых с профилировщиком работоспособности Active Directory. Если вы используете профилировщик работоспособности Active Directory, создайте профиль работоспособности, выберите лес Active Directory, добавьте в профиль работоспособности динамические пакеты «Тест устаревших учетных записей компьютеров домена» и «Тест устаревших учетных записей пользователей домена», а затем выполните профиль работоспособности. Active Directory Health Profiler соберет необходимую информацию и создаст отчет.
Обратите внимание, что с помощью приведенных выше сценариев PowerShell вы можете собирать устаревшие учетные записи и создавать отчет в файле CSV, но каждый раз, когда вам нужно собрать список устаревших учетных записей, вам потребуется запускать сценарии вручную. Стоит также упомянуть, что сценарии не предпринимают никаких действий при обнаружении устаревших учетных записей, таких как перемещение устаревших учетных записей в организационное подразделение, удаление устаревших учетных записей и т. д. Существует множество доступных инструментов, которые могут помочь вам автоматически собирать информацию и иметь генерируется отчет с гораздо более подробной информацией, а затем отчеты отправляются вам по электронной почте. Одним из продуктов, с которыми я столкнулся, является Netwrix Auditor for Active Directory. Netwrix Auditor for AD предоставляет аналитику безопасности о том, что происходит в Active Directory и групповой политике. Используйте эти данные, чтобы снизить риск злоупотребления привилегиями, подтвердить соответствие требованиям ИТ и упростить устранение неполадок.