powershell 比较2个以上列的2个CSV文件数据

ny6fqffe  于 2022-11-10  发布在  Shell
关注(0)|答案(1)|浏览(183)

我有两份CSV文件。每个文件具有与以下脚本中提到的相同的列名。
我正在尝试比较New.csvOld.csv。为了进行比较,我在Old.csv中查找每个Alertname,在New.csv中找到匹配的警报,然后检查Timeraised列中的警报时间。如果存在警报,并且警报时间相差超过3小时,则不显示数据。但如果不到3小时,则显示警报并创建Output.csv

示例-

OLD.csv File

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中。

我的工作-我只能根据Alertname比较两个文件上的Alertts,它不能同时比较2个不同的变量,这意味着由于限制,我不能从下面的代码一次比较Alertname和Timeraized。有没有人能帮我解决这个问题。

$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
t2a7ltrp

t2a7ltrp1#

这应该行得通。确保添加属性timeraised

// previous code 
$Results =Compare-Object $Old $New -property "AlertName","timeraised" -passThru |             
Where-Object { $_.SideIndicator -eq '=>' } 
// rest of code

相关问题