Сравните 2 CSV файлы данных более чем на 2 колонны - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть 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

1 Ответ

1 голос
/ 13 апреля 2020

Это должно работать. Обязательно добавьте свойство timeraised

// previous code 
$Results =Compare-Object $Old $New -property "AlertName","timeraised" -passThru |             
Where-Object { $_.SideIndicator -eq '=>' } 
// rest of code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...