【发布时间】:2020-04-13 14:27:55
【问题描述】:
我有 2 个 CSV 文件。每个文件具有与下面脚本中提到的相同的列名。
我正在尝试将New.csv 与Old.csv 进行比较。为了比较,我在Old.csv 中查找每个Alertname,在New.csv 中找到匹配的警报,然后从Timeraised 列中检查警报时间。如果警报存在且警报时间相差 3 小时以上,则不显示数据。但如果少于 3 小时,则显示警报并创建 Output.csv。
示例 -
警报名称、警报描述、主体名称、严重性、引发时间 内存警报,事件描述:在 xyz 服务器上发现内存问题,ABC,错误,13-04-2020 06:47 磁盘空间警报,事件描述:在 xyz1 服务器上发现磁盘空间问题,ABS,错误,13-04-2020 06:31
OLD.csv 包含如下警报:
Alertname: Memory Alert
TimeRaised: 03-04-2020 06:23
New.csv 包含如下警报:
Alertname: Memory Alert
TimeRaised: 03-04-2020 9:24
我不希望在Output.csv 中显示该警报,因为时差超过 3 小时。如果少于 3 小时,请将其包含在 Output.csv 中。
我的工作- 我只能根据 Alertname 比较两个文件上的 Alerts,它不能同时比较 2 个不同的变量,这意味着我无法比较 Alertname 和 Timeraised at由于限制,一次来自下面的代码。谁能指导我完成这个。
$path= "C:\CSV"
$Old = import-csv $path\Old.csv # Original file
$New = import-csv $path\New.csv # New ALert File
$Results =Compare-Object $Old $New -property AlertName -passThru | Where-Object { $_.SideIndicator -eq '=>' }
$Array = @()
Foreach($R in $Results)
{
If( $R.sideindicator -eq "=>" )
{
$Object = [pscustomobject][ordered] @{
AlertName = $R.AlertName
AlertDescription = $R.AlertDescription
PrincipalName = $R.PrincipalName
Severity = $R.Severity
TimeRaised = $R.TimeRaised
}
$Array += $Object
}
}
#Display results in console
$Array | Export-Csv $path\output1.csv -NoTypeInformation
【问题讨论】:
-
您发布的 csv 示例根本不像逗号分隔值。请发布有效的示例,这样想帮助的人就不必猜测了。
-
您能在记事本中打开您的 CSV 文件并向我们发送一些已编辑行吗?您发送的不是普通的 CSV
-
附上CSV供参考。
-
所以现在您向我们展示了 csv 作为图像的链接...请再次编辑问题并将 csv 文件的前几行添加为格式化的 text跨度>
-
完成,如果可以的话。
标签: powershell csv