Недавно на работе мне было интересно, есть ли быстрая пакетная команда, которую я мог бы использовать, чтобы просмотреть некоторые выходные данные и быстро определить, кто был последним пользователем, который вошел в систему. У пользователей нет перемещаемых профилей, а локальные профили часто приходится восстанавливать вручную (я знаю, знаю, что работаю с сумасшедшими). Это означает загрузку WinPE на некоторых вышедших из строя компьютерах и предположение, что кто-то не работал здесь долгое время, и принятие решения о том, могу ли я удалить их отказ. Итак, я подумал посмотреть каталог профиля пользователя (%SYSTEMDRIVE%\Users
или %SYSTEMDRIVE%\Documents and Settings
, что там у вас). Очевидно, это было довольно неточно. Тогда я подумал, что NTUSER.DAT будет больше всего изменяться при каждом последовательном входе в систему. Могу я просто так на это посмотреть?
for /d %subdir in (*) do dir /ah %subdir\ntuser.dat | findstr /i "ntuser.dat > lastlogon.log
Обычно мне нужно делать это на заблокированном PE-образе без каких-либо инструментов. Есть предположения?
Вы должны взглянуть на LogParser утилита. LogParser был написан сотрудником Microsoft в свободное время. Это .exe, который может работать как отдельная утилита, не требуя «установки». Он даже будет запускаться при запуске из удаленного места, такого как \\server\share\logparser.exe
или из удаленного сеанса RDP как \\tsclient\c\path\to\logparser.exe
LogParser использует SQL-подобный синтаксис для запроса журналов событий Windows - даже удаленно! Он может сообщать результаты в виде хорошо отформатированных .txt, .csv, .xml или даже графических диаграмм. (Он может делать гораздо больше, чем просто запрашивать журналы событий, но это то, что вам нужно прямо сейчас ...). Попытайся:
logparser.exe -h examples
Это даст вам несколько примеров того, что вы можете с этим делать. В следующей строке будут выведены первые 5 (5 самых старых) событий из журнала событий приложения вашей рабочей станции:
logparser.exe "SELECT TOP 5 * FROM \\.\application"
Следующий запрос выведет 20 самых популярных событий из 3 разных журналов событий на 3 разных серверах:
Попробуйте (но напишите все в одной строке):
LogParser.exe
"SELECT TOP 20 *
FROM \\remoteserver1\Application, \\remote2\System,\\.\Security
ORDER by TimeGenerated DESC"
Он выведет результаты запроса в виде списка в окне cmd.exe в порядке убывания. По умолчанию после 10 строк вам будет предложено указать дополнительные данные. Да, и параметры командной строки даже не чувствительны к регистру, если вам больше нравится нижний регистр для более быстрого набора. Вот кое-что, что может помочь ваши текущие потребности. Снова введите его в одну строку:
logparser
"select top 50
timegenerated as logondate,
extract_token(message, 0, ':') as logevent,
extract_token(strings, 0, '|') as username,
extract_token(strings, 1, '|') as domain
from security
where eventid not in (541;542;543)
and eventtype = 8
and eventcategory = 2 order by timegenerated desc"
Добавить -rtp:-1
если вы хотите переопределить значение по умолчанию для 10
для строки для обработки, поэтому вам не будет предлагаться вводить дополнительные данные каждые 10 строк.
Будет легко поместить подходящий запрос парсера журнала в командный файл. LastLogins.bat
и храните это где-нибудь в своем %PATH%
...
Предостережения:
wmic.exe
утилита сможет добиться аналогичных результатов. Просто лог-анализатор - это мое личное предпочтение для подобных работ.