Вертим логи как хотим ― анализ журналов в системах Windows
Пора поговорить про удобную работу с логами, тем более что в Windows есть масса неочевидных инструментов для этого. Например, Log Parser, который порой просто незаменим.
В статье не будет про серьезные вещи вроде Splunk и ELK (Elasticsearch + Logstash + Kibana). Сфокусируемся на простом и бесплатном.
Журналы и командная строка
До появления PowerShell можно было использовать такие утилиты cmd как find и findstr. Они вполне подходят для простой автоматизации. Например, когда мне понадобилось отлавливать ошибки в обмене 1С 7.7 я использовал в скриптах обмена простую команду:
Она позволяла получить в файле fail.txt все ошибки обмена. Но если было нужно что-то большее, вроде получения информации о предшествующей ошибке, то приходилось создавать монструозные скрипты с циклами for или использовать сторонние утилиты. По счастью, с появлением PowerShell эти проблемы ушли в прошлое.
Основным инструментом для работы с текстовыми журналами является командлет Get-Content, предназначенный для отображения содержимого текстового файла. Например, для вывода журнала сервиса WSUS в консоль можно использовать команду:
Для вывода последних строк журнала существует параметр Tail, который в паре с параметром Wait позволит смотреть за журналом в режиме онлайн. Посмотрим, как идет обновление системы командой:
Смотрим за ходом обновления Windows.
Если же нам нужно отловить в журналах определенные события, то поможет командлет Select-String, который позволяет отобразить только строки, подходящие под маску поиска. Посмотрим на последние блокировки Windows Firewall:
Смотрим, кто пытается пролезть на наш дедик.
При необходимости посмотреть в журнале строки перед и после нужной, можно использовать параметр Context. Например, для вывода трех строк после и трех строк перед ошибкой можно использовать команду:
Оба полезных командлета можно объединить. Например, для вывода строк с 45 по 75 из netlogon.log поможет команда:
Журналы системы ведутся в формате .evtx, и для работы с ними существуют отдельные командлеты. Для работы с классическими журналами («Приложение», «Система», и т.д.) используется Get-Eventlog. Этот командлет удобен, но не позволяет работать с остальными журналами приложений и служб. Для работы с любыми журналами, включая классические, существует более универсальный вариант ― Get-WinEvent. Остановимся на нем подробнее.
Для получения списка доступных системных журналов можно выполнить следующую команду:
Вывод доступных журналов и информации о них.
Для просмотра какого-то конкретного журнала нужно лишь добавить его имя. Для примера получим последние 20 записей из журнала System командой:
Последние записи в журнале System.
Для получения определенных событий удобнее всего использовать хэш-таблицы. Подробнее о работе с хэш-таблицами в PowerShell можно прочитать в материале Technet about_Hash_Tables.
Для примера получим все события из журнала System с кодом события 1 и 6013.
В случае если надо получить события определенного типа ― предупреждения или ошибки, ― нужно использовать фильтр по важности (Level). Возможны следующие значения:
- 0 ― всегда записывать;
- 1 ― критический;
- 2 ― ошибка;
- 3 ― предупреждение;
- 4 ― информация;
- 5 ― подробный (Verbose).
Собрать хэш-таблицу с несколькими значениями важности одной командой так просто не получится. Если мы хотим получить ошибки и предупреждения из системного журнала, можно воспользоваться дополнительной фильтрацией при помощи Where-Object:
Ошибки и предупреждения журнала System.
Аналогичным образом можно собирать таблицу, фильтруя непосредственно по тексту события и по времени.
Подробнее почитать про работу обоих командлетов для работы с системными журналами можно в документации PowerShell:
PowerShell ― механизм удобный и гибкий, но требует знания синтаксиса и для сложных условий и обработки большого количества файлов потребует написания полноценных скриптов. Но есть вариант обойтись всего-лишь SQL-запросами при помощи замечательного Log Parser.
Работаем с журналами посредством запросов SQL
Утилита Log Parser появилась на свет в начале «нулевых» и с тех пор успела обзавестись официальной графической оболочкой. Тем не менее актуальности своей она не потеряла и до сих пор остается для меня одним из самых любимых инструментов для анализа логов. Загрузить утилиту можно в Центре Загрузок Microsoft, графический интерфейс к ней ― в галерее Technet. О графическом интерфейсе чуть позже, начнем с самой утилиты.
О возможностях Log Parser уже рассказывалось в материале «LogParser — привычный взгляд на непривычные вещи», поэтому я начну с конкретных примеров.
Для начала разберемся с текстовыми файлами ― например, получим список подключений по RDP, заблокированных нашим фаерволом. Для получения такой информации вполне подойдет следующий SQL-запрос:
Посмотрим на результат:
Смотрим журнал Windows Firewall.
Разумеется, с полученной таблицей можно делать все что угодно ― сортировать, группировать. Насколько хватит фантазии и знания SQL.
Log Parser также прекрасно работает с множеством других источников. Например, посмотрим откуда пользователи подключались к нашему серверу по RDP.
Работать будем с журналом TerminalServices-LocalSessionManager\Operational.
Не со всеми журналами Log Parser работает просто так ― к некоторым он не может получить доступ. В нашем случае просто скопируем журнал из %SystemRoot%\System32\Winevt\Logs\Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx в %temp%\test.evtx.
Данные будем получать таким запросом:
Смотрим, кто и когда подключался к нашему серверу терминалов.
Особенно удобно использовать Log Parser для работы с большим количеством файлов журналов ― например, в IIS или Exchange. Благодаря возможностям SQL можно получать самую разную аналитическую информацию, вплоть до статистики версий IOS и Android, которые подключаются к вашему серверу.
В качестве примера посмотрим статистику количества писем по дням таким запросом:
Если в системе установлены Office Web Components, загрузить которые можно в Центре загрузки Microsoft, то на выходе можно получить красивую диаграмму.
Выполняем запрос и открываем получившуюся картинку…
Любуемся результатом.
Следует отметить, что после установки Log Parser в системе регистрируется COM-компонент MSUtil.LogQuery. Он позволяет делать запросы к движку утилиты не только через вызов LogParser.exe, но и при помощи любого другого привычного языка. В качестве примера приведу простой скрипт PowerShell, который выведет 20 наиболее объемных файлов на диске С.
Ознакомиться с документацией о работе компонента можно в материале Log Parser COM API Overview на портале SystemManager.ru.
Благодаря этой возможности для облегчения работы существует несколько утилит, представляющих из себя графическую оболочку для Log Parser. Платные рассматривать не буду, а вот бесплатную Log Parser Studio покажу.
Интерфейс Log Parser Studio.
Основной особенностью здесь является библиотека, которая позволяет держать все запросы в одном месте, без россыпи по папкам. Также сходу представлено множество готовых примеров, которые помогут разобраться с запросами.
Вторая особенность ― возможность экспорта запроса в скрипт PowerShell.
В качестве примера посмотрим, как будет работать выборка ящиков, отправляющих больше всего писем:
Выборка наиболее активных ящиков.
При этом можно выбрать куда больше типов журналов. Например, в «чистом» Log Parser существуют ограничения по типам входных данных, и отдельного типа для Exchange нет ― нужно самостоятельно вводить описания полей и пропуск заголовков. В Log Parser Studio нужные форматы уже готовы к использованию.
Помимо Log Parser, с логами можно работать и при помощи возможностей MS Excel, которые упоминались в материале «Excel вместо PowerShell». Но максимального удобства можно достичь, подготавливая первичный материал при помощи Log Parser с последующей обработкой его через Power Query в Excel.
Приходилось ли вам использовать какие-либо инструменты для перелопачивания логов? Поделитесь в комментариях.
logoff logoff
Область применения: Windows Server (половина ежегодного канала), Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012 Applies to: Windows Server (Semi-Annual Channel), Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012
Выполнит выход пользователя из сеанса на удаленный рабочий стол сервере узла сеансов и удалит сеанс. Logs off a user from a session on a Remote Desktop Session Host server and deletes the session.
Синтаксис Syntax
Параметры Parameters
Параметр Parameter | Описание Description |
---|---|
Указывает имя сеанса. Specifies the name of the session. Это должен быть активный сеанс. This must be an active session. | |
Указывает числовой идентификатор, определяющий сеанс на сервере. Specifies the numeric ID which identifies the session to the server. | |
/server: /server: | Указывает сервер узла сеансов удаленный рабочий стол, содержащий сеанс, для которого пользователь должен выйти из системы. Specifies the Remote Desktop Session Host server that contains the session whose user you want to log off. Если не указано, используется сервер, на котором активна в данный момент. If unspecified, the server on which you are currently active is used. |
/v /v | Отображает сведения о выполняемых действиях. Displays information about the actions being performed. |
/? /? | Отображение справки в командной строке. Displays help at the command prompt. |
Примечания Remarks
Вы всегда можете выйти из сеанса, к которому в данный момент выполнен вход. You can always log off yourself from the session to which you are currently logged on. Однако необходимо иметь разрешение « полный доступ» для выхода пользователей из других сеансов. You must, however, have Full Control permission to log off users from other sessions.
Выход пользователя из сеанса без предупреждения может привести к утрате данных в сеансе пользователя. Logging off a user from a session without warning can result in loss of data at the user’s session. Необходимо отправить пользователю сообщение с помощью команды MSG , чтобы предупредить пользователя перед выполнением этого действия. You should send a message to the user by using the msg command to warn the user before taking this action.
Если параметр или не указан, функция выхода из системы выполняет выход пользователя из текущего сеанса. If or isn’t specified, logoff logs the user off from the current session.
После выхода пользователя из системы все процессы завершаются, а сеанс удаляется с сервера. After you log off a user, all processes end and the session is deleted from the server.
Пользователь не может выйти из сеанса консоли. You can’t log off a user from the console session.
Примеры Examples
Для выхода пользователя из текущего сеанса введите: To log off a user from the current session, type:
Для выхода пользователя из сеанса с помощью идентификатора сеанса, например сеанса 12, введите: To log off a user from a session by using the session’s ID, for example session 12, type:
Для выхода пользователя из сеанса с использованием имени сеанса и сервера, например Session TERM04 на сервере Server1, введите: To log off a user from a session by using the name of the session and server, for example session TERM04 on Server1, type:
Отключение окна выбора пользователя и настройка автоматического входа в Windows 7
Введение
Экран выбора пользователя в Windows 7 может отображаться в нескольких случаях:
- При входе в систему, если не настроен автоматический вход
- При блокировке системы или смене пользователя
- При выходе из спящего режима или гибернации, либо при выходе из заставки
Третий пункт списка подробно рассматривается в статье После периода бездействия Windows 7 запрашивает пароль для продолжения работы. А в этой статье мы рассмотрим настройку автоматического входа в систему без выбора пользователя и ввода пароля.
Об автоматическом входе в систему
Автоматический вход в систему без ввода пароля удобен в том случае, если вы являетесь единственным пользователем компьютера, либо используете конкретную учетную запись значительно чаще, чем остальные. Настраивая автоматический вход в систему, необходимо понимать, что любой человек, включивший компьютер, беспрепятственно выполнит вход в систему и получит доступ ко всем файлам и параметрам используемой учетной записи. Настройка автоматического входа различается в зависимости от того, присоединен ли компьютер к домену.
Необходимые условия
Если в системе имеется всего одна активная учетная запись без пароля, она автоматически выполняет вход, поэтому дополнительная настройка не требуется. При наличии нескольких учетных записей автоматический вход в систему требует настройки, даже если ни одна из них не имеет пароля. Дополнительные «служебные» учетные записи могут добавляться в систему при установке различного программного обеспечения.
Для настройки автоматического входа в систему требуются права администратора. Процесс настройки практически не отличается от настройки в Windows XP или Windows Vista.
Компьютеры, не входящие в домен
Для компьютеров, не входящих в домен (например, домашних), настройку автоматического входа можно выполнить в графическом интерфейсе операционной системы.
- Нажмите сочетание клавиш «
+R«.
- В открывшемся окне Выполнить введите:
(не работает в Windows XP)
Нажмите Ввод. Откроется окно параметров учетных записей пользователей.
В окне Учетные записи пользователей щелкните в списке по нужному пользователю, снимите флажок Требовать ввод имени пользователя и пароля и нажмите ОК. Откроется окно Автоматический вход в систему.
Введите пароль и нажмите ОК.
Примечание. Если учетная запись не имеет пароля, оставьте поле Пароль пустым.
Настройка автоматического входа в систему завершена.
Автоматический вход в систему можно также настроить в системном реестре. Все необходимые параметры перечислены в таблице в следующем разделе статьи.
Компьютеры, входящие в домен
Для компьютеров, входящих в домен, необходимо указать имя домена по умолчанию, в который будет выполняться автоматический вход. В графическом интерфейсе операционной системы такой возможности нет, поэтому настройка автоматического входа выполняется в системном реестре.
- Нажмите сочетание клавиш «
+R«.
- В открывшемся окне Выполнить введите: и нажмите Ввод. Откроется редактор реестра.
- Перейдите в раздел:
- Настройте параметры реестра в соответствии с таблицей. Если параметр отсутствует, его необходимо создать.
Таблица 1 — Параметры автоматического входа в систему
Параметр (имя) | Тип | Значение | Описание |
AutoAdminLogon | Строковый (REG_SZ) | 1 | Автоматический вход в систему включен. |
DefaultUserName | Строковый (REG_SZ) | Имя пользователя | Имя пользователя, для которого настраивается автоматический вход в систему. |
DefaultPassword | Строковый (REG_SZ) | Пароль | Пароль пользователя, для которого настраивается автоматический вход в систему. |
DefaultDomainName | Строковый (REG_SZ) | Имя домена | Имя домена, в который выполняется вход. |
Первые три параметра в таблице можно использовать для настройки автоматического входа в систему на компьютерах, не входящих в домен.
Примечание для Windows 8.x/10. При использовании учетной записи Microsoft в значении параметра DefaultUserName указывается имя пользователя в виде «MicrosoftAccount\proverka@example.com», без кавычек.
Выбор пользователя при автоматическом входе
Если у Вас включен автоматический вход, но возникла необходимость войти под другой учетной записью, нажмите и удерживайте клавишу Shift при запуске Windows. Или нажмите Выйти из системы/Сменить пользователя в меню завершения работы и удерживайте клавишу Shift.
На смену пользователей при автоматическом входе также может влиять строковый параметр (REG_SZ) ForceAutoLogon в разделе реестра:
Параметр может принимать значения 1 (включен) и 0 (выключен). Его назначение состоит в том, чтобы обеспечивать постоянное присутствие пользователя в системе, если автоматический вход настроен и компьютер включен. Фактически включение этого параметра приводит к тому, что пользователь не может выйти из системы — после завершения сеанса вход тут же выполняется автоматически. Такое поведение предусмотрено для компьютеров, работающих в режиме киоска в общественном месте (например, библиотеке). Обойти его можно, только удерживая клавишу Shift при завершении сеанса.
Статья опубликована в рамках конкурса «Наш выбор — Windows 7!». Оригинальный стиль автора сохранен.