Назад | Перейти на главную страницу

Отслеживание корпоративных компьютеров

Часть моей работы состоит в том, чтобы убедиться, что для компьютеров в определенном OU, что действительно используется = то, что указано в AD = что указано в SCCM. Это для среды с 250 000 компьютеров, но меня особенно интересуют 70 000 для одного отдела. Сравнивать AD с SCCM довольно легко, но сложнее отслеживать компьютеры, которых на самом деле не существует. Я пытаюсь придумать творческие способы понять это.

мой вопрос: будет ли хороший способ найти несуществующие машины для запроса AD с помощью Powershell для компьютеров, которые не входили в систему в течение X дней?

Я думал о гораздо более сложной задаче в PowerShell, а именно: получить имена dnshost из AD Ping всех хостов в моем OU и для успеха удалить их из списка. Запускайте это, скажем, каждые 6 часов в течение недели, продолжая удалять машины, у которых был успешный ping. Ноутбуками мне пришлось бы обращаться по-другому.

Есть другие идеи, предложения и т. Д.?

В качестве варианта исчерпывающего предложения Патрика я бы использовал LastLogontimeStamp атрибут для сужения поиска:

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-what-it-was-designed-for-and-how-it-works.aspx

Объект AD компьютеров имеет отметку времени LastLogon, которая дает полезный индикатор текущего состояния компьютера.

Если вы можете установить командлеты третьей стороны, тогда Квест Active Directory командлеты невероятно полезны.

$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 дней, то это машины, которые не входили в систему в течение этого периода. Это хорошо работает для больших сетей с несколькими DC, поскольку этот рисунок повторяется там, где нет lastLogon.

Просто измените строку в приведенном выше скрипте, чтобы удалить .lastLogon и заменить ее на .whenChanged.

Если вы не можете установить Quest AD, вам нужно будет использовать компьютер с установленным RSAT (или DC) и использовать командлет Get-ADComputer (введите Import-Module ActiveDirectory).

Третий вариант отслеживания будущего использования - это использование сценария входа в систему. Я делал это у клиентов несколько лет назад, и это сработало хорошо, хотя мы были на паре сотен машин, а не на ~ 70К.

В то время нашим сценарием входа в систему был файл .BAT. Создайте новый .BAT в NETLOGON со следующей строкой (например, LogonTrack.BAT)

::LogonTrack.BAT
ECHO %date% >Z:\%computername%

и в конце любого пакетного файла входа в систему, который может использоваться вашими 70K пользователями, добавьте строку

call LogonTrack.BAT

Это создает файл с именем компьютера, а дата файла - это последний вход в систему в сопоставленном месте.

Я бы не рекомендовал это, но вы можете проверять журналы событий для получения этой информации, хотя я обычно избегаю погружения в журнал, где это возможно. Вам понадобится Событие 4624.

Наконец, я также использую LANSweeper у клиентов, и это здорово. Это отличный отчет о старых компьютерах. Однако как платный продукт, требующий отдельной установки и сервера, он может вам не подойти. Кроме того, для систем 250K вам понадобится довольно мощный сервер, а не перепрофилированная виртуальная машина, которая валяется.

Похоже, вам нужно что-то вроде oldcmp: http://www.joeware.net/freetools/tools/oldcmp/

Это ищет в указанном домене или организационном подразделении машины, которые не вошли в систему в течение последнего Икс дней, и предоставляет вам отчеты или возможность отключить эти учетные записи компьютеров.

Инструмент и представление в Active Directory представляют только то, о чем знает домен, поэтому вам все равно нужно создать процесс отчетности. внешний в среду Active Directory, чтобы вы могли отслеживать машины, которые сообщают, что они не использовались для проверки, что они действительно покинули организацию и должны быть удалены. Ярким примером здесь являются ноутбуки: инструменты могут сообщать о том, что ноутбук не используется, хотя на самом деле это скрывает тот факт, что ноутбук просто используется в автономном режиме.

Доступны аналогичные подходы с использованием отчетов в SCCM для исследования времени, когда машина в последний раз могла дать импульс; при условии, что на машинах есть работающие клиенты SCCM, это, возможно, было бы лучше, чем создание отчета и попытка проверки связи с ними - метод, который был бы невероятно трудоемким и подверженным ложноположительным результатам.