答案1
首先这个……
$"Microsoft-Windows-Diagnosis-DPS/Operational"
... 是错误的语法。你在这里做的事情不是它的用例。‘$’(以及许多其他符号)在 PowerShell 中具有特殊含义,并且不能将单引号/双引号与普通简单字符串一起使用。
错误消息意味着日志确实不存在或者您没有传递日志的完整路径。
删除动词并不意味着清除或清空,而是意味着删除/销毁文件。这是一个系统文件,所以这不是什么事。
删除事件日志
删除事件日志或取消注册事件源。
在使用 cmdlet 之前,请务必仔细阅读。不要猜测,否则您真的会毁掉您的系统和企业。
在从代码中删除/注释掉这些开关之前,始终在所有破坏性代码(删除、重命名、移动等)上使用 -WhatIf 和 -Confirm:$true,以确保您将获得预期的结果。
在采取破坏性行动之前务必先执行 Get-*。
Get-EventLog -LogName 'YourLogNameOrFullpathHere'
打开 EventViewer(您显示您已经完成 - 但是您正在查看一个日志...但您说您想清除另一个)以获取日志的全名,或者执行以下操作...
# List all logs
Get-WinEvent -ListLog * -EA silentlycontinue
...或列出日志目标
Get-WinEvent -ListLog 'Microsoft-Windows-DriverFrameworks-UserMode/Operational'
# Results
<#
LogMode MaximumSizeInBytes RecordCount LogName
------- ------------------ ----------- -------
Circular 1052672 Microsoft-Windows-DriverFrameworks-UserMode/Operational
#>
Get-WinEvent -ListLog 'Microsoft-Windows-Diagnosis-DPS/Operational'
# Results
<#
LogMode MaximumSizeInBytes RecordCount LogName
------- ------------------ ----------- -------
Circular 1052672 1901 Microsoft-Windows-Diagnosis-DPS/Operational
#>
然后使用...
Get-WinEvent -LogName 'YourLogNameOrFullpathHere'
# Example
Get-WinEvent -ListLog 'Microsoft-Windows-Diagnosis-DPS/Operational' | Get-Member
# Results
<#
TypeName: System.Diagnostics.Eventing.Reader.EventLogConfiguration
Name MemberType Definition
---- ---------- ----------
...
FileSize NoteProperty long FileSize=1052672
IsLogFull NoteProperty bool IsLogFull=False
LastAccessTime NoteProperty datetime LastAccessTime=28-Jul-20 01:15:05
LastWriteTime NoteProperty datetime LastWriteTime=28-Jul-20 01:15:05
...
RecordCount NoteProperty long RecordCount=1903
...
LogFilePath Property string LogFilePath {get;set;}
...
LogMode Property System.Diagnostics.Eventing.Reader.EventLogMode LogMode {get;set;}
LogName Property string LogName {get;}
LogType Property System.Diagnostics.Eventing.Reader.EventLogType LogType {get;}
...
#>
(Get-WinEvent -ListLog 'Microsoft-Windows-Diagnosis-DPS/Operational').LogFilePath
Get-WinEvent -LogName 'Microsoft-Windows-Diagnosis-DPS/Operational' |
Select-Object -First 3 |
Format-Table -AutoSize
# Results
<#
ProviderName: Microsoft-Windows-Diagnosis-DPS
TimeCreated Id LevelDisplayName Message
----------- -- ---------------- -------
28-Jul-20 01:24:34 105 Information Diagnostic module {45de1ea9-10bc-4f96-9b21-4b6b83dbf476} (%windir%\system32\radardt.dll) started troubleshooting scenario {180b3a99-8c39-4f12-b631-2...
28-Jul-20 01:24:34 100 Information Diagnostic module {45de1ea9-10bc-4f96-9b21-4b6b83dbf476} (%windir%\system32\radardt.dll) detected a problem for scenario {180b3a99-8c39-4f12-b631-20...
28-Jul-20 01:19:34 105 Information Diagnostic module {45de1ea9-10bc-4f96-9b21-4b6b83dbf476} (%windir%\system32\radardt.dll) started troubleshooting scenario {180b3a99-8c39-4f12-b631-2...
#>
仅供参考 - Get-WinEvent 是已弃用的 Get-EventLog 的替代品。不过,目前两者都可以使用。
日志的物理位置在这里:
(Get-ChildItem -pa 'C:\Windows\System32\winevt\Logs' -Filter '*Microsoft-Windows-Diagnosis-DPS*').FullName
# Results
<#
C:\Windows\System32\winevt\Logs\Microsoft-Windows-Diagnosis-DPS%4Operational.evtx
#>
您想要的 cmdlet 是...
清除事件日志(Microsoft.PowerShell.Management
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/clear-eventlog
Clear-EventLog -LogName 'Microsoft-Windows-Diagnosis-DPS/Operational' -WhatIf -Confirm:$true