使用导入CSV整合数据

时间:2017-08-21 12:42:03

标签: powershell csv export-to-csv import-csv

我试图找到一种在导出之前收集数据的方法,以从文件中获取其他数据并合并然后导出。

我的代码如下:从多个来源查找用户和计算机并整合数据→创建2列的列(名称,计算机)→将该数据导出到output.log

因为我正在寻找的数据会不时地动态变化我希望每天多次运行脚本,所以 下次运行从output.log获取数据到数组→继续收集新数据并将它们添加到现有的output.log中。

目前,我每次运行代码时都会卡在那里,它会覆盖output.log。

我的代码就像:

Set-Variable -Name Computer -Value @("pc1","pc2")
Set-Variable -Name LogNames -Value @("something")

$el_c = @()
foreach ($comp in $Computer) {
  foreach ($log in $LogNames) {
    $el = ...    # get data I need from $comp
    $el_c += $el  #consolidating
  }
}

$el_c | %{
  $_ | select @{n='Name';e={$_.Properties[0].value}}, @{n='Computer';e={$_.Properties[1].value}}
} | Export-Csv "C:\test\OutputRaw.log"
$input = 'C:\test\OutputRaw.log'  #TO FILTER OUT DUPLICATION
$inputCsv = Import-Csv $input | Sort-Object * -Unique 
$inputCsv | Export-Csv "C:\test\OutputFinal.log" -NoTypeInformation

输出是:

"Name","Computer"
"Dan","PC1"
"Tom","PC2"

如何在提取到文件之前实现它还要从" output.log"获取数据。并合并/添加/合并到新收集的数据中?

4 个答案:

答案 0 :(得分:0)

使用-Append的{​​{1}}参数:

Export-CSV

答案 1 :(得分:0)

假设已经创建了一个日志(我称之为Log.csv)($Computer | Export-CSV .\Log.csv):

Import-CSV .\Log.csv | LeftJoin $Computer Name -Merge {$Right.$_} | Export-CSV .\Log.csv

有关LeftJoinJoin-Object)的详细信息,请参阅:https://stackoverflow.com/a/45483110/1701026

答案 2 :(得分:0)

感谢Paul的帮助,我使用-Append然后在最后添加了另一个过滤器重复。

$el_c | %{
  $_ | select @{n='Name';e={$_.Properties[0].value}}, @{n='Computer';e={$_.Properties[1].value}}
} | Export-Csv "C:\test\OutputRaw.log"
$input = 'C:\test\OutputRaw.log'
$inputCsv = Import-Csv $input | Sort-Object * -Unique
$inputCsv | Export-Csv "C:\test\OutputFinal.log" -Append -NoTypeInformation
$input = 'C:\test\OutputFinal.log'
$inputCsv = Import-Csv $input | Sort-Object * -Unique
$inputCsv | Export-Csv "C:\test\OutputFinal.log"  -NoTypeInformation

答案 3 :(得分:0)

使用管道和Compare-Object。将else语句移动到内部select循环中。

foreach