Christophe RUIZ

Expert Microsoft SCCM

Troubleshooting ID Event

Approche :

L’objectif est de collecter les Event ID des postes présents dans une collection.

Pour effectuer une analyse avancée des Event ID liés à des anomalies affectant les postes de travail. 

Nous allons prendre pour base d’exemple le container LSA présent dans le journal d’évènement dans « Microsoft-Windows-LSA/Operational« .

Puis pour cet exercice, nous allons extraire le contenu des évènements lié aux  » IDEvent 300 « .

Nous pouvons constater que la rubrique « Message » contient du texte avec de nombreux retours chariot, ce qui va compliquer la sortis d’affichage.

Le résultat obtenu via les commandes PowerShell est tronqué en sortie.

Powershell est malheureusement limité en nombre de caractères

Un peu comme le nombre de caractères tolérer par Windows quand on renomme un fichier ou un dossier.

De par ses limitations, PowerShell pose un problème de formatage de texte.

Ce qui rend impossible le traitement de données par une Wquery ou une extraction du contenu dans un CSV.

Une image contenant texte

Description générée automatiquement

En utilisant certain paramètre nous pouvons obtenir un résultat sous forme de tableau avec des retours chariot

Une image contenant texte

Description générée automatiquement

Il nous faudra alors pour finir, inventorier et consigner dans un rapport les éléments collectés.

Les actions :

    • Identification des solutions possibles via SCCM pour la récupération des données

Axe de réflexions

    • DCM avec remédiation avec extraction des Events ID vers un fichier.CSV dans un Share folder

DCM avec remédiation

Développement des points forts et contraintes 

Avantage 

    • Automatisation envisageable pour une exploitation durable de la solution
    • Intégration des données de la remédiation DCM dans une base SQL
    • Traitement des données collectées par la solution PowerBI (étude complémentaire nécessaire) 

Point d’information : 

Il est possible d’évoluer sur le mécanisme alternatif suivant :

Pour chacun des postes de la collection, l’exportation des données serait stockée dans un fichier CSV 

Le csv est créé par le script de remédiation de la DCM. 

L’ensemble des fichiers collectés pourraient être stockés dans un sharefolder commun à toutes les entités clients. 

Ensuite les données pourraient être consolidées dans un seul fichier CSV.  

Pour terminer, nous pourrions envisager de traiter ses informations via un rapport PowerBI.  

Contrainte : 

  • Mise en place d’un environnement adapté au besoin du projet (Création d’une base de données SQL, élagage de la base, solution PowerBI, stockage des données lié utilisateurs ‘’RGPD’’, autorisation ‘’Compte d’administration’’ …
  • Développement de script PowerShell plus avancé
  • Utilisation d’API ‘’Connecteur’’ Powershell to SQL (Adressage et compte de services Sql & Power BI)
  • Création d’un rapport sur PowerBI
  • Publication du rapport PowerBi via ‘’ messagerie, serveur web..’’

Activation du mode audit avancé

L’activation du mode audit est utilisée pour notre exemple, il permet d’activer la collecte des évents liés au conteneur LSA.

Script pour activer l’audit LSA

$PropertyType = « DWORD » 

$logName = « Microsoft-Windows-LSA » + [char]47 + « Operational » 

  

Reg Add « HKLM\SYSTEM\CurrentControlSet\Services\EventLog\$logName » /f | out-null 

New-Item -Path « Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\lsass.exe » -erroraction silentlyContinue | out-null 

Set-ItemProperty -Path « Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\Lsass.exe » -Type $PropertyType -Name « AuditLevel » -Value « 8 » -force | out-null 

  

$log = New-Object System.Diagnostics.Eventing.Reader.EventLogConfiguration $logName 

$log.IsEnabled=$true 

  

$Query = Get-Item -Path « Registry::HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Options » -erroraction silentlyContinue 

if (!$query.IsPresent) 

       New-Item -Path « Registry::HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\lsass.exe » -erroraction silentlyContinue | out-null 

       Set-ItemProperty -Path « Registry::HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\lsass.exe » -Type $PropertyType -Name « AuditLevel » -Value « 8 » -force | out-null 

Une image contenant texte

Description générée automatiquement

Le script sera joué par une DCM sur l’ensemble

des collections ciblées. 

Affichage de sortie

« Mode Bac à sable PowerShell »

Ø  Affichage avec le container LSA du journal d’événement.

Get-WinEvent -LogName ‘Microsoft-Windows-LSA/Operational*’-FilterXPath ‘*[System[EventID=300]]’ | Select-Object TimeCreated, ID, ProviderName, LevelDisplayName, Message |

Format-Table -AutoSize

Commentaire : Les informations affichées sont tronquées, car le contenu de « Message » dépasse le nombre de caractères tolérés par Powershell.

Une image contenant texte

Description générée automatiquement

Ø  Affichage avec un autre container du journal d’événement.

Kernel-WHEA/Operational.

Get-WinEvent -LogName ‘Microsoft-Windows-Kernel-WHEA/Operational*’-FilterXPath ‘*[System[EventID=42]]’ | Select-Object TimeCreated, ID, ProviderName, LevelDisplayName, Message | 

Format-Table -AutoSize 

Commentaire : Le contenu présent dans la propriété « Message » est correctement formaté (sans retour chariot et moins de caractère) présent dans l’évent ID 300 de LSA.

Une image contenant texte

Description générée automatiquement

Ø  En utilisant le même script sans  » Format-Table -AutoSize. « 

Get-WinEvent -LogName ‘Microsoft-Windows-LSA/Operational’-FilterXPath ‘*[System[EventID=300]]’ | Select-Object TimeCreated, ID, ProviderName, LevelDisplayName, Message

Une image contenant table

Description générée automatiquement

Ø  Script avec formatage de l’affichage ‘’Export File.CSV’

Get-WinEvent -LogName ‘Microsoft-Windows-LSA/operational’| Select-Object -Property TimeCreated, ID, ProviderName, LevelDisplayName,  Message | Where-Object {$_.ID -eq 300 } | Export-Csv -path C:\Users\DT982466\Desktop\Test\Test.csv -Delimiter « ; » -Encoding Unicode 

Commentaire :

L’affichage de sortie des données est structuré comme la capture d’écran à gauche le présente.

DCM avec remédiation

Le Script de la DCM 

$EventID = (Get-EventLog Microsoft-Windows-LSA/Operational -after (get-date).AddDays(-7) | where {$_.InstanceId -eq 30000}) 

 if ($EventID -eq $null) 

{$Compliance = “No”} 

Else 

{$Compliance = “YES”} 

 $Compliance 

Une image contenant texte, capture d’écran

Description générée automatiquement

Commentaire : Retour d’information celons l’ID Event présent sur le poste de travail.

Une image contenant texte

Description générée automatiquement

Le script de la remédiation 

*  Script de base 

Get-WinEvent -LogName ‘Microsoft-Windows-LSA/Operational*’| Select-Object -Property TimeCreated, ID, ProviderName, LevelDisplayName, Message | Where-Object {$_.ID -eq 300 }| Export-Csv -path C:\temp\Test3.csv -Delimiter « ; » -encoding utf8 -NoTypeInformation

Format de sortie

Une image contenant table

Description générée automatiquement

Commentaire :

L’exportation dans un CSV est plus aboutie en remplacent -Encoding Unicode par -encoding utf8 -NoTypeInformation

L’exportation des données dans le CSV est améliorée en utilisant la Table de codage « Utf8 »