1

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

我的代码是这样的:从多个来源查找用户和计算机并整合数据→创建 2 列(名称、计算机)的数组→将该数据导出到 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

输出是:

“名称”、“计算机”
"丹","PC1"
"汤姆","PC2"

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

4

4 回答 4

0

使用的-Append参数Export-CSV

Export-Csv "C:\test\Output.log" -Append
于 2017-08-21T13:12:31.743 回答
0

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

于 2017-08-21T14:01:43.430 回答
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
于 2017-08-21T14:19:06.243 回答
0

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

$Computer = 'pc1', 'pc2'
$LogNames = 'something'

$csv = 'C:\test\OutputFinal.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
于 2017-08-21T14:40:49.810 回答