【问题标题】:Unable to export my data to a CSV无法将我的数据导出到 CSV
【发布时间】:2016-12-01 11:27:16
【问题描述】:

我有一些数据正在尝试推送到 CSV,但它一直失败。有什么建议吗?

Import-Module ActiveDirectory

$ExportFile = "C:\T2\Test.csv"

$MacHeading = "Mac OS: "
$MACOS = Get-ADComputer -Filter 'OperatingSystem -like "MAC*"' -Properties OperatingSystem, CanonicalName | Select Name, CanonicalName, OperatingSystem
$MACOSCount = Get-ADComputer -Filter 'OperatingSystem -like "MAC*"' | Measure-Object | %{$_.Count}

$MacHeading | Export-CSV -path $ExportFile -Append
$MACOS | Export-CSV -path $ExportFile -Append
$MACOSCount | Export-CSV -path $ExportFile -Append

我的错误信息是:

Export-CSV:无法将 CSV 内容附加到以下文件: C:\T2\Test.csv。附加对象没有属性 对应于以下列: Mac OS: .继续 不匹配的属性,添加 -Force 参数,然后重试 命令。在 C:\T2\Test.ps1:9 char:15 + $Mac 标题 |导出-CSV -path $ExportFile -Append + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidData: (Mac OS: :String) [Export-Csv], InvalidOperationException + FullyQualifiedErrorId : CannotAppendCsvWithMismatchedPropertyNames,Microsoft.PowerShell.Commands.ExportCsvCommand

【问题讨论】:

  • 您是否尝试按照错误消息的提示添加 -Force 参数?如果有,结果如何?
  • 结果是:#TYPE System.String Length 8 这些是使用-force选项后的结果。它似乎是描述或垃圾数据不确定。

标签: powershell active-directory export-to-csv


【解决方案1】:

虽然您可以手动创建 csv 文件,但它通常很麻烦,并且您必须在手动添加数据时匹配列标题。

在上面的代码中,您通过创建一个带有一个标题\列“mac os”的 csv 文件来启动 csv。 macos 是一个具有各种属性的对象,它不包含名为“mac os”的标头,因此 export-csv 不知道将数据发送到哪里。

你也错过了-notypeinformation 切换到export-csv 没有它,csv 将包含一个额外的不需要的带有对象类型的标题

你可以看看做这样的事情:

$comps = Get-ADComputer -Filter 'OperatingSystem -like "MAC*"'  -Properties OperatingSystem, CanonicalName | 
      Select-Object @{N='MacHeading';e={'Mac OS'}},Name, CanonicalName, OperatingSystem 

$comps | 
 ForEach-Object -Begin {$i = 0} -Process {$I++; $_ | Add-Member -Name ID -Value $i -MemberType NoteProperty -PassThru} | 
  Export-Csv -Path $path -NoTypeInformation

【讨论】:

  • 辉煌的基兰。非常感谢你是第一个真正给我答案的人。我肯定花了 6-7 个小时轻松研究它,而您在几分钟内解决了它。非常感谢!!!
【解决方案2】:
$comps=Get-ADComputer -Filter { OperatingSystem -Like '*MAC*' } -Properties OperatingSystem,CanonicalName

【讨论】:

    【解决方案3】:

    如果您愿意不使用 $MacHeading(这对于 CSV 来说不是非常有用),您可以这样做:

    Get-ADComputer -Filter 'OperatingSystem -like "MAC*"' -Properties OperatingSystem, CanonicalName | 
        Select Name, CanonicalName, OperatingSystem |
        Export-CSV -path $ExportFile -Append -NoTypeInformation
    Get-ADComputer -Filter 'OperatingSystem -like "MAC*"' | 
        Measure-Object | %{$_.Count} | 
        Out-File $ExportFile -Append -Encoding ASCII
    

    对于不会真正生成 CSV 的项目,关键是使用 Out-File 而不是 Out-CSV

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      • 2016-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多