有人可以描述一个比较 $entry[X] 和 $entry[Y] 以确定它们是否相同的好模式吗?我正在尝试获取我的日志的可读摘要,并且不想吐出 400 行相同的行。
foreach ($log in $logs) {
$nm = $log.LogDisplayName
$header = $log.LogDisplayName
Write-Host $header
Add-Content $output "$header Log Errors/Warnings, Past 48 Hours"
$entries = $log.Entries | ? {$_.TimeWritten -gt ($(Get-Date).AddDays(-2)) -and (($_.EntryType -like "Error") -or ($_.EntryType -like "Warning"))}
foreach ($entry in $entries) {
***here is where I think I need to compare array elements***
}
out-string -inputobject $entries | add-content $output
要将当前条目与前一个条目进行比较:
结果数组
$newarray
包含所有内容,$entries
但删除了相邻的重复项。Select-Object 是您完成此类任务的朋友。
以下是从字符串集合中消除任何重复项的方法:
但是,如果您正在使用具有多个属性的对象,那么如果对象的字符串表示对于每个对象都是相同的(例如 Get-Service | Select-Object -Unique 返回一个对象,因为所有服务对象)转换为字符串时转换为 System.ServiceProcess.ServiceController,不能用于唯一标识服务)。在这种情况下,您需要指定要检查唯一性的属性。
这是另一个示例,它向您展示了如何获取当前目录中文件的唯一扩展名列表:
这两种技术之一应该可以帮助您获得您正在寻找的独特收藏。
你可以试试:
(如果这是适当的字段)。
这个想法是摆脱重复,然后将其放回原始顺序。
Poweshell 中 Group-Object 的帮助有非常相似的例子:
您可以轻松地交换一些参数:
这将获取过去 48 小时内所有错误或警告的系统日志条目,并按其索引对它们进行分组。这是为每个日志条目分配的唯一编号,可用于识别重复项。最后一部分只是过滤掉所有唯一的条目并留下重复的条目。
如果要检查消息中的唯一性,请使用以下命令:
这显示了给定日志间隔中唯一消息的计数。