【问题标题】:Creating custom objects and using the output创建自定义对象并使用输出
【发布时间】:2009-06-08 20:34:15
【问题描述】:

我正在使用以下内容从一大堆文本文件中读取一行,然后将该信息汇总到一个文件中。

$computers = Get-content computers.txt
$users = users.csv
$header = 'Computer','User','Date','Time'

Foreach ($computer in $computers)
{
$file = $computer +'.txt'

$a = import-csv $file -Header $header | Select -first 1 
$obj = New-Object PSObject
$obj | Add-Member NoteProperty Computer ($a.Computer)
$obj | Add-Member NoteProperty User ($a.User)
$obj | Add-Member NoteProperty Date ($a.Date)
$obj | Add-Member NoteProperty Time ($a.Time)

Write-Output $obj
$obj | Export-csv -path  $users -notype
}

当我运行代码时,Write-Output 按预期输出所有记录,但 Export-CSV 仅包含最后一条记录。我做错了什么?

【问题讨论】:

    标签: powershell pscustomobject


    【解决方案1】:

    每次循环迭代都会覆盖 csv 文件。我相信下面给出了假设每个​​ csv 文件只有四列(即计算机、用户、日期、时间)之后的结果:

    Get-content computers.txt | foreach-object {
        import-csv "$computer.txt" -Header $header | Select -first 1 
    } | Export-csv $users -notype
    

    【讨论】:

      【解决方案2】:

      创建一个数组变量并将每个 $obj 添加到其中。在 foreach 循环之后,导出对象数组,例如:

      $arr = @()
      
      foreach (...) {
          ...
          $arr += $obj
      }
      
      $arr | Export-csv -path  $users -notype
      

      【讨论】:

        猜你喜欢
        • 2019-08-07
        • 2017-02-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-02
        • 1970-01-01
        • 2018-04-19
        • 2020-12-17
        • 2014-09-14
        相关资源
        最近更新 更多