【问题标题】:Output arrays to CSV将数组输出到 CSV
【发布时间】:2016-01-19 16:18:22
【问题描述】:

我有两个 CSV:

  1. Total 19_01_16.csv:

    主机名、用户、路径、大小、创建、上次访问、已复制、新名称、已完成
    comp1,user1,\\comp1\users1\file.pst,100,17/02/2015,17/01/2016,是,file_user1_.pst,
    comp1,user1,\\comp1\users1\file2.pst,200,17/02/2015,17/01/2016,是,file2_user1_.pst,
    comp2,user2,\\comp2\users2\file.pst,100,17/02/2015,17/01/2016,Yes,file_user2_.pst,
  2. PST Passwords.csv:

    用户,路径,密码1,密码2,密码3,错误
    user1,\\comp1\users1\file.pst,openme,openme,openme,

我正在尝试将两者与不同的标题和其他内容合并。 这是我目前所拥有的:

$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
补偿1
用户1
文件.pst
\\comp1\users1\file.pst
\\share\PST_Storage\file_user1_.pst
100
5
没有任何
没有任何
没有

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

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

【问题讨论】:

    标签: arrays csv powershell


    【解决方案1】:

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

    "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 导出的元素构造一个自定义对象。

    $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
    

    【讨论】:

    • 谢谢。对自己没有发现如此简单,如此明显的事情感到生气。新鲜的眼睛已经完成了这项工作。非常感谢。再次感谢
    猜你喜欢
    • 2017-07-22
    • 2011-06-16
    • 1970-01-01
    • 2019-12-23
    • 2017-08-12
    • 1970-01-01
    • 2021-05-28
    • 2015-10-15
    • 1970-01-01
    相关资源
    最近更新 更多