Ресурсы для ИТ-профессионалов > Форумы > Форумы Серверные ОС Windows > Scripting Languages > Вывести список неактивных пользователей и ПК в одном сайте AD
Задайте вопросЗадайте вопрос
 

ОтвеченоВывести список неактивных пользователей и ПК в одном сайте AD

Ответы

  • 27 января 2010 г. 12:03s.h.s. Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     ОтвеченоС кодом

    Атрибут LastLogon является нереплицируемым атрибутом. Если вы хотите использовать этот атрибут в скрипте, то вам надо опрашивать каждый из имеющихся DC, иначе рискуете что-то пропустить.
    Вместо этого атрибута можно использовать другой: lastLogonTimestamp. Этот атрибут реплицируется, но не чаще чем раз в две недели. Поэтому если вы используете этот атрибут, то погрешность вашего скрипта будет больше, но зато вы можете обращаться к любому DC.

    Я делал так:

    ####################################################
    # FindOldUsers ShS 20090430
    #
    # Поиск неиспользуемых учетных записей пользователей в домене
    ####################################################
    cls
    # Зададим количество дней, прошедших с последнего логона
    $LastLogon = (get-date).AddDays(-60).ToFileTime()
    #
    #Определим LDAP-фильтр для запроса
    $Filter = "(&(objectCategory=person)(objectcategory=user)(|(lastLogonTimestamp<=$LastLogon)(!(lastLogonTimestamp=*))))"
    #Выполним запрос
    Get-QADUser -ldapFilter $Filter -IncludedProperties lastLogonTimestamp | 
    Select Name, dn, lastLogonTimestamp, AccountIsDisabled  |?{-not $_.AccountIsDisabled} |Sort-Object Name |ft -AutoSize
    • Помечено в качестве ответаvna345 28 января 2010 г. 7:20
    •  
  • 27 января 2010 г. 13:07s.h.s. Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     ОтвеченоС кодом

    Для поиска старых компьютеров можно использовать аналогичный скрипт:

    ####################################################
    # FindOldComps.ps1 ShS 20090430
    #
    # Поиск неиспользуемых учетных записей компьютеров в домене
    ####################################################
    cls
    # Зададим количество дней, прошедших с последнего логона
    $LastLogon = (get-date).AddDays(-60).ToFileTime()
    #
    #Определим LDAP-фильтр для запроса
    $Filter = "(&(objectcategory=computer)(|(lastLogonTimestamp<=$LastLogon)(!(lastLogonTimestamp=*))))"
    #Выполним запрос, отберем только учетки, у которых
    Get-QADComputer -ldapFilter $Filter -IncludedProperties pwdLastSet, useraccountcontrol | 
    Select Name, pwdLastSet, Description, @{Name="Disabled"; Exp={$_.useraccountcontrol -band 2}}, dn |?{$_.Disabled -eq 0} |Sort-Object pwdLastSet |ft -AutoSize


    Отследить, как давно компьютер не выполнял логон, можно так же, проверив, как давно он не менял свой пароль (атрибут pwdLastSet). поэтому я решил его вывести в результаты работы скрипта.
    • Помечено в качестве ответаvna345 28 января 2010 г. 7:20
    •  
  • 27 января 2010 г. 14:20Sazonov ILYA [ sie ]MVP, МодераторМедали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     Отвечено
    Можно использовать оснастку ADUC для получения списка "старых" учеток. 

    Создаете новый запрос и там на первой же вкладке внизу "Days since last logon"....

    Полученный список можно экспортировать.... :-)


    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    • Помечено в качестве ответаvna345 28 января 2010 г. 7:20
    •  

