2009-01-14 14 views
10

Actualmente estoy reuniendo algunos cmdlets de Powershell. Construirlos es bastante fácil pero no sé si los estoy construyendo de una manera aceptable (por así decirlo).Mejores prácticas de desarrollo de cmdlets de Powershell

¿Existen directrices/mejores prácticas que se deben seguir para pasar datos a la tubería de Powershell? Por el momento, me sale un solo objeto de tipo DataSet; si algún cmdlet quisiera usarlo en sentido descendente, entonces deberían pasar por encima de las DataTables en ese DataSet, y luego recorrer las DataRows en cada DataTable.

Supongo que la pregunta es ... ¿voy a hacer esto? ¿O debería estar produciendo datos que son intrínsecamente un montón de filas?

Gracias a todos por adelantado

-jt

Respuesta

8

que es aceptable para dar salida a cualquier tipo de objeto se utiliza para representar mejor lo que estás escribiendo - un conjunto de datos es absolutamente bien. La única advertencia posible es que v2 de PowerShell puede encontrarse ejecutando en una versión reducida de .NET Framework (como en Server Core), por lo que si ese es un posible escenario para sus cmdlets, debe tener precaución para asegurarse de que el El objeto que está produciendo existe en cada sistema en el que se podría usar su cmdlet.

Dicho todo esto, la tubería funciona mejor cuando contiene colecciones de objetos; un DataSet no es una colección per se. En otras palabras, desea que los cmdlets en sentido descendente puedan recibir un objeto a la vez a través de la canalización, de modo que esos cmdlets no tengan que enumerarse manualmente a través de un objeto. No sé mucho sobre lo que está haciendo exactamente, bien podría ser que un DataSet sea totalmente apropiado, pero generalmente preferiría ver un bucle de cmdlet a través del DataSet internamente, crear sus propios objetos personalizados (para que cada columna en la tabla se convierte en una propiedad), y la salida de esos objetos a la tubería. Eso simplemente aumenta la cantidad de cmdlets en sentido descendente que pueden consumir lo que está generando.

Una prueba simple es canalizar la salida de su cmdlet a Export-CSV. Si funciona (y probablemente no lo haría con un DataSet), entonces está haciendo lo correcto generalmente. Ahora bien, es posible que necesite crear un cmdlet que emita un DataSet y solo tiene la intención de para otros cmdlets que haya escrito (que consuman DataSets) para operar con ese resultado. Nada de malo con eso. Sin embargo, la flexibilidad máxima es solo objetos, ya que permite que todos los cmdlets del núcleo de PowerShell trabajen en su salida.

Espero que ayude.

Cuestiones relacionadas