如何在PowerShell中删除输出日志上的重复信息

如何在PowerShell中删除输出日志上的重复信息,powershell,scripting,windows-server,Powershell,Scripting,Windows Server,大家好,我对Powershell场景非常陌生,目前我正在处理一个与IIS相关的简单任务,在这个任务中,我必须检索每个“信息”事件并将其写入文件 问题是,它写了很多重复的信息,我希望它只写最近的事件 以下是原始输出: 20/05/2020 16:49:09应用程序信息已启动 筛选与IIS相关的“信息/警告级别” 提供商名称:Microsoft Windows已被删除 创建时间**:12/05/2020 14:57:20 **Id**:5186 **LevelDisplayName:信息 创建时间:

大家好,我对Powershell场景非常陌生,目前我正在处理一个与IIS相关的简单任务,在这个任务中,我必须检索每个“信息”事件并将其写入文件

问题是,它写了很多重复的信息,我希望它只写最近的事件

以下是原始输出:

20/05/2020 16:49:09应用程序信息已启动

筛选与IIS相关的“信息/警告级别”

提供商名称:Microsoft Windows已被删除

创建时间**:12/05/2020 14:57:20 **Id**:5186 **LevelDisplayName:信息

创建时间:12/05/2020 10:42:36 Id:5186 LevelDisplayName:信息

创建时间:08/05/2020 15:18:07 Id:5186 LevelDisplayName:信息

创建时间:08/05/2020 10:57:38 Id:5186 LevelDisplayName:信息

创建时间:07/05/2020 20:20:54 Id:5211 LevelDisplayName:信息

以下是PS脚本:

Clear-Host
Remove-Item E:\www\EvApp_Info_Logs\Application-info*.txt
$log = "E:\www\EvApp_Info_Logs\Application-info-$(get-date -f yyyy-MM-dd_hh-mm).txt"

$(Get-Date).ToString() + "  Application-Info STARTED" | out-file -FilePath $log -Append

"Filtering 'Information/Warning Levels' related to IIS" | out-file -FilePath $log -Append

Get-WinEvent -FilterXml ([xml](Get-Content C:\WEBIIS-content-information.xml))| 
fl -GroupBy ProviderName -Property TimeCreated, Id, LevelDisplayName | 
Out-File -FilePath $log -Append

$(Get-Date).ToString() + "  Application-Info ENDED" | out-file -FilePath $log  -Append
如果我在之后立即使用“get-unique”cmdlet

“获取WinEvent-FilterXml([xml](获取内容C:\WEBIIS Content-information.xml))| fl-GroupBy ProviderName-属性TimeCreated、Id、LevelDisplayName、消息| get unique“

它只写入与每个ProviderName相关的最新信息,而忽略EventId的其余部分

我希望脚本忽略重复的EventId,这样输出可以如下所示:

20/05/2020 16:49:09应用程序信息已启动

筛选与IIS相关的“信息/警告级别”

提供程序名称:Microsoft Windows已关闭

创建时间**:12/05/2020 14:57:20 **Id**:5186 **LevelDisplayName:信息

创建时间:07/05/2020 20:20:54 Id:5211 LevelDisplayName:信息


再一次,我在这方面真的是新手,任何帮助都将不胜感激。

实际上,fl需要一个排序列表。此外,我们使用排序对象按(ProviderName和)Id分组,以消除其他属性上的重复项

    $list | Sort-Object ProviderName, Id -Unique | fl -GroupBy ProviderName -Property TimeCreated, Id, LevelDisplayName 

这对你有用吗$d=获取WinEvent-FilterXml$filter$d | Sort Object-Property id-Unique | fl-GroupBy ProviderName-Property TimeCreated,id,LevelDisplayName,message谢谢大家,@Paxz您的解决方案对我不起作用。@Ketanb您的解决方案起作用了,但下面给出的答案更有效