無論如何發現任何人做到這一點。我想要一個從數據庫創建輸出的cmdlet。沒有具體的模式,每個'行'可以有不同的字段。在像JavaScript這樣的東西沒有問題,每個對象都會有它需要的任何屬性;但powershell不是那樣的。通過powershell管道推送expandos
我嘗試了一個天真的實現,但我得到的是一個枚舉的Key,Value字典,expandos假裝是。
擴大問題。
get-datarows cmdlet應該按下管道的什麼對象(它接受任意查詢)。我不知道要實例化和推送什麼對象類型。一個數據庫查詢可以返回一行User = dave,Age = 12,然後用User = pete,Favcol = red的另一行。下一次運行cmdlet時,查詢可能會返回完全不同的結果(Type = shoe,color = red,use = dancing)。能夠實例化一個管道expandos在這裏完美的工作(除非沒有)
我迄今爲止最好的去使用reflection.emit生成一個類型,但這需要我知道對象。我可以通過查看數據庫查詢返回的第一個對象來實現,但這可能不具有所有可能的屬性(如上面的前兩個用戶行)。我可以一直讀到最後;使型,快退和動態創建類型的推動情況,但那不是很有效
EDIT2:更澄清
我在C#編碼
我希望能夠做
mycmdlet -query "users" | ft
或
mycmdlet -query "products;type=shoe,size>1" | make-pretty
我不希望用戶必須做大量的數據整形;這就是cmdlet的全部用途
在PowerShell中,每個對象都可以有自己的屬性。這會導致表格格式化的一些問題,但可以完成。我會建議避免這個。也許在行不具有的字段上使用空白值。 – JasonMArcher 2011-06-17 20:50:07