Часть моей работы — убедиться, что для компьютеров в определенном OU то, что фактически используется = то, что указано в AD = то, что указано в SCCM. Это для среды с 250 тыс. ПК, но меня особенно интересуют 70 тыс. одного отдела. Довольно легко сравнить AD с SCCM, но сложнее отслеживать компьютеры, которых на самом деле не существует. Я пытаюсь придумать креативные способы выяснить это.
У меня такой вопрос: будет ли хорошим способом найти несуществующие машины, чтобы запросить AD с помощью PowerShell для компьютеров, которые не входили в систему в течение X дней?
Я думал о гораздо более сложной задаче в PowerShell следующим образом: вытащить dnshostnames из AD, пинговать все хосты в моем OU и в случае успеха удалить их из списка. Запускать это, скажем, каждые 6 часов в течение недели, продолжая удалять машины, которые имели успешный пинг. С ноутбуками мне придется обращаться по-другому.
Есть ли еще идеи, предложения и т.п.?
решение1
В качестве вариации всеобъемлющего предложения Патрика я бы использовал LastLogontimeStamp
атрибут replicated для сужения поиска:
Import-Module ActiveDirectory
$threshold = (Get-Date).AddDays(-44)
$computers Get-ADComputer -Filter * -SearchBase "ou=desiredou,dc=domain,dc=tld" -Properties LastLogontimeStamp
$oldComps = $computers | where {[Date.Time]::FromFileTime($_.lastlogontimestamp) -lt $threshold}
$oldComps
затем будут заблокированы все компьютеры, с которых не производился вход в систему в течение как минимум 30 дней.
Это немного нелогично с порогом в 44 дня, но для предотвращения потока обновлений репликации в LastLogontimeStamp
атрибут обновляется только в том случае, если его значение старше 9 дней. Если значение устарело на 9–14 дней, случайный процесс определяет, обновлять его или нет.
Вот прекрасное объяснение:http://blogs.technet.com/b/askds/archive/2009/04/15/the-lastlogontimestamp-attribute-для-чего-он-был-разработан-и-как-он-работает.aspx
решение2
Похоже, вам нужно что-то вродестарыйcmp:http://www.joeware.net/freetools/tools/oldcmp/
Это позволяет выполнить поиск в указанном домене или организационной единице для машин, которые не входили в систему в течение последнегоИксдней и предоставляет вам возможность создавать отчеты или отключать учетные записи этих компьютеров.
Инструмент и представление в Active Directory отображают только то, о чем знает домен, поэтому вам все равно нужно построить процесс отчетности.внешнийв среду Active Directory, чтобы вы могли отслеживать машины, которые сообщают, что не использовались, чтобы убедиться, что они действительно покинули организацию и должны быть удалены. Ярким примером здесь являются ноутбуки: инструменты могут сообщать о ноутбуке как о неиспользуемом, когда на самом деле это скрывает тот факт, что ноутбук просто используется в автономном режиме.
Аналогичные подходы доступны с использованием отчетов в SCCM для исследования времени, когда машина в последний раз могла подавать сигналы; при условии, что у машин есть работающие клиенты SCCM, это, возможно, будет лучшим подходом, чем извлечение отчета и попытка отправить им запрос — метод, который был бы невероятно трудоемким и подверженным ложным положительным результатам.
решение3
Объект AD компьютера имеет метку времени LastLogon, которая дает вам полезный индикатор текущего состояния компьютера.
Если вы можете установить сторонние командлеты, тоАктивный каталог QuestКомандлеты невероятно полезны.
$result = @()
$OU = "DC=ncp,DC=co,DC=uk"
Foreach($computer in (Get-QADComputer -SearchRoot "$ou" -sizelimit 0))
{
$result += "$((Get-QADComputer $computer -IncludeAllProperties).lastLogon), $computer"
}
$result выведет список всех ваших компьютеров в указанном OU и дату их последнего входа в систему, например:
06/10/2013 08:48:25, NATTHN21$
05/13/2011 14:54:04, NATTHN02$
06/10/2013 08:42:51, NATRHN01$
06/10/2013 08:45:38, NCPHON01$
Вам нужно будет запустить это на всех контроллерах домена, на которых этот компьютер может войти. Для организации вашего размера это, вероятно, непрактично.
В качестве альтернативной меры. Свойство объекта 'whenChanged' на объектах AD вашего компьютера — это пароль учетной записи компьютера. Он автоматически обновляется через 30 дней (обычно по умолчанию в Win 2K и более поздних версиях. Проверка объекта групповой политики домена по умолчанию может подтвердить это).
Если вы найдете учетные записи компьютеров, где 'whenChanged' старше 30 дней, то это машины, которые не входили в систему в этот период. Это хорошо работает для больших сетей с несколькими ЦОД, поскольку эта цифра реплицируется, а 'lastLogon' — нет.
Просто измените строку в скрипте выше, удалив «.lastLogon» и заменив его на «.whenChanged».
Если вам не удается установить Quest AD, вам придется использовать машину с установленным RSAT (или контроллер домена) и использовать командлет Get-ADComputer (введите «Import-Module ActiveDirectory»).
Третий вариант отслеживания будущего использования — использовать сценарий входа. Я делал это у клиентов несколько лет назад, и это работало хорошо, хотя у нас было несколько сотен машин, а не ~70К.
В то время наш скрипт входа был .BAT-файлом. Создайте новый .BAT в NETLOGON со следующей строкой (например, LogonTrack.BAT)
::LogonTrack.BAT
ECHO %date% >Z:\%computername%
и в конце любого файла командной строки входа, который может использоваться вашими 70 тыс. пользователями, добавьте строку
call LogonTrack.BAT
Это создаст файл с именем компьютера, а дата файла будет соответствовать последнему входу в систему в сопоставленном месте.
Я бы не рекомендовал этого, но вы можете проверить журналы событий на наличие этой информации, хотя я обычно избегаю погружения в журналы, где это возможно. Вам понадобитсяСобытие 4624.
Наконец, я также используюLANSweeperна клиентах, что здорово. У него отличная отчетность по старым компьютерам. Однако как платный продукт, требующий отдельной установки и сервера, он может быть вам не очень полезен. Плюс для систем на 250 тыс. вам понадобится довольно мощный бэкэнд, а не перепрофилированная виртуальная машина, которая валялась без дела.