Voici comment rechercher des journaux d'événements Windows sur des centaines de serveurs
Les journaux d’événements Windows sont un excellent point de départ pour résoudre les problèmes ou rechercher les failles de sécurité potentielles.
Windows fournit une liste complète de divers journaux d'événements regroupés par un fournisseur avec un nombre d'événements parfois vertigineux enregistré. Avec tous ces événements enregistrés, il est difficile de savoir ce qui se passe. Une façon de rechercher des journaux d’événements sur non pas un, mais des centaines de serveurs à la fois, est avec PowerShell.
PowerShell a deux commandes principales qui vous permettent de demander aux journaux d’événements appelés Get-EventLog et Get-vin d'attente. Dans cet article, nous allons nous concentrer sur Get-vin d'attente car il prend en charge tous les types de journaux d’événements et offre de meilleures fonctionnalités de filtrage.
Interroger les événements des serveurs est facile avec Get-vin d'attente. ils Get-vin d'attente La cmdlet a un paramètre appelé ordinateur qui vous permet de spécifier un serveur distant. Nous devons également donner le nom du journal des événements à demander en utilisant LogName paramètre. Vous pouvez voir ci-dessous que la sortie est regroupée par le fournisseur.
PS> Get-WinEvent -ComputerName SRV1 -LogName SystemNom du fournisseur: Microsoft-Windows-NDIS
Message TimeCreated Id LevelDisplayName
----------- - ---------------- -------
14/03/2019 09:20:50 10400 Avertissement L'interface réseau "Connexion réseau Intel (R) PRO / 1000 MT" a commencé à se réinitialiser. Ça va ...
14/03/2019 09:12:16 AM 10400 Avertissement L'interface réseau "Connexion réseau Intel (R) PRO / 1000 MT" a commencé à se réinitialiser. Ça va ...Nom du fournisseur: Gestionnaire de contrôle de service
Message TimeCreated Id LevelDisplayName
----------- - ---------------- -------
14/03/2019 08:08:46 AM 7040 Information Le type de démarrage du service Service de transfert intelligent en arrière-plan a été modifié depuis le démarrage automatique ...
Nous ne trouverons généralement pas tous événements dans un journal spécifique, nous avons donc la possibilité de limiter ce déclin. Tout d'abord, nous pouvons utiliser maxevents paramètre. Cela ne filtre pas les résultats mais limite uniquement le nombre d'événements renvoyés.
PS> Get-WinEvent -ComputerName SRV1 -LogName System -MaxEvents 1
Pour limiter ce que je recherche, un moyen de filtrer les événements Get-vin d'attente est d'utiliser FilterHashTable paramètre. Ce paramètre vous permet de fournir en entrée une table de hachage spécifiant différents attributs pour filtrer les événements.
Par exemple, nous pouvons filtrer les événements par critiques à l’aide de la touche level FilterHashTable paramètre. Dans ce cas, cette question ne renverra que les critiques et les erreurs de mon serveur SRV2.
Get-WinEvent -ComputerName SRV1 -FilterHashtable @ {
LogName = & # 39; System & # 39;
Niveau = 1.2 N ° 1 critique, 2 erreur, 3 avertissement, 4 informations
}
Je peux également répondre à d'autres questions courantes du journal des événements en recherchant des interruptions de compte qui, à ma connaissance, génèrent un ID d'événement 4740 dans le journal de sécurité. Ou je pourrais filtrer sur le fournisseur. Vous pouvez filtrer les journaux d'événements de nombreuses manières différentes.
Get-WinEvent -FilterHashtable @ {
LogName = & # 39; Security & # 39;
ID = 4740
}Get-WinEvent -FilterHashtable @ {
LogName = & # 39; System & # 39;
ProviderName = & # 39; Microsoft Windows GroupPolicy & # 39;
}
Maintenant que j'ai une bonne idée de la manière de demander des événements et de les filtrer, développons pour interroger plusieurs ordinateurs. Pour ce faire, vous devez faire Get-vin d'attente commande pour chaque nom d'ordinateur distant. Nous devons faire une boucle foreach pour interroger tous nos serveurs.
Supposons que j'ai une liste de serveurs dans un fichier texte et que j'adorerais rechercher tous les journaux d'événements. Pour ce faire, je peux utiliser Get-Content pour lire le fichier texte qui renverra chaque nom de serveur où je peux ensuite envoyer ce nom à ordinateur paramètre sur Get-vin d'attente. L’exemple ci-dessous demandera au journal des événements système qui renvoie les cinq premiers événements sur chaque serveur défini dans C: servers.txt fichier texte.
$ servers = Get-Content -Path C: servers.txt
foreach ($ serveur dans $ serveurs) {
Get-WinEvent -ComputerName $ server -MaxEvents 5 -FilterHashtable @ {
LogName = & # 39; System & # 39;
}
}
Cela renvoie les événements attendus, mais vous ne pouvez pas dire de quel serveur provient l'événement. Pour corriger cela, je peux m'assurer que machine La propriété est renvoyée avec uniquement les propriétés qui me tiennent à cœur. Peut-être que je veux voir l'ID d'événement et le nom du serveur. Je peux limiter la production de ces propriétés en utilisant Select-Object.
$ servers = Get-Content -Path C: servers.txt
foreach ($ serveur dans $ serveurs) {
Get-WinEvent -ComputerName $ server -MaxEvents 5 -FilterHashtable @ {
LogName = & # 39; System & # 39;
} | Sélectionner un objet - ID de profil, nom de l'ordinateur
}Id MachineName
- -----------
7036 SRV1.techsnips.local
10016 SRV2.techsnips.local
7036 SRV3.techsnips.local
Vous pouvez constater que lorsque vous êtes en mesure de créer le filtre approprié pour un seul ordinateur, il est facile de l'étendre à plusieurs serveurs. pour chacun boucle. Lorsque vous faites cela, le seul problème que vous devez résoudre est la sortie et l'utilisation Select-Object; Vous pouvez créer toute propriété particulière que vous souhaitez voir dans votre rapport final.
Commentaires
Laisser un commentaire