2016-07-27 3 views
0

У меня есть некоторые данные, которые я пытаюсь вытолкнуть в 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: Невозможно добавить содержимое CSV к следующему файлу: C: \ T2 \ Test.csv. Приложенный объект не имеет свойства, которое соответствует следующему столбцу: Mac OS:. Чтобы продолжить с ошибками , добавьте параметр -Force, а затем повторите команду . В C: \ T2 \ Test.ps1: 9 char: 15 + $ MacHeading | Экспорт-CSV-путь $ ExportFile -Append + ~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidData: (Mac OS:: String) [Export-Csv], InvalidOperationException + FullyQualifiedErrorId: CannotAppendCsvWithMismatchedPropertyNames, Microsoft.PowerShell.Commands.ExportCsvCommand

+0

Вы пытались добавить параметр -Force, как подсказывает сообщение об ошибке? Если да, то каковы были результаты? – morgb

+0

Результаты: #TYPE System.String Длина Таковы результаты после использования опции -Force. Похоже, что описания или данные мусора не уверены. – JRN

ответ

1

в то время как вы можете создать файл CSV вручную, как правило, громоздки и вы должны будут соответствовать заголовкам столбцов при добавлении данных вручную.

В вашем коде выше вы начинаете csv, создавая файл csv с одним заголовком \ column 'mac os'. 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 
+0

Блестящий Киран. Большое вам спасибо, что вы были первым человеком, который действительно дал мне ответ на этот вопрос. Я, должно быть, потратил легко 6-7 часов, исследуя его, и вы решили его через несколько минут. Огромное спасибо!!! – JRN

0
$comps=Get-ADComputer -Filter { OperatingSystem -Like '*MAC*' } -Properties OperatingSystem,CanonicalName 
0

Если вы готовы пойти без $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 

Ключом является использование Out-File вместо Out-CSV для предметов, которые не будут действительно создавать CSV.

Смежные вопросы