У меня есть 2 файла CSV. Каждый файл имеет те же имена столбцов, что и в скрипте ниже.
Я пытаюсь сравнить New.csv
с Old.csv
. Для сравнения я ищу все Alertname
в Old.csv
, нахожу соответствующее предупреждение в New.csv
, а затем проверяю время предупреждения в столбце Timeraised
. Если оповещение присутствует и время оповещения превышает 3 часа, данные не отображаются. Но если его время меньше 3 часов, отобразите предупреждение и создайте Output.csv
.
Пример -
Файл OLD.csv
AlertName,AlertDescription,PrincipalName,Severity,TimeRaised
Memory Alert,Event Description: Memory issues found on xyz server,ABC,Error,13-04-2020 06:47
Disk Space Alert,Event Description: Disk space issues found on xyz1 server,ABS,Error,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
.
Моя работа - я могу сравнивать оповещения для обоих файлов только на основе имени оповещения, оно не может сравнивать 2 разные переменные одновременно, это означает, что я не могу сравнить Alertname & Timeraised сразу снизу кода из-за ограничений. Может ли кто-нибудь направить меня через это.
$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