Powershell限制事件日志溢出操作不工作

Powershell限制事件日志溢出操作不工作,powershell,event-log,Powershell,Event Log,使用powershell 4,代码如下: Limit-EventLog -LogName Application -MaximumSize 64KB -OverflowAction OverwriteAsNeeded 未能产生预期的效果。日志大小已更改,但溢出操作未更改。为OverflowAction指定不同的值也无法更改任何内容,并且该值OverwriteOrder会抛出一个错误,声称传入的最大大小需要是64kb的倍数,而它已经是64kb的倍数 有人知道如何让它工作吗 谢谢 不是纯粹的pow

使用powershell 4,代码如下:

Limit-EventLog -LogName Application -MaximumSize 64KB -OverflowAction OverwriteAsNeeded
未能产生预期的效果。日志大小已更改,但溢出操作未更改。为OverflowAction指定不同的值也无法更改任何内容,并且该值OverwriteOrder会抛出一个错误,声称传入的最大大小需要是64kb的倍数,而它已经是64kb的倍数

有人知道如何让它工作吗


谢谢

不是纯粹的powershell解决方案,但您可以使用内置命令:

您的
overflowaction
参数对应于wevtutil中的
retention
参数(true=保留旧事件->新事件将被拒绝)

设置配置:

wevtutil.exe sl应用程序/Rt:false

确定,因此问题仅在现有值为存档时发生(从“不覆盖”更改时工作正常)

原因似乎是,当设置为存档时,将创建一个名为“AutoBackupLogFile”的密钥,并且将现有密钥“Retention”设置为最大值,但cmdlet无法适当更改这些值,因此这是cmdlet的一个错误,不幸的是,如果您试图将值从存档更改为其他值,cmdlet无法用于此目的。这里最好的答案是直接调整适当的注册表项

还请注意,cmdlet对于事件日志的最小允许大小不正确。最小大小实际上是1mb,因此64kb不是有效值

下面是一个简单的脚本,它将所有3个主日志更改为最小大小,并根据需要进行调整以覆盖(如果您只想执行应用程序,请从阵列中删除安全性和系统):

@('Application'、'Security'、'System')|%{
Set ItemProperty“HKLM:\SYSTEM\CurrentControlSet\services\eventlog\$\ux”-名称MaxSize-类型DWORD-值0x00100000-强制
Set ItemProperty“HKLM:\SYSTEM\CurrentControlSet\services\eventlog\$\ \ \”名称AutoBackupLogFiles-类型DWORD-值0-强制
Set ItemProperty“HKLM:\SYSTEM\CurrentControlSet\services\eventlog\$\ \ \”名称保留-类型DWORD-值0-强制
}


请注意,如果复制该文件,您将需要仔细检查格式,并确保每个“set-itemproperty”位于同一行。

(1):Technet说:“要在Windows Vista和更高版本的Windows上使用限制事件日志,请使用“以管理员身份运行”选项打开Windows PowerShell。您正在这样做吗?(2) :您是否尝试仅使用
-overflowaction
参数发出命令?如何检查溢出项是否更改?我只是试了一下,效果还不错。必须打开和关闭“属性”选项卡才能查看更改。您的synax对我来说运行良好,即使日志大小为2048KB。这很奇怪-我在多台计算机上进行了尝试,得到了相同的结果。我通过查看“属性”选项卡进行检查,是的,我会在重新检查之前关闭它。我假设,因为我在5个虚拟机上得到了相同的结果,所以它对其他虚拟机是可复制的。奇怪,也许不是……我今天又试了一次,结果是一样的。我问题中的代码无法根据需要更改溢出操作以覆盖事件,当日志已满时,将保留在存档日志中。如果传入大小,则会更改大小,如果不是,则溢出操作仍不会更改。将其设置为false会引发错误“通道属性保留包含无效值。该值的类型无效、超出有效范围、无法更新或此类型的通道不支持”这可能是我当时的情况所独有的。这也是在windows8/windows server 2012上实现的。我在cmd.exe内的提升powershellTry中运行它,我想注册表项值是有效的。我希望避免直接接触它。当我回到电脑前,我会试试这个。