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

mem*_*eam 2 scripting powershell windows-event-log

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

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

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

在此输入图像描述

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

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

Swi*_*one 5

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

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

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

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

$targetLog = Get-WinEvent -ListLog "Company-Product-Module/Operational"
$targetLog.MaximumSizeInBytes = 2105344
$targetLog.SaveChanges()
Run Code Online (Sandbox Code Playgroud)

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