Все ответы

  • 27 января 2010 г. 12:03s.h.s. Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     ОтвеченоС кодом

    Атрибут LastLogon является нереплицируемым атрибутом. Если вы хотите использовать этот атрибут в скрипте, то вам надо опрашивать каждый из имеющихся DC, иначе рискуете что-то пропустить.
    Вместо этого атрибута можно использовать другой: lastLogonTimestamp. Этот атрибут реплицируется, но не чаще чем раз в две недели. Поэтому если вы используете этот атрибут, то погрешность вашего скрипта будет больше, но зато вы можете обращаться к любому DC.

    Я делал так:

    ####################################################
    # FindOldUsers ShS 20090430
    #
    # Поиск неиспользуемых учетных записей пользователей в домене
    ####################################################
    cls
    # Зададим количество дней, прошедших с последнего логона
    $LastLogon = (get-date).AddDays(-60).ToFileTime()
    #
    #Определим LDAP-фильтр для запроса
    $Filter = "(&(objectCategory=person)(objectcategory=user)(|(lastLogonTimestamp<=$LastLogon)(!(lastLogonTimestamp=*))))"
    #Выполним запрос
    Get-QADUser -ldapFilter $Filter -IncludedProperties lastLogonTimestamp | 
    Select Name, dn, lastLogonTimestamp, AccountIsDisabled  |?{-not $_.AccountIsDisabled} |Sort-Object Name |ft -AutoSize
    • Помечено в качестве ответаvna345 28 января 2010 г. 7:20
    •  
  • 27 января 2010 г. 12:18s.h.s. Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     
    да, чуть не забыл, вам, придется немного модифицировать скрипт, добавив к командлету Get-QADUser параметр -SearchRoot и указав нужное OU
  • 27 января 2010 г. 13:07s.h.s. Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     ОтвеченоС кодом

    Для поиска старых компьютеров можно использовать аналогичный скрипт:

    ####################################################
    # FindOldComps.ps1 ShS 20090430
    #
    # Поиск неиспользуемых учетных записей компьютеров в домене
    ####################################################
    cls
    # Зададим количество дней, прошедших с последнего логона
    $LastLogon = (get-date).AddDays(-60).ToFileTime()
    #
    #Определим LDAP-фильтр для запроса
    $Filter = "(&(objectcategory=computer)(|(lastLogonTimestamp<=$LastLogon)(!(lastLogonTimestamp=*))))"
    #Выполним запрос, отберем только учетки, у которых
    Get-QADComputer -ldapFilter $Filter -IncludedProperties pwdLastSet, useraccountcontrol | 
    Select Name, pwdLastSet, Description, @{Name="Disabled"; Exp={$_.useraccountcontrol -band 2}}, dn |?{$_.Disabled -eq 0} |Sort-Object pwdLastSet |ft -AutoSize


    Отследить, как давно компьютер не выполнял логон, можно так же, проверив, как давно он не менял свой пароль (атрибут pwdLastSet). поэтому я решил его вывести в результаты работы скрипта.
    • Помечено в качестве ответаvna345 28 января 2010 г. 7:20
    •  
  • 27 января 2010 г. 14:20Sazonov ILYA [ sie ]MVP, МодераторМедали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     Отвечено
    Можно использовать оснастку ADUC для получения списка "старых" учеток. 

    Создаете новый запрос и там на первой же вкладке внизу "Days since last logon"....

    Полученный список можно экспортировать.... :-)


    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    • Помечено в качестве ответаvna345 28 января 2010 г. 7:20
    •  
  • 27 января 2010 г. 14:32s.h.s. Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     
    Можно использовать оснастку ADUC для получения списка "старых" учеток. 

    Создаете новый запрос и там на первой же вкладке внизу "Days since last logon"....

    Полученный список можно экспортировать.... :-)


    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/

    Век живи - век учись. Спасибо Илья. Даже не подозревал о существовании такой возможности.
    А какой атрибут  использует ADUC для получения старых учеток? (в справке не нашел, но есть подозрение, что lastLogonTimestamp)
  • 28 января 2010 г. 7:20vna345 Медали пользователяМедали пользователяМедали пользователяМедали пользователяМедали пользователя
     
    Спасибо за помощь!