У меня есть задача, которая требует от меня обновить службу Windows. Эта служба может находиться под разными именами - она запрашивает имя для установки при установке службы ... но журналы событий Windows жестко запрограммированы на конкретное имя в C #:

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

Как я могу найти все серверы с событиями, записанными в этот пользовательский журнал?

Я играл с 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"
}

Это дает мне список серверов ... тогда я пытаюсь получить список служб ForEach сервер ... тогда я могу просто фильтровать ...

Но я не могу заставить эту вещь нажать на все цилиндры.

Если PowerShell не является правильным инструментом - что еще будет работать, чтобы найти все серверы с этим конкретным EventLog?

1 ответ1

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
    }
}

Это должно повторить computer : has MySuperSpecialEventLog entries или computer : exceptionmessage

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .