![每次启动时事件日志中都会出现 WMI 错误:EventID 5605](https://linux22.com/image/587990/%E6%AF%8F%E6%AC%A1%E5%90%AF%E5%8A%A8%E6%97%B6%E4%BA%8B%E4%BB%B6%E6%97%A5%E5%BF%97%E4%B8%AD%E9%83%BD%E4%BC%9A%E5%87%BA%E7%8E%B0%20WMI%20%E9%94%99%E8%AF%AF%EF%BC%9AEventID%205605.png)
我有几个服务器,我不断收到EventID 错误 5605
root\cimv2\TerminalServices 命名空间标有 RequiresEncryption 标志。如果脚本或应用程序没有适当的身份验证级别,则可能会拒绝访问此命名空间。将身份验证级别更改为 Pkt_Privacy,然后再次运行脚本或应用程序。
问题是我不知道这个脚本是从哪里运行的,所以我无法像我在事件 5605 上找到的其他帖子一样更新脚本来解决问题。我检查了 GPO 中的启动脚本,检查了我域的所有 SYSVOL 共享中的 VBScript 或 Powershell 脚本。我找不到这个脚本。我该如何找到这个脚本并修复它,以便它不再抛出这个错误?
答案1
使用WMI 事件跟踪在事件查看器中,这将允许您将 WMI 查询链接到特定进程。
- 打开事件查看器。
- 在“查看”菜单上,单击“显示分析和调试日志”。
- 在应用程序和服务日志 | Microsoft | Windows | WMI 活动下找到 WMI 的跟踪通道日志。
- 右键单击跟踪日志并选择日志属性。
- 单击“启用日志记录”复选框以启动 WMI 事件跟踪。
WMI 事件出现在 WMI-Activity 的事件窗口中。
此事件日志有时使用起来很麻烦,因此您可以使用如下脚本来开始跟踪和查看事件,并将进程名称附加到 WMI 查询:
$wmiLog = "Microsoft-Windows-WMI-Activity/Trace"
echo y | Wevtutil.exe sl $wmiLog /e:true
Read-Host -Prompt "Tracing WMI Started. Press [ENTER] to stop"
echo y | Wevtutil.exe sl $wmiLog /e:false
$events = Get-WinEvent -LogName $wmiLog -Oldest | Where-Object {$_.message.Contains("Operation = Start") -or $_.message.Contains("Operation = Provider") }
if ($events -eq $null)
{
Write-Host "No WMI events in trace!"
return
}
$table = New-Object System.Data.DataTable
[void]$table.Columns.Add("Computer")
[void]$table.Columns.Add("Namespace")
[void]$table.Columns.Add("Type")
[void]$table.Columns.Add("Query")
[void]$table.Columns.Add("UserName")
[void]$table.Columns.Add("Process")
ForEach ($event in $events)
{
switch ($event.Properties.Count)
{
6 {
$typeStart = $event.Properties[1].Value.IndexOf("::")+2
$typeEnd = $event.Properties[1].Value.IndexOf(" ",$typeStart)
$type = $event.Properties[1].Value.Substring($typestart,$typeEnd-$typeStart)
$query = $event.Properties[1].Value.Substring($event.Properties[1].Value.IndexOf(":",$typeEnd)+2)
$process = Get-Process -Id ($event.Properties[2].Value) -ErrorAction SilentlyContinue
if ($process -eq $null)
{
$process = "($($event.Properties[2].Value))"
}
else
{
$process = "$($process.Name) ($($process.Id))"
}
[void]$table.Rows.Add(`
$env:COMPUTERNAME,`
"\\.\root\cimv2",`
$type,`
$query,`
"N/A",
$process)
}
8 {
$typeStart = $event.Properties[3].Value.IndexOf("::")+2
$typeEnd = $event.Properties[3].Value.IndexOf(" ",$typeStart)
$type = $event.Properties[3].Value.Substring($typestart,$typeEnd-$typeStart)
$query = $event.Properties[3].Value.Substring($event.Properties[3].Value.IndexOf(":",$typeEnd)+2)
$process = Get-Process -Id ($event.Properties[6].Value) -ErrorAction SilentlyContinue
if ($process -eq $null)
{
$process = "($($event.Properties[6].Value))"
}
else
{
$process = "$($process.Name) ($($process.Id))"
}
[void]$table.Rows.Add(`
$event.Properties[4].Value,`
$event.Properties[7].Value,`
$type,`
$query,`
$event.Properties[5].Value,
$process)
}
default
{
Write-Error "Unexpected number of event properties."
Write-Host $event
Write-Host $event.Properties
}
}
}
$table | Out-GridView
Tracelog.exe 和 tracefmt.exe 来自Windows 驱动程序工具包 (WDK)也可以用于 WMI 跟踪。
答案2
由于这是 WMI,因此它通常反映远程调用。例如,Lansweeper 扫描仪会触发此错误,但针对不同的命名空间:root\cimv2\Security\MicrosoftTPM。您可能需要监控流向受影响服务器的网络流量,以便在 WMI 查询不是本地时识别其来源。