2009-01-14 6 views
10

Ich bin gerade dabei, einige Powershell-Cmdlets zusammenzustellen. Es ist einfach, sie zu bauen, aber ich weiß nicht, ob ich sie auf eine annehmbare Weise baue (sozusagen).Powershell-Cmdlets Entwicklung Best Practices

Gibt es Richtlinien/Best Practices für die Weitergabe von Daten an die Powershell-Pipeline? Im Moment gebe ich tatsächlich ein einzelnes Objekt vom Typ DataSet aus - wenn ein Cmdlet es downstream verwenden wollte, müsste es die DataTables in diesem DataSet durchlaufen und dann die DataRows in jeder DataTable durchlaufen.

Ich denke, die Frage ist .... werde ich p! Ss jemand davon, indem Sie dies tun? Oder sollte ich Daten ausgeben, die inhärent eine Reihe von Zeilen sind?

Dank alle im Voraus

-JT

Antwort

8

Es ist akzeptabel Ausgang unabhängig von der Art des Objekts am besten verwendet wird, um darzustellen, was Sie schreiben aus - ein Datensatz ist absolut in Ordnung. Die einzige mögliche Vorsichtsmaßnahme ist, dass v2 von PowerShell möglicherweise auf einer reduzierten Version von .NET Framework (z. B. auf Server Core) ausgeführt wird. Wenn dies ein mögliches Szenario für Ihre Cmdlets ist, müssen Sie daher einige Vorsicht walten lassen Das Objekt, das Sie ausgeben, existiert auf jedem System, auf dem Ihr Cmdlet verwendet werden könnte.

Alles, was gesagt wird, funktioniert die Pipeline am besten, wenn sie Sammlungen von Objekten enthält; Ein DataSet ist keine Sammlung an sich. Mit anderen Worten, Sie möchten, dass Downstream-Cmdlets über die Pipeline jeweils ein Objekt empfangen können, sodass diese Cmdlets nicht manuell durch ein Objekt aufgelistet werden müssen. Ich weiß nicht genau, was genau Sie tun - es könnte gut sein, dass ein DataSet völlig angemessen ist - aber ich würde es im Allgemeinen bevorzugen, eine Cmdlet-Schleife durch das DataSet intern zu sehen, eigene benutzerdefinierte Objekte zu erstellen (so dass Jede Spalte in der Tabelle wird zu einer Eigenschaft) und diese Objekte an die Pipeline ausgeben. Das erhöht einfach die Anzahl der nachgeordneten Cmdlets, die das verbrauchen, was Sie ausgeben.

Ein einfacher Test besteht darin, die Ausgabe Ihres Cmdlets nach Export-CSV zu leiten. Wenn es funktioniert (und es wahrscheinlich nicht mit einem DataSet), dann machst du das Richtige allgemein. Nun müssen Sie möglicherweise ein Cmdlet erstellen, das ein DataSet ausgibt, und Sie müssen nur beabsichtigen für bestimmte andere Cmdlets, die Sie geschrieben haben (die DataSets konsumieren), um mit dieser Ausgabe zu arbeiten. Daran ist nichts falsch. Die maximale Flexibilität besteht jedoch darin, dass einzelne Objekte die PowerShell-Kern-Cmdlets für die Ausgabe verwenden.

Hoffe, dass hilft.