无法将我的数据导出到 CSV
Unable to export my data to a CSV
我有一些数据要推送到 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 : Cannot append CSV content to the following file:
C:\T2\Test.csv. The appended object does not have a property that
corresponds to the following column: Mac OS: . To continue with
mismatched properties, add the -Force parameter, and then retry the
command. At C:\T2\Test.ps1:9 char:15
+ $MacHeading | Export-CSV -path $ExportFile -Append
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (Mac OS: :String) [Export-Csv], InvalidOperationException
+ FullyQualifiedErrorId : CannotAppendCsvWithMismatchedPropertyNames,Microsoft.PowerShell.Commands.ExportCsvCommand
虽然您可以手动创建一个 csv 文件,但这通常很麻烦,并且您必须在手动添加数据时匹配 header 列。
在上面的代码中,您通过创建一个包含 header\column 'mac os' 的 csv 文件来启动 csv。 macos
是一个具有各种属性的 objects,它不包含一个名为 'mac os' 的 header,因此 export-csv 不知道将数据发送到哪里。
您还缺少 -notypeinformation
到 export-csv
的切换,否则 csv 将包含额外不需要的 header 和 object 类型
你可以看看做这样的事情:
$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
$comps=Get-ADComputer -Filter { OperatingSystem -Like '*MAC*' } -Properties OperatingSystem,CanonicalName
如果您愿意不使用 $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
。
我有一些数据要推送到 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 : Cannot append CSV content to the following file: C:\T2\Test.csv. The appended object does not have a property that corresponds to the following column: Mac OS: . To continue with mismatched properties, add the -Force parameter, and then retry the command. At C:\T2\Test.ps1:9 char:15 + $MacHeading | Export-CSV -path $ExportFile -Append + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidData: (Mac OS: :String) [Export-Csv], InvalidOperationException + FullyQualifiedErrorId : CannotAppendCsvWithMismatchedPropertyNames,Microsoft.PowerShell.Commands.ExportCsvCommand
虽然您可以手动创建一个 csv 文件,但这通常很麻烦,并且您必须在手动添加数据时匹配 header 列。
在上面的代码中,您通过创建一个包含 header\column 'mac os' 的 csv 文件来启动 csv。 macos
是一个具有各种属性的 objects,它不包含一个名为 'mac os' 的 header,因此 export-csv 不知道将数据发送到哪里。
您还缺少 -notypeinformation
到 export-csv
的切换,否则 csv 将包含额外不需要的 header 和 object 类型
你可以看看做这样的事情:
$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
$comps=Get-ADComputer -Filter { OperatingSystem -Like '*MAC*' } -Properties OperatingSystem,CanonicalName
如果您愿意不使用 $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
。