使用导入 CSV 合并数据



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

我的代码是这样的:从许多来源查找用户和计算机并合并数据→创建 2 列数组(名称、计算机(→将该数据导出到输出.log

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

目前,我被困在每次运行代码时都会覆盖输出的地方.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:testOutputRaw.log"
$input = 'C:testOutputRaw.log'  #TO FILTER OUT DUPLICATION
$inputCsv = Import-Csv $input | Sort-Object * -Unique 
$inputCsv | Export-Csv "C:testOutputFinal.log" -NoTypeInformation

输出为:

"名称","计算机" "Dan","PC1" "Tom","PC2">

如何在提取到文件之前实现这一点,也从"输出.log"中获取数据并合并/添加/合并到新收集的数据中?

使用Export-CSV-Append参数

Export-Csv "C:testOutput.log" -Append

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

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

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

$Computer = 'pc1', 'pc2'
$LogNames = 'something'
$csv = 'C:testOutputFinal.log'
$ref = Import-Csv $csv
$Computer | ForEach-Object {
$comp = $_
foreach ($log in $LogNames) {
... |      # get data from $comp
select @{n='Name';e={$_.Properties[0].value}},
@{n='Computer';e={$_.Properties[1].value}}
}
} | Where-Object {
Compare-Object $_ $ref -Property 'Name','Computer' -IncludeEqual -ExcludeDifferent
} | Export-Csv $csv -Append -NoType

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

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

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

最新更新