无论如何发现任何人做到这一点。我想要一个从数据库创建输出的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