2014-12-21 18 views
0

因爲在允許我向現有答案添加註釋之前需要更多信譽,所以我被迫創建了自己的問題。但我的問題是同一個,在這個線程:導出CSV或ConvertTo-CSV不同於對象

How to include all properties of all array objects in csv in powershell

在該線程所提出的解決方案將不適合我,據我可以告訴。

  • 根據屬性的數量對對象進行排序是不安全的。 僅僅因爲一個對象具有最多的屬性並不意味着它具有所有的屬性,這意味着我的CSV仍然缺少一些數據。
  • 指定後跟$對象的$ props變量的屬性|選擇$ props | Export-CSV對我來說似乎不可能。因爲我的對象是根據日誌文件中的數據創建的,所以我不知道每個可能的屬性都要提前查找。意外的條目可能會出現在日誌中,當他們這樣做時,它們可能是我的CSV中包含的最重要的數據。我試圖選擇*,但它沒有任何不同,如果它根本不存在。

任何人有任何其他的想法?希望這是足夠的信息基於其他線程。

+1

你創建一個腳本將附加到一個csv文件,或每次運行該腳本收集數據並導出到一個新的csv文件(或覆蓋現有的文件)? –

+0

你有一些我們可以玩的樣本數據嗎?有最大數量的屬性,你會得到?另一個線程中的解決方案基於不知道數據中的屬性 – Matt

回答

4

我在猜測您正在寫入新文件。由於我們沒有腳本樣本來解決,我會提供一個。這是你在找什麼?

$obj1 = [pscustomobject]@{ 
    Name = "Name1" 
    Place = "Place1" 
} 

$obj2 = [pscustomobject]@{ 
    Name = "Name2" 
    Alcohol = "Alcohol1" 
} 

$arr = $obj1, $obj2 

#Get all possible properties from the data 
$prop = $arr | % { $_.psobject.Properties | Select-Object -ExpandProperty Name } | Sort-Object -Unique 

#Export data, including all possible properties 
$arr | Select-Object $prop | Export-CSV .\Desktop\test.csv -Delimiter ";" -NoTypeInformation 

test.csv

"Alcohol";"Name";"Place" 
;"Name1";"Place1" 
"Alcohol1";"Name2"; 

(我覺得我做的這之前類似的東西在這裏,但我無法找到答案。)

+1

我不認爲它比這更簡單。好的工作......再次......我想。 – Matt

+1

這是完美的!非常感謝你。它確實強調了我的對象構造中存在的一個問題......我沒有清理屬性名稱。它並沒有傷害對象本身,但是這導致Select-Object在它碰到包含時髦字符的屬性名稱時出錯(錯誤爲'指定的通配符模式無效')。一個提醒總是消毒輸入! – JLA