Trouver des serveurs avec des journaux d'événements spécifiques

0

J'ai une tâche qui nécessite de mettre à jour un service Windows. Ce service peut être sous différents noms - il demande le nom d'installation lors de l'installation du service ... mais les journaux des événements Windows sont codés en dur sous un nom spécifique en C #:

if (!EventLog.SourceExists("MySuperSpecialEventLog"))
    EventLog.CreateEventSource("MySuperSpecialEventLog", "MyLog");

Comment trouver tous les serveurs avec des événements consignés dans ce journal personnalisé?

J'ai joué avec Powershell:

clear

import-module ActiveDirectory;
$servers = Get-ADComputer -Filter {OperatingSystem -Like "Windows Server*"} -Property Name | Sort-Object name | Format-Table Name; #,OperatingSystem,OperatingSystemServicePack;
$servers

foreach($server in $servers){
   echo "Get-Eventlog -List -ComputerName $server"
}

Cela me donne une liste de serveurs ... alors j'essaie de tirer une liste de serveur Services ForEach ... alors je peux simplement filtrer ...

Mais je n'arrive pas à faire en sorte que la chose clique sur tous les cylindres.

Si powershell n’est pas le bon outil - quoi d’autre permettrait de trouver tous les serveurs dotés de cet EventLog spécifique?

WernerCD
la source
votre foreach devrait être foreach($server in $servers)
LotPings
oui, c'était une erreur de traduction ... c'est ce qui se passe dans le foreach qui m'a confusqué
WernerCD
Que recherchez vous exactement? Vous avez parlé des journaux d'événements (MyLog) et des sources de journaux d'événements (MySuperSpecialEventLog). Vous dites ensuite que vous essayez d'extraire une liste de services de chaque serveur.
Patrick Seymour

Réponses:

1
$source = "MySuperSpecialEventLog"
import-module ActiveDirectory
$servers = Get-ADComputer -Filter {OperatingSystem -Like "Windows Server*"} | % { $_.Name }

$servers | % {
    Try {
        $eventlog = get-eventlog -Source $source -ComputerName $_ -newest 1 -ErrorAction Stop
        Write-Host $_ , ":", "has $source entries" 
    } Catch {
        Write-Host $_ , ":", $_.Exception.Message
    }
}

Cela ferait écho computer : has MySuperSpecialEventLog entries ou computer : exceptionmessage

SimonS
la source