输出数组为CSV [英] Output arrays to CSV

查看:100
本文介绍了输出数组为CSV的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个CSV:


  1. 总计19_01_16.csv

hostname,user,path,size,creation,LastAccess,Copied,NewName,Completed
comp1,user1,\\comp1\users1\file.pst,100,17/02/2015,17/01/2016,Yes,file_user1_.pst,
comp1,user1,\\comp1\users1\file2.pst,200,17/02/2015,17/01/2016,Yes,file2_user1_.pst,
comp2,user2,\\comp2\users2\file.pst,100,17/02/2015,17/01/2016,Yes,file_user2_.pst,


  • PST Passwords.csv

    user,Path,Password1,Password2,Password3,Error
    user1,\\comp1\users1\file.pst,openme,openme,openme,


  • 我正在尝试合并具有不同标题和其他内容的两者。
    这就是我到目前为止所拥有的:

    I'm trying to merge the two with different headers and additional content. This is what I have so far:

    $a = Import-Csv "$PST_PARENT\DailyReports\Total 19_01_16.csv"
    "Hostname,User,PST_Name,Original_Path,New_Path,Size,AcceptableLoss,Password1,Password2,Password3" |
      Set-Content "$PST_PARENT\DailyReports\New Build.csv"
    
    $a | foreach {
      $HOSTNAME  = $_.hostname
      $USER      = $_.User 
      $PATH      = $_.path
      $NEW_NAME  = $_.NewName
      $NEWPATH   = "$PST_SHARE\$USER\$NEW_NAME"
      $SIZE      = $_.Size
      $SIZE_FAIL = ( [convert]::ToSingle( $SIZE ) / 2 )
    
      $b = Import-Csv "$PST_PARENT\DailyReports\PST Passwords.csv"
    
      $b | foreach {
        if ( $USER -like $b.user ) {
          $PASSWORD1 = $b.password1 
          $PASSWORD2 = $b.password2
          $PASSWORD3 = $b.password3
        } else {
          $PASSWORD1 = "none"
          $PASSWORD2 = "none"
          $PASSWORD3 = "none"
        }
      }
    
      $HOSTNAME,$USER,$NEW_NAME,$PATH,$NEWPATH,$SIZE,$SIZE_FAIL,$PASSWORD1,$PASSWORD2,$PASSWORD3 | 
        Add-Content "$PST_PARENT\DailyReports\New Build.csv"
    }
    

    New Build.csv 的输出如下所示:

    Hostname,User,PST_Name,Original_Path,New_Path,Size,AcceptableLoss,Password1,Password2,Password3
    comp1
    user1
    file.pst
    \\comp1\users1\file.pst
    \\share\PST_Storage\file_user1_.pst
    100
    5
    none
    none
    none

    本质上,输出是有效的,只是不滚动每一行,而是将每个数组放到新行中。
    我尝试添加 | ConvertTo-Csv -NoTypeInformation ,但所做的只是将数组转换为数字,它们仍然没有消失。

    In essence the output is working, it's just not scrolling for each line, it's putting each array onto a new line. I tried adding | ConvertTo-Csv -NoTypeInformation but all that did was convert the arrays to numbers, they still went down not across.

    有什么想法吗?我是在正确的路线上还是在做整个事情时非常错误?

    Any ideas? Am I on the right line or doing the whole thing so very wrong?

    推荐答案

    $ HOSTNAME,$ USER,... 定义一个数组,该数组每行一个元素写入输出文件。您需要将列表用双引号引起来,以将其转换为逗号分隔的字符串,然后可以将其作为一行写到输出文件中。

    $HOSTNAME,$USER,... defines an array, which is written to the output file one element per line. You need to put the list in double quotes to turn it into a comma-separated string that you can write to the output file as a single line.

    "Hostname,User,PST_Name,Original_Path,New_Path,Size,AcceptableLoss,Password1,Password2,Password3" |
      Set-Content "$PST_PARENT\DailyReports\New Build.csv"
    
    $a | foreach { 
      ...
      "$HOSTNAME,$USER,$NEW_NAME,$PATH,$NEWPATH,$SIZE,$SIZE_FAIL,$PASSWORD1,$PASSWORD2,$PASSWORD3"
    } | Add-Content "$PST_PARENT\DailyReports\New Build.csv"
    

    或您构建自定义可以通过 Export-Csv 导出的元素中的对象。

    or you construct a custom object from the elements that you can export via Export-Csv.

    $a | foreach { 
      ...
      New-Object -Type PSCustomObject -Property @{
        'Hostname'  = $HOSTNAME
        'User'      = $USER
        'NewName'   = $NEW_NAME
        'Path'      = $PATH
        'NewPath'   = $NEWPATH
        'Size'      = $SIZE
        'SizeFail'  = $SIZE_FAIL
        'Password1' = $PASSWORD1
        'Password2' = $PASSWORD2
        'Password3' = $PASSWORD3
      }
    } | Export-Csv "$PST_PARENT\DailyReports\New Build.csv" -NoType
    

    这篇关于输出数组为CSV的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