【问题标题】:Create a CSV file from text file从文本文件创建 CSV 文件
【发布时间】:2016-10-15 08:41:12
【问题描述】:

我的脚本会输出任何托管网站的文本文件。文本文件如下所示:

默认
设置
布局
Stackexchangelogon

我需要将它们放入带有以下标题的 CSV 文件中:

  • 类型
  • 基础
  • 状态

对于类型,我需要网站名称 Base,我需要它来拥有 IIS,对于状态,我需要被监控。

最终的输出会是这样的,

类型基本状态
默认 IIS 受监控
设置 IIS 监控
受监控的 IIS 布局
Stackexchangelogon IIS 受监控

我已经在网上搜索过,但仍然对如何实现这一点感到困惑。由于 Windows 2003 主机,它需要在 PowerShell 2.0 上运行。

这是我目前所拥有的 -

$website = Get-content "D:\Websites.txt"

$CSV = @()
$row = New-Object System.Object
$website | ForEach-Object {
  $row | Add-Member -MemberType NoteProperty -Force -Name "Type" -Value $_
  $row | Add-Member -MemberType NoteProperty -Force -Name "Base" -Value "IIS"
  $row | Add-Member -MemberType NoteProperty -Force -Name "Status" -Value "Monitored"

  $CSV += $row
}

但它没有添加每个网站。我得到了列表中最后一个的重复。结果:

类型基本状态
---- ---- ------
Stackexchangelogon IIS 受监控
Stackexchangelogon IIS 受监控
Stackexchangelogon IIS 受监控
Stackexchangelogon IIS 受监控

有什么想法吗?

【问题讨论】:

    标签: csv powershell powershell-2.0


    【解决方案1】:

    您问题中的代码不起作用,因为您在循环外创建了$row,而只是在循环内修改了这个对象。 $CSV += $row 然后将 reference 附加到数组中的对象。因此,您的数组中填充了对同一对象的引用,并且输出显示了循环后该单个对象的最终状态。

    有几种方法可以避免这种情况,例如通过每次迭代创建一个新对象(就像您在 your own answer 中所做的那样),或者将对象的 clone 附加到数组中:

    $CSV += $row.PSObject.Copy()
    

    但是,这两种方法都不是最理想的,因为它们没有正确使用管道。使用calculated properties 可以大大简化您的代码:

    Get-Content 'D:\Websites.txt' |
        Select-Object @{n='Type';e={$_}}, @{n='Base';e={'IIS'}},
                      @{n='Status';e={'Monitored'}} |
        Export-Csv 'D:\test.csv' -NoType
    

    【讨论】:

      【解决方案2】:

      使用 -

      解决
      $website = Get-content "D:\Websites.txt"
      
      $CSV = @()
      $website | ForEach-Object {
          $row = New-Object System.Object
          $row | Add-Member -MemberType NoteProperty -Force -Name "Type" -Value $_
          $row | Add-Member -MemberType NoteProperty -Force -Name "Base" -Value "IIS"
          $row | Add-Member -MemberType NoteProperty -Force -Name "Status" -Value "Monitored"
      
          $CSV += $row
      }
      
      $CSV | Export-Csv "d:\test.csv" -NoTypeInformation
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-17
        • 1970-01-01
        • 1970-01-01
        • 2015-05-10
        相关资源
        最近更新 更多