2

在 Powershell 5 中,我们可以通过以下方式清除 Windows-Event-Log:

Get-EventLog -LogName * | % { Clear-EventLog -LogName $_.log }

如何在 Powershell 7 中执行此操作???(仅使用 powershell)

Powershell 处理 Windows 事件的方法现在使用 Get-WinEvent
,但似乎没有可用的 Clear-WinEvent

当然,我们可以使用 wevtutil.exe 执行此操作,
甚至可以在停止服务后强制删除日志文件……
但我只使用本机 powershell 代码询问。

4

1 回答 1

0

嗯,这很有趣。Clear-WinEvent确实不是 PowerShell 7 的一部分。提出了一个问题来添加它,但不喜欢在没有更多操作的情况下会去任何地方。

Microsoft 批准的执行此操作的方法是:

Import-Module Microsoft.PowerShell.Management -UseWindowsPowerShell
Get-EventLog -LogName * | % { Clear-EventLog -LogName $_.log }

这会启动一个在后台运行的 Windows PowerShell 5.1 进程,并通过隐式远程处理调用 Cmdlet……不是最好的。

更好的方法是利用 .NETEventLogSession.ClearLog方法:

Get-WinEvent -ListLog * | foreach {
    [System.Diagnostics.Eventing.Reader.EventLogSession]::GlobalSession.ClearLog($_.LogName)
}

除了- PowerShell 7 模块兼容性Microsoft.PowerShell.Management模块(Get-EventLog并且Clear-EventLog是其中的一部分)列为“内置于 PowerShell 7”

于 2021-02-03T00:08:25.147 回答