2016-01-20 85 views
-3

我想写比较两个不同结构的CSV文件的脚本。我有一个名为cisearch.csv的文件,第二个文件名为export.csv比较CSV与不同的结构

cisearch.csv

Name,P1,P2,P3,P4,P5 
server1,100,,,, 
server2,100,100,,, 
server3,100,,,, 
server4,100,50,70,80,80

export.csv

Host;Drive 
server1;Drive C: Disk Usage 
server2;Drive C: Disk Usage 
server2;Drive D: Disk Usage 
server3;Drive C: Disk Usage 
server4;Drive C: Disk Usage 
server4;Drive D: Disk Usage 
server4;Drive E: Disk Usage 
server4;Drive F: Disk Usage 
server4;Drive G: Disk Usage

从剧本我只需要输出,其中将只有这些都对cisearch.csv项目,但不是在export.csv。例如:

server4 Drive F: 
server4 Drive G:

我知道这对驱动器C:而不是另一个...

$csvI = Import-Csv c:\workspace\cisearch.csv 
foreach($line in $csvI){ 
    $hostname = $line.Name 
    $cDrive = $line.P1 
    $dDrive = $line.P2 
    $eDrive = $line.P3 
    $fDrive = $line.P4 
    $gDrive = $line.P5 

    if ($cDrive -gt 0) { 
     Select-String -pattern "$hostname;Drive C: Disk Usage" C:\workspace\export.csv | out-null 
    } else { 
     Write-Host Drive C: on $hostname non exist 
    } 
} 
+0

目前尚不清楚对我有什么选择标准是。驱动器的数量(假设第一个CSV中的'P1'到'P5'字段代表驱动器)在两个文件中都是相同的,那么为什么驱动器F:和G:必须列出server4,而其他的不是? –

+0

cisearch.csv是来自CMDB的报告:P1-P5是添加到服务器的分区 - server1只有一个驱动器,server2有两个分区,server3只有一个,server4有5个分区。我需要将它与第二个来自Nagios的报告进行比较,监控什么。我需要找到P1-P5和服务器名称什么是不监控... – g0mez

+0

我认为,我需要:如果dDrive是空白 - 无效值,继续eDrive ...如果dDrive值大于0,请尝试选择字符串... – g0mez

回答

-1

和什么有关:

function compareE { 
    if ($eDrive -gt 0) { 
     Select-String -pattern "$hostname;Drive E: Disk Usage" C:\workspace\NagiosExport.csv 
    }else{ 
     Write-Host Drive E: on $hostname not monitored 
    } 
} 

if($eDrive -gt 0) { 
    compareE 
    } 
+1

这是如何回答你的问题?如果您需要提供更多信息/说明,请编辑您的问题。 –