如何通过 Powershell 收集单个类别的安全事件日志

Dar*_*tux 2 powershell active-directory windows-event-log windows-server-2003-r2

我正在尝试编写一个脚本,每小时从我们所有的域控制器收集安全日志并远程存储它们;我可以收集安全日志,但是有没有办法按类别或事件编号从 DC 收集安全日志?如果有任何其他问题,请告诉我。

我的代码:

$Eventlogs = Get-WmiObject -Class Win32_NTEventLogFile -ComputerName $computer
Foreach($log in $EventLogs)
 {
        if($Log.LogFileName -eq "Security")
        {
            $Now = [DateTime]::Now
            $FileName = "Security" +"_"+$Now.Month+$Now.Day+$Now.Year+"_"+$Now.Hour+$Now.Minute+$Now.Second
            $path = "\\{0}\c$\LogFolder\$folder\$FileName.evt" -f $Computer
            $ErrBackup = ($log.BackupEventLog($path)).ReturnValue
            if($clear)
            { 
                if($ErrBackup -ne 0)
                {
                    "Backup failed" 
                    "Backup Error was " + $ErrBackup
                }
            }

        }
    }
         Copy-EventLogsToArchive -path $path -Folder $Folder 
} 
Run Code Online (Sandbox Code Playgroud)

Rya*_*ies 6

不是Get-EventLog没有获取Task Category,只是Cmdlet的默认行为不是显示它。但是数据还在。

Import-Module ActiveDirectory
foreach($server in Get-ADComputer -Filter *)
{
    Get-EventLog -LogName Security -ComputerName $server | ? { $_.CategoryNumber -EQ 12544 }
}
Run Code Online (Sandbox Code Playgroud)

由于任务类别实际上是数字格式这一事实使情况变得更加复杂 - 事件查看器使用 CategoryMessageFiles 将类别编号转换为类别名称。

您可以在注册表中找到 CategoryMessageFiles 的位置HKLM\System\CurrentControlSet\services\eventlog\Security\Security(每个事件日志都有一个子项。)

这样做的原因是让开发人员可以轻松地为自己的应用程序创建自己的事件日志和任务类别。

这里有一些关于如何获取 CategoryMessage 字符串的开发人员文档但我知道你不想经历所有这些,所以接下来最好的事情就是找到你想要过滤的事件类型的例子,弄清楚它们的类别编号,然后Switch($_.CategoryNumber)对它们进行处理以将它们转换为您喜欢的任何字符串。

编辑: 实际上从头开始。忽略我刚才说的一切。这应该更好地为您服务:

Get-WMIObject -Query "SELECT * FROM Win32_NTLogEvent WHERE LogFile='Security'" | Select EventCode, CategoryString
Run Code Online (Sandbox Code Playgroud)