我有一项任务需要我更新 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"
}
这给了我一个服务器列表...然后我尝试提取每个服务器的服务列表...然后我就可以进行过滤...
但我似乎无法让所有气缸都点击它。
如果 powershell 不是正确的工具-还有什么可以找到具有该特定 EventLog 的所有服务器?
答案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