[РЕШЕНО] Как получить список не активных пользователей из AD (нужен скрипт powershell)

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
Ответить
[РЕШЕНО] Как получить список не активных пользователей из AD (нужен скрипт powershell)
нашел решение на powershell:

$LastLogonDate= (Get-Date).AddDays(-180)
Get-ADUser -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate }  -SearchBase ‘OU=Companies,dc=mydomain,dc=local’| ?{$_.Enabled –eq $True} |  Sort LastLogonTimeStamp| FT Name, @{N='lastlogontimestamp'; E={[DateTime]::FromFileTime($_.lastlogontimestamp)}} -AutoSize | export-csv C:\inactive_Users.csv

Следующий скрипт позволит выбрать включенные (незаблокированные) учетные записи пользователей, которые не авторизовались в домене более полугода (180 дней) с помощью командлета Get-ADUser.

Но мне бы хотелось расширить данный скрипт:
1. Как пройтись по всему AD а не по конретной OU
2. Как вывести расположение найденых пользователей.
( Пытался делать через: get-aduser -filter { DistinguishedName -notlike .... но такая конструкция не работает! )
3. Как переместить всех найденых пользователей в определенную OU
РЕШЕНИЕ:

Пример 1:

$DaysInactive = 180
$InactiveDate = (Get-Date).AddDays(-$DaysInactive)

Get-ADUser -Filter {(Enabled -eq $true) -and (LastLogonTimeStamp -lt $InactiveDate) -and (SamAccountName -ne 'IUSR_SERVER')} -Properties LastLogonTimeStamp, SamAccountName, DistinguishedName |
Where-Object {$_.DistinguishedName -notlike '*CN=Monitoring Mailboxes*' } |
Select-Object SamAccountName, Name, @{Name='LastLogonDate'; Expression={[DateTime]::FromFileTime($_.LastLogonTimestamp).ToString('MM-dd-yyyy')}},DistinguishedName |
Sort-Object LastLogonTimeStamp

Этот скрипт предназначен для поиска неактивных пользователей в Active Directory, которые не входили в систему в течение указанного периода времени (в данном случае 180 дней).

Сначала задается переменная $DaysInactive, которая устанавливает период неактивности в днях. Затем создается переменная $InactiveDate, которая содержит дату, которая наступила $DaysInactive дней назад.

Далее выполняется запрос к Active Directory с помощью командлета Get-ADUser, который фильтрует пользователей по следующим условиям:

Enabled - пользователь должен быть включен в системе;
LastLogonTimeStamp - время последнего входа в систему должно быть раньше $InactiveDate, то есть пользователь должен быть неактивен в течение периода, заданного в $DaysInactive;
SamAccountName - не равно IUSR_SERVER, чтобы исключить специального пользователя IUSR_SERVER, который используется IIS.
Затем выполняется фильтрация полученных данных с помощью командлета Where-Object. В данном случае, скрипт исключает из результатов пользователей, у которых DistinguishedName содержит строку "CN=Monitoring Mailboxes".

Это ответ на вопрос почему нельзя использовать:  DistinguishedName -notlike "*CN=*"
"The wildcard character"*" is allowed, except when the<AD Attribute> is a DN attribute. Examples of DN attributes aredistinguishedName, manager, directReports, member, and memberOf. If the attribute is DN, then only the equality operator is allowed and you must specify the full distinguished name for the value (or the"*" character for all objects with any value for the attribute). Do not enclose the DN value in parentheses (as is done erroneously in some documentation).

Далее с помощью командлета Select-Object определяются свойства пользователей, которые будут включены в вывод. В этом случае выбираются SamAccountName, Name, DistinguishedName и создается новый атрибут LastLogonDate с помощью выражения, которое преобразует LastLogonTimestamp в формат MM-dd-yyyy.

Наконец, команда Sort-Object сортирует результаты по времени последнего входа в систему (LastLogonTimestamp) в порядке возрастания.


ПРИМЕР2 если хотите переместить:

$DaysInactive = 180
$InactiveDate = (Get-Date).AddDays(-$DaysInactive)

# Получение пользователя по имени
$usersToMove = Get-ADUser -Filter {(Enabled -eq $true) -and (LastLogonTimeStamp -lt $InactiveDate) -and (SamAccountName -ne 'IUSR_SERVER')} -Properties LastLogonTimeStamp, SamAccountName, DistinguishedName |
Where-Object {$_.DistinguishedName -notlike '*CN=Monitoring Mailboxes*' } |
Select-Object SamAccountName, Name, @{Name='LastLogonDate'; Expression={[DateTime]::FromFileTime($_.LastLogonTimestamp).ToString('MM-dd-yyyy')}},DistinguishedName |
Sort-Object LastLogonDate

# Перемещаем пользователей
$targetOU = "OU=inactive,OU=Companies,DC=mydomain,DC=local"
foreach ($user in $usersToMove) {
   Move-ADObject -Identity $user.DistinguishedName -TargetPath $targetOU -WhatIf
}

Примечание: я добавил флаг -WhatIf в конец команды Move-ADObject, чтобы проверить, что все сработает правильно. Убедитесь, что все пользователи отображаются в списке, прежде чем удалить -WhatIf и запустить код.
Услуги Системного Администратора - Работаю только с Юр. Лицами по договору обслуживания.
Страницы: 1
Ответить
Форма ответов
Текст сообщения*
:) ;) :D 8-) :( :| :cry: :evil: :o :oops: :{} :?: :!: :idea:
Защита от автоматических сообщений. Введите символы, изображенные на этой картинке в поле ввода &quote;Код подтверждения&quote;.