tutorial - Powershell cmdlets mejores prácticas de desarrollo
powershell update (2)
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).
¿Hay alguna guía / mejores prácticas que uno debe 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 tendría que recorrer las DataTables en ese DataSet, luego recorrer las DataRows en cada DataTable.
Supongo que la pregunta es ... ¿Voy a pedirle a alguien que haga esto? ¿O debería estar produciendo datos que son intrínsecamente un montón de filas?
Gracias de antemano
-JT
Es aceptable generar el tipo de objeto que mejor se utilice para representar lo que estás escribiendo: un DataSet está 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 con un DataSet), entonces estás haciendo lo correcto en general . Ahora bien, es posible que necesite crear un cmdlet que genere un DataSet y solo tiene la intención de que otros cmdlets que haya escrito (que consumen DataSets) funcionen contra 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.
MSDN tiene un sorprendente conjunto de Directrices de desarrollo de cmdlet que encontré extremadamente útiles al desarrollar las mías. Se dividen en tres secciones diferentes: