【发布时间】:2016-04-25 23:11:18
【问题描述】:
我正在尝试编写脚本来比较具有不同结构的两个 CSV 文件。我有一个名为cisearch.csv 的文件和第二个名为export.csv 的文件。
cisearch.csv:
名称,P1,P2,P3,P4,P5 服务器1,100,,,, 服务器2,100,100,,, server3,100,,,, 服务器4,100,50,70,80,80
export.csv:
主机;驱动器 server1;驱动器 C: 磁盘使用情况 server2;驱动器 C: 磁盘使用情况 server2;驱动器 D: 磁盘使用情况 server3;驱动器C:磁盘使用情况 server4;驱动器 C:磁盘使用情况 server4;驱动器 D:磁盘使用情况 server4;驱动器 E: 磁盘使用情况 server4;驱动器 F:磁盘使用情况 server4;驱动器 G:磁盘使用情况
从脚本中,我只需要输出 cisearch.csv 上但不在 export.csv 上的项目。例如:
server4 驱动器 F: server4 驱动器 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
}
}
【问题讨论】:
-
我不清楚您的选择标准是什么。驱动器的数量(假设第一个 CSV 中的字段
P1到P5代表驱动器)在两个文件中是相同的,那么为什么必须列出服务器 4 的驱动器 F: 和 G:,而其他的不是? -
cisearch.csv 是来自 CMDB 的报告:P1-P5 是添加到服务器的分区 - server1 只有一个驱动器,server2 有两个分区,server3 只有一个,server4 有 5 个分区。我需要将此与来自 Nagios 的报告的第二个文件进行比较,该文件是受监控的。我需要找到未监控的 P1-P5 和服务器名称...
-
我想,我需要:如果 dDrive 为空白 - 无效值,继续 eDrive... 如果 dDrive 的值大于 0,请尝试 select-string...
-
请解释(在您的问题中)您如何从两个输入文件到概述的输出(否则更正您的示例)。我完全不清楚你的标准是什么。
标签: csv powershell compare