Powershell:CSV的自定义对象

Powershell:CSV的自定义对象,csv,powershell,object,Csv,Powershell,Object,我创建了自定义对象,它基本上在键中存储日期和几个整数: $data = [Ordered]@{ "Date" = $currentdate.ToString('dd-MM-yyyy'); "Testers" = $totalTesterCount; "StNoFeedback" = $tester_status.NoFeedback; "StNotSolved" = $tester_status.NotSolved; "StSolved" = $teste

我创建了自定义对象,它基本上在键中存储日期和几个整数:

$data = [Ordered]@{
    "Date" = $currentdate.ToString('dd-MM-yyyy');
    "Testers" = $totalTesterCount;
    "StNoFeedback" = $tester_status.NoFeedback;
    "StNotSolved" = $tester_status.NotSolved;
    "StSolved" = $tester_status.Solved;
    "StNoIssues" = $tester_status.NoIssues;
    "OSNoFeedback" = $tester_os.NoFeedback;
    "OSW7" = $tester_os.W7;
    "OSW10" = $tester_os.W10;
    "OfficeNoFeedback" =  $tester_Office.NoFeedback;
    "OfficeO10" = $tester_Office.O10;
    "OfficeO13" = $tester_Office.O13;
    "OfficeO16" = $tester_Office.O16;
}
我需要输出到CSV文件的方式,每一个值都写在新的列。 我尝试使用$data | export csv dump.csv 但我的CSV看起来是这样的:

#TYPE System.Collections.Specialized.OrderedDictionary
"Count","IsReadOnly","Keys","Values","IsFixedSize","SyncRoot","IsSynchronized"
"13","False","System.Collections.Specialized.OrderedDictionary+OrderedDictionaryKeyValueCollection","System.Collections.Specialized.OrderedDictionary+OrderedDictionaryKeyValueCollection","False","System.Object","False"
甚至不接近我想要达到的目标。如何更接近:

date,testers,stnofeedback....
04-03-2016,2031,1021....

我创建这个对象是因为它应该很容易导出为csv。也许有完全不同的更好的方法?还是我的对象缺少什么?

您没有创建对象,而是创建了一个有序字典。字典不能直接导出到CSV,因为它是一个包含多个键值项的单个对象

([ordered]@{}).GetType()

IsPublic IsSerial Name              BaseType     
-------- -------- ----              --------     
True     True     OrderedDictionary System.Object
要导出字典,需要使用GetEnumerator逐个获取对象,这将导致以下CSV:

$data = [Ordered]@{
    "Date" = (get-date).ToString('dd-MM-yyyy')
    "Testers" = "Hello world"
}

$data.GetEnumerator() | ConvertTo-Csv -NoTypeInformation
"Name","Key","Value"
"Date","Date","04-03-2016"
"Testers","Testers","Hello world"
如果需要单个对象,请使用[pscustomobject]@{}将属性哈希表强制转换为PSObject

或者,如果您使用的是PS 1.0或2.0:

$data = New-Object -TypeName psobject -Property @{
    "Date" = (get-date).ToString('dd-MM-yyyy')
    "Testers" = "Hello world"
}

$data | ConvertTo-Csv -NoTypeInformation
"Testers","Date"
"Hello world","04-03-2016"

你在这个问题上做了什么研究?你有没有看到一些有用的链接,比如?挑剔:有序字典是一个对象。它不是一个导出Csv知道如何分离的对象。因此,PSCustomObjects实际上是一种特殊类型的集合对象,它不支持包含的foreach管道,除非专门调用getenumerator。如果在c foreach循环中使用它,您也会遇到同样的问题:-
$data = New-Object -TypeName psobject -Property @{
    "Date" = (get-date).ToString('dd-MM-yyyy')
    "Testers" = "Hello world"
}

$data | ConvertTo-Csv -NoTypeInformation
"Testers","Date"
"Hello world","04-03-2016"