DSC Event Log

Как и большинство программного обеспечения Windows, DSC записывает всю информацию о событиях в журнал событий Windows, которые можно просматривать во многих приложениях, включая Event Viewer и PowerShell. DSC регистрирует эти события в журнале событий Microsoft-Windows-DSC, который имеет следующие каналы:

  • Microsoft-Windows-DSC/Operational

  • Microsoft-Windows-DSC/Debug

  • Microsoft-Windows-DSC/Analytic

Включение подробного ведения журнала

Каналы аналитики и отладки не включены по умолчанию и должны быть включены на каждом целевом узле, прежде чем в них будут записаны какие-либо события:

#enable analytic and debug DSC channels
wevtutil.exe set-log "Microsoft-Windows-Dsc/Analytic" /q:true /e:true
wevtutil.exe set-log "Microsoft-Windows-Dsc/Debug" /q:True /e:true

Что содержат журналы событий DSC?

События DSC разделяются по трем каналам журнала событий в зависимости от важности и цели сообщения. Три канала журнала событий следующие:

  • Все информационные сообщения и сообщения об ошибках записываются в канал Operational.

  • Аналитический канал получает подробные события, которые обычно означают больше событий в целом и события, которые более детализированы в информации, которую они предоставляют

  • Канал отладки получает события уровня отладки от операций DSC.

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

Сбор событий из одной операции DSC

Мы можем использовать Windows Event Viewer или PowerShell для просмотра всех событий со всех каналов DSC. Средство просмотра событий хорошо подходит для интерактивных сеансов, но не подходит для автоматизированных сценариев и его нелегко экспортировать. Подход PowerShell требует большего набора текста, но его легче экспортировать в форматы, упрощающие проверку.

Event Viewer

В Windows 2008 и более поздних версиях программа просмотра событий была обновлена с расширенными возможностями фильтрации. Мы можем использовать функцию настраиваемого просмотра, чтобы выбрать все события из трех каналов DSC и представить их в одном виде с целью исследования, следуя указанным шагам:

  1. Откройте средство просмотра событий Windows и перейдите к узлу Custom View на панели действий.

  2. Щелкните правой кнопкой мыши узел Custom View и выберите Create Custom View.

  3. Щелкните каждый желаемый тип события. А пока выберите их все.

  4. Щелкните раскрывающийся список журналов событий и перейдите к каналам DSC.

  5. Выберите все каналы DSC.

  6. Щелкните ОК. Просматривайте события DSC на одной панели.

PowerShell

Мы можем использовать командлет Get-WinEvent для сбора событий DSC. Мы можем запрашивать каналы DSC и сохранять события в массиве, а затем использовать командлет Group-Object, чтобы упорядочить их по свойству ID:

# collect all logs from all channels
$dscEvents = @(
Get-WinEvent "Microsoft-windows-DSC/operational"
Get-WinEvent "Microsoft-Windows-DSC/Analytic" -Oldest
Get-WinEvent "Microsoft-Windows-DSC/Debug" -Oldest
)

Если вам интересно, можно ли пропустить использование Oldest с журналами аналитики и отладки, то нет, нельзя. Ошибка, которая появляется, когда вы пытаетесь это сделать, выглядит следующим образом:

[PS]> Get-WinEvent "Microsoft-Windows-Dsc/Analytic"
Get-WinEvent : The Microsoft-Windows-DSC/Analytic event log can be read
only in the forward chronological order
because it is an analytical or a debug log. To see events from the
Microsoft-Windows-DSC/Analytic event log, use the Oldest parameter in the command.
At line:1 char:1
+ Get-WinEvent "Microsoft-Windows-Dsc/Analytic"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (Microsoft-Windows-DSC/Analytic:String)
[Get-WinEvent], Exception
+ FullyQualifiedErrorId : SpecifyOldestForLog,
Microsoft.PowerShell.Commands.GetWinEventCommand

Дальнейшие запросы могут быть выполнены для результирующих данных путем сортировки и группировки объектов результата:

# Group all logs based on the job ID
$operations = $dscEvents | Group-Object {$_.Properties[0].value}

Например, можно найти все события с уровнем серьезности ошибки, выполнив поиск ошибки:

$operations | Where-Object {$_.Group.LevelDisplayName -contains "Error"}

Или можно изучить сообщение из одного события:

$operations[0].Group.Message

Или можно найти все события с определенным идентификатором задания:

($operations | Where-Object {$_.Name -eq 2025}).Group

Использование модуля xDscDiagnostics для анализа журналов DSC

Прочитав предыдущее объяснение, можно разочарованно вскинуть руки из-за объема работы, которую необходимо проделать для просмотра полезной информации. Модуль xDscDiagnostics PowerShell, предоставляемый Microsoft, напрямую решает эту проблему. Он объединяет многие задачи в два командлета, которые могут помочь вам идентифицировать события DSC как на локальном компьютере, так и удаленно на целевом узле. Это отличный помощник в диагностике и выявлении проблем с DSC. Для целей этого модуля мы определим операцию DSC как набор событий, описывающих выполнение DSC от начала до конца. Например, события, сгенерированные с помощью Start-DSCConfiguration, будут отделены от событий, сгенерированных с помощью Test-DSCConfiguration.

Get-xDSCOperation

Командлет Get-xDSCOperation работает как на локальных, так и на удаленных целевых узлах и возвращает объект, содержащий коллекцию событий, созданных каждой операцией DSC, запущенной на целевом узле. Каждый возвращаемый объект - это объект Microsoft.PowerShell.xDscDiagnostics.GroupedEvents, который представляет собой набор всех событий для определенного выполнения DSC. Этот объект сообщает идентификатор последовательности, время начала операции DSC, имя запрашиваемого целевого узла, результат успешной или неудачной попытки, а также все события, произведенные операцией DSC.

Trace-xDSCOperation

Командлет Trace-xDSCOperation работает как на локальных, так и на удаленных целевых узлах и возвращает коллекцию событий, связанных с указанным идентификатором последовательности. Обычно вы запускаете Get-xDSCOperation и выбираете конкретный идентификатор последовательности для запуска Trace-xDSCOperation. С другой стороны, Get-xDSCOperation предоставляет общий обзор того, что произошло во время операции DSC, а Trace-xDSCOperation предоставляет конкретные детали. Наиболее примечательной из этих деталей является поле сообщения, которое сообщает точный текст или ошибку, сообщенную DSC при выполнении этой операции.