none
Скрипт удаления старых учетных записей RRS feed

  • Вопрос

  • Доброго времени суток!

    Подскажите пожалуйста, почему вот этот скрипт:

    Import-Module ActiveDirectory
    $then = (Get-Date).AddDays(-100)
    $comp = Get-ADComputer -Property Name,lastLogonDate -Filter {lastLogonDate -lt $then}
    $comp | Sort LastLogonDate | ft Name, LastLogonDate
    Write-host Найдено $comp.count компьютеров неактивных после $then
    If ((Read-Host "Запустить процедуру удаления? (y/n):") -eq 'y') {$comp| Remove-ADObject -Recursive -Confirm:$false}
    Read-Host "Выполнено. Для выхода нажмите Enter"

    Удалил все все учетки рабочих серверов, хотя они все в работе и не просрочены?

    11 апреля 2019 г. 15:28

Ответы

  • Параметр Filter преобразуется в фильтр LDAP, т.е., в сравнение некоего атрибута со строкой, содержащей дату, выведенную в том формате, в котором она отображается. А такое преобразование порядок сортировки дат отнюдь не сохраняет.

    Слава России!

    • Помечено в качестве ответа Rinat Moustafin 17 апреля 2019 г. 8:19
    11 апреля 2019 г. 16:30
  • в дополнение и вот эта конструкция выглядит не безопасно:

    $comp| Remove-ADObject -Recursive -Confirm:$false

    так как предположу что если $comp имеет пустое значение, то есть вероятность что remove-adobject пройдет и грохнет вообще все.

    я бы там foreach вкорячил на этот случай или if хотя бы с проверкой что $comp содержит хотя бы 1 не пустой элемент 

    комментарий M.V.V. можно обойти через | where вместо -Filter


    The opinion expressed by me is not an official position of Microsoft

    11 апреля 2019 г. 16:36
    Модератор

Все ответы

  • Параметр Filter преобразуется в фильтр LDAP, т.е., в сравнение некоего атрибута со строкой, содержащей дату, выведенную в том формате, в котором она отображается. А такое преобразование порядок сортировки дат отнюдь не сохраняет.

    Слава России!

    • Помечено в качестве ответа Rinat Moustafin 17 апреля 2019 г. 8:19
    11 апреля 2019 г. 16:30
  • в дополнение и вот эта конструкция выглядит не безопасно:

    $comp| Remove-ADObject -Recursive -Confirm:$false

    так как предположу что если $comp имеет пустое значение, то есть вероятность что remove-adobject пройдет и грохнет вообще все.

    я бы там foreach вкорячил на этот случай или if хотя бы с проверкой что $comp содержит хотя бы 1 не пустой элемент 

    комментарий M.V.V. можно обойти через | where вместо -Filter


    The opinion expressed by me is not an official position of Microsoft

    11 апреля 2019 г. 16:36
    Модератор