2012-08-16 45 views
0

我有用C#編寫的自定義CmdLet,它返回對象數組。出於測試目的,他們是匿名的。對象數組上的PowerShell Select-Object propertyName

protected override void ProcessRecord() 
    { 
     var anonType1 = new { name = "Mikey", description = "Brown" }; 
     var anonType2 = new { name = "Davo", description = "Green" }; 

     List<object> stuff = new List<object>(); 
     stuff.Add(anonType1); 
     stuff.Add(anonType2); 

     this.WriteObject(stuff.ToArray()); 
    } 

這使得在PS2以下的輸出:

name  description 
----  ----------- 
Mikey  Brown 
Davo  Green 

如果我使用選擇-對象名稱我希望只是排除了「說明」屬性,並得到米奇和DAVO堆疊在彼此,但沒有!我得到:

name 
---- 

我的數據在哪裏!?

感謝

盧克

作爲一個側面:沒有人知道編程的cmdlet一個良好的學習資源,並與PS的內部(而不是PS的使用其中大部分書都是有關)工作?鉭

UPDATE

即使我做出強有力的類型,新數起來,把它們放在一個PSDataCollection因爲我希望這是行不通的。我的期望顯然是錯誤的。如何正確輸出數據集合到管道?

解決

我們必須設置enumerateCollection =真。聽起來很愚蠢,但我們沒有使用WriteObject保護的方法,而是使用我們自己的WriteToAvailableOutput,它從Visual Studio中轉移到調試器!所以我們看不到WriteObject上額外的重載 - dhuurr!

+0

而不是寫你的問題的解決方案,你應該寫在下面單獨的答案,並將其標記爲接受的答案。 – SpellingD 2012-08-16 16:18:04

+0

是的。我想,因爲這首先是一個愚蠢的問題,所以對於爲它作出完整的回答,我感到有點愚蠢! – 2012-08-18 17:21:35

回答

0

答案是使用WriteObject重載並將enumerateCollection參數設置爲true。

this.WriteObject(stuff.ToArray(), true); 

愚蠢的我。