限制 Windows 事件日志大小的正确方法是什么?

限制 Windows 事件日志大小的正确方法是什么?

我正在寻找使用 PowerShell 或命令行脚本限制 Windows 事件日志大小的最佳方法。我想在安装应用程序期间运行此脚本以增加安装程序部署的日志的限制。

到目前为止,我尝试使用 power shell 的限制事件日志命令,Limit-EventLog -LogName "logName" -MaximumSize xxMB但是该命令找不到日志。

接下来,我尝试使用安装程序添加“File”和“MaxSize”注册表项:我在 下创建了一个与事件日志名称匹配的键SYSTEM\CurrentControlSet\Services\EventLog、一个名为“File”的字符串值、数据、日志文件的完整路径、一个名为“MaxSize”的 dword 值以及我想要设置最大大小的数据值(以字节为单位)。这似乎有效,但这会使日志以一种奇怪的方式显示在事件查看器中。

在此处输入图片描述

我还注意到,最大日志大小可以直接从事件查看器中更改,而此更改根本不反映在注册表中。例如,事件日志“Microsoft-Windows-TaskScheduler/Operational”的限制为 10MB,但在“SYSTEM\CurrentControlSet\Services\EventLog”下没有相应的注册表项

我正在寻找一个可以让我获得相同效果的脚本。

答案1

不要更改注册表中的值,这可能会导致意外行为。

您可以使用 Powershell,但不能Limit-EventLog,因为文档说这只适用于经典事件日志(Windows Vista 之前)。

包含 EventLog 名词的 cmdlet(EventLog cmdlet)仅适用于经典事件日志。要从使用 Windows Vista 及更高版本的 Windows 中的 Windows 事件日志技术的日志中获取事件,请使用 Get-WinEvent。

您可以通过修改获取的对象来更改事件日志的大小获取 WinEvent

$targetLog = Get-WinEvent -ListLog "Company-Product-Module/Operational"
$targetLog.MaximumSizeInBytes = 2105344
$targetLog.SaveChanges()

如果你不知道日志的确切名称,你可以使用Get-WinEvent -ListLog *查看所有日志

答案2

您可以在以下注册表位置查看和调整“子”事件日志(在应用程序、安全、系统等下方)的大小:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\<event log name>

将 MaxSize 更改为所需的十进制大小(以字节为单位)(例如,5MB 为 5242880)。显然,它可能需要是 64KB 的倍数

https://social.technet.microsoft.com/Forums/en-US/798940e6-8d11-4a2b-a99a-7dcb3ebf084d/2008-r2-group-policy-settings-for-size-of-application-and-services-logs?forum=winserverGP

https://www.makethenmakeinstall.com/2020/01/increasing-applications-and-services-event-logs-size-with-regedit-and-gpo/

相关内容