Nuevas recetas

El monstruo de las galletas cubre 'Call Me Maybe'

El monstruo de las galletas cubre 'Call Me Maybe'


'Barrio Sésamo' ha convertido el éxito del pop en 'Share It Maybe', quizás la mejor portada con diferencia

Si no has escuchado un solo video de cover / baile de "Call Me Maybe" (haz clic en aquí, y aquí, y aquí), entonces este es el que debe hacer clic. plaza Sésamo toma el éxito viral de Carly Rae Jepsen, lo cambia y deja que el Monstruo de las Galletas muestre sus habilidades para cantar.

El adorable Cookie Monster babea sobre un plato de galletas que siempre parece estar fuera de su alcance. Una canción de amor se convierte en una búsqueda de galletas, especialmente en la intro: "Tu galleta mostrando / y mi hambre crece / dejemos fluir la leche descremada / comenzaremos con este bocadillo bebé".

¿En cuanto al coro? "Oye, te acabo de conocer / y esto es una locura / pero tienes galleta / ¿entonces compartirla tal vez? / Es difícil mirar / tu bocadillo bebé / pero tienes galleta / así que compartirla tal vez?" Cue baile y aplausos sincronizados.

Jessica Chou es editora asociada de The Daily Meal. Síguela en twitter @jesschou.


Construyendo un módulo de PowerShell

Hace un tiempo, alguien mencionó que podría ser divertido documentar el proceso de escritura del módulo de PowerShell. Esto se ha hecho antes, pero creo que sería divertido publicar mi propio proceso, desde la idea inicial hasta la publicación en el sitio oficial de PowerShellGallery.com.

Recientemente hablé del rompecabezas de August Scripting Games en PowerShell.org, que implicaba consultar una API web. Resulta que esta es una necesidad muy común, y muchos de los módulos que escribimos resumen estas API en prácticas funciones y módulos de PowerShell.

Vamos a suponer que sabe qué es un módulo y que tiene algo de experiencia escribiendo funciones de PowerShell. Si no es así, asegúrese de dedicar un tiempo a aprender PowerShell antes de continuar aquí.

Esta publicación cubrirá mi fórmula típica para escribir un módulo, usando la API de Stack Exchange como ejemplo. No dude en navegar por el código de PSStackExchange por su cuenta.

¿Por qué módulos?

Las funciones avanzadas lo llevarán lejos con PowerShell. Si no está escribiendo funciones hoy, asegúrese de comenzar a encapsular su código en estas herramientas reutilizables. Pero ... tienen sus límites. Aquí hay algunas razones por las que puede agrupar sus funciones avanzadas en un módulo:

  • Simplifique la organización del código
  • Agrupar funciones relacionadas juntas
  • Compartir estado entre funciones, pero no con el usuario
  • Reutilice las "funciones auxiliares" que no desea que se expongan al usuario.
  • Mejore la capacidad de detección: Find-Module MyModule o Get-Command -Module MyModule
  • Simplifique la distribución: Install-Module MyModule

En nuestro ejemplo, organizaremos un conjunto de funciones de Stack Exchange en un módulo.

¡Esto parece complicado!

Hacer esto desde cero puede llevarle un poco de tiempo. Afortunadamente, una vez que escribe uno o dos módulos, puede comenzar rápidamente copiándolo y ajustando algunos archivos. No se asuste por la longitud de esta publicación; ¡vale la pena dedicar unos minutos a aprender los conceptos básicos para escribir sus propios módulos!

Los ingredientes

Hay muchas formas de crear un módulo, desde colocar una extensión .psm1 en un archivo, hasta compilar un módulo binario completo desde C #. Tomaremos un término medio común aquí y usaremos los siguientes ingredientes:

  • Un manifiesto de módulo. Este es un archivo .psd1 que describe su módulo. PSStackExchange.psd1
  • Un módulo raíz. En nuestro caso, un archivo .psm1 del módulo de script. Este es solo el código de PowerShell para ejecutar al importar el módulo. PSStackExchange.psm1
  • Funciones exportadas (públicas). Estas son las funciones avanzadas que un usuario final puede ejecutar desde nuestro módulo. Por ejemplo, Get-SEQuestion.ps1 o Get-SEObject.ps1
  • Funciones privadas. Estas son "funciones auxiliares" opcionales que queremos usar en nuestras funciones exportadas, que el usuario final no debería ver. Por ejemplo, Add-ObjectDetail.ps1 o Join-Parts.ps1
  • Formatos. Estos son formatos opcionales format.ps1xml para ayudar a decorar su salida, a menudo especificados en el manifiesto del módulo "FormatsToProcess". PSStackExchange.Format.ps1xml
  • Léame. Si está utilizando GitHub u otro repositorio de código común, Readme.md es una página de inicio útil para su proyecto, escrita usando Markdown simple en lugar de HTML
  • Configuración de AppVeyor. Si está utilizando una solución de control de versiones compatible, AppVeyor permite una integración y entrega continuas, simples y gratuitas para proyectos de código abierto. AppVeyor.yml

Tenemos nuestros ingredientes, ¡echemos un vistazo a la receta de un módulo!

La receta

Haremos esto en unos pocos pasos rápidos:

  • Crea un repositorio de GitHub
  • Crea el módulo y el andamio a su alrededor.
  • Conecta AppVeyor y publica el módulo

Esto puede llevar unos minutos la primera vez que lo revise, pero puede pedir prestado y modificar este mismo andamiaje para cada módulo que escriba. De hecho, puede encontrar o escribir módulos y herramientas auxiliares de PowerShell que simplifiquen este proceso.

Seguir la receta

No hay un orden real para esto dependiendo de lo que haga o no incorpore, no sienta que deba seguir esto al pie de la letra.

Crea un repositorio de GitHub.

Esto debería ser bastante sencillo. Si no ha usado GitHub antes, lo siguiente podría ayudar:

  • Cree una cuenta en GitHub, descargue GitHub para Windows
  • Cree un nuevo repositorio (lo llamaremos PSStackExchange y elegiremos la licencia MIT)
  • Clonar PSStackExchange usando GitHub para Windows

Pasemos a la parte más importante, el módulo en sí.

Cree el módulo y el andamio a su alrededor

Así es como suelo organizar mis módulos. Usaremos PSStackExchange como ejemplo, ¡sustitúyalo por su propio módulo!

    • en-US (o configuraciones regionales de su elección)
      • about_PSStackExchange.help.txt
      • Join-Parts.ps1
      • Get-SEData.ps1
      • Get-SEObject.ps1
      • Search-SEQuestion.ps1
      • Some.Library.dll
      • SomeDependency.exe

      Si vamos a agregar nuestro proyecto a GitHub o un repositorio de código similar, agregamos un poco más de scaffolding:

        • PSStackExchange (carpeta del módulo descrita anteriormente)
        • Pruebas
          • PSStackExchange.Tests.ps1
          • Appveyor.Pester.ps1

          Revisé el siguiente código para comenzar. Por lo general, solo copiaré el scaffolding de otro módulo, crearé un nuevo GUID en psd1 y ajustaré otras referencias específicas del módulo.

          En nuestro caso, tenemos algunas funciones avanzadas de Stack Exchange que, con suerte, siguen algunas de las mejores prácticas, algunas funciones auxiliares privadas que no queremos que el usuario vea y algunos otros archivos para cubrir las pruebas y la usabilidad.

          En PSStackExchange.psm1 cargamos nuestras funciones públicas y privadas. Si un módulo es un trabajo en progreso, normalmente exportaré $ Public.Basename para evitar funciones de codificación rígidas para exportar en psd1. Una vez que se lanza un módulo, trato de agregar las funciones públicas al psd1.

          Si está escribiendo un módulo, debería considerar escribir pruebas de Pester para él. Es bastante reconfortante tener un conjunto de pruebas que se ejecutan automáticamente después de cada cambio que empuja, en lugar de asumir que el código que escribe era correcto o intentar probar manualmente su código después de cada cambio. ¡Dale un tiro! Incluimos algunas pruebas superficiales en PSStackExchange.Tests.ps1.

          Por último, incluimos algunas características de usabilidad. Agregamos un tema de ayuda about_PSStackExchange, decoramos nuestra salida con el archivo PSStackExchange.Format.ps1xml y agregamos algunas notas sobre cómo instalar y usar el módulo en README.md.

          ¡Estamos listos para irnos! Veamos cómo podemos publicar este módulo para que otros lo usen y lo mejoren.

          Conecte AppVeyor y publique el módulo

          El contenido de nuestro módulo está listo para publicar. Antes de publicar esto, habilitaremos la integración continua con algunas prácticas pruebas automatizadas a través de AppVeyor.

          Primero, configuramos nuestro proyecto en AppVeyor agregando appveyor.yml al repositorio y agregando el proyecto GitHub a nuestra cuenta AppVeyor. Extraemos las llamadas a Pester en AppVeyor.Pester.ps1, usando algunas ideas de aquí.

          A continuación, enviamos los cambios que hemos realizado en nuestra computadora a GitHub. Nuestro código ahora está publicado y AppVeyor comenzará a ejecutar una compilación.

          Por último, queremos publicar nuestro módulo en la Galería de PowerShell, brindando a los usuarios finales con PowerShell 5 una forma sencilla de encontrar e instalar su módulo. Podríamos conectar esto para que se ejecute automáticamente en AppVeyor, pero ese es un tema para más adelante.

          • Inicie sesión en PowerShellGallery.com con su cuenta de Microsoft
          • Obtenga su clave API (encuéntrela aquí)
          • ¡Publica tu módulo!

          ¡Nuestro módulo ahora está disponible en la Galería de PowerShell!

          Cómo escribo módulos, resumido

          ¡Uf! Esa fue una publicación larga. Afortunadamente, la mayoría de estas cosas se pueden reutilizar en cada módulo que escriba. Repasemos los pasos:

          • Crea un repositorio de GitHub
          • Crea el módulo y el andamio a su alrededor.
          • Conecta AppVeyor y publica el módulo

          El primer y último paso toman uno o dos minutos cada uno. El módulo y los andamios que lo rodean se pueden copiar y modificar, lo que solo debería llevar unos minutos. La mayor parte de su tiempo lo dedicará a escribir las funciones avanzadas del módulo.

          PSStackExchange

          ¡El módulo está publicado y listo para usar! Estoy en otra computadora con PowerShell 5, puedo ponerme en marcha con unas pocas líneas de código:

          A continuación, se muestran algunos resultados de los ejemplos:

          Terminando

          ¡Eso es todo! Si aún no está escribiendo módulos, definitivamente debería considerarlo. ¿Busca más lectura? Aquí hay algunas referencias que pueden resultar útiles:

            - Esto es de la Cumbre de PowerShell 2014, gracias a Kirk Freiheit - Shameless plug. Incluye varias referencias. - Esto brinda una buena descripción general de la visión y los objetivos establecidos para PowerShell. Si está escribiendo módulos para consumo público, considere leer esto para evitar publicar algo tan espantoso como el complemento PVS "PowerShell" de Citrix.

          Nota al margen para proveedores

          Escribir PSStackExchange me recordó lo importante que es para los proveedores de productos empresariales proporcionar módulos de PowerShell que envuelvan la API de su producto. A pesar de una buena API y una documentación decente, escribir un módulo de PowerShell con pocas funciones para esto fue tan doloroso como envolver la API de Infoblox.

          Proveedores: si su competencia ofrece un módulo de PowerShell y usted no, es muy probable que presione por el producto de su competencia. Este es un gran valor agregado si lo hace bien y sigue las convenciones de PowerShell.

          EDITAR julio de 2016: Enlaces actualizados a PSStackExchange para enlazar a un punto específico en el tiempo. La versión actual de este proyecto puede ver actualizaciones para ilustrar cosas como PSDeploy.

          Compartir en

          Construyendo un módulo de PowerShell fue publicado el 06 de septiembre de 2015 y modificado por última vez el 24 de julio de 2016.


          Construyendo un módulo de PowerShell

          Hace un tiempo, alguien mencionó que podría ser divertido documentar el proceso de escritura del módulo de PowerShell. Esto se ha hecho antes, pero creo que sería divertido publicar mi propio proceso, desde la idea inicial hasta la publicación en el sitio oficial de PowerShellGallery.com.

          Recientemente hablé sobre el acertijo de August Scripting Games en PowerShell.org, que implicaba consultar una API web. Resulta que esta es una necesidad muy común, y muchos de los módulos que escribimos resumen estas API en prácticas funciones y módulos de PowerShell.

          Vamos a suponer que sabe qué es un módulo y que tiene algo de experiencia escribiendo funciones de PowerShell. Si no es así, ¡asegúrese de dedicar un tiempo a aprender PowerShell antes de continuar aquí!

          Esta publicación cubrirá mi fórmula típica para escribir un módulo, usando la API de Stack Exchange como ejemplo. No dude en navegar por el código de PSStackExchange por su cuenta.

          ¿Por qué módulos?

          Las funciones avanzadas lo llevarán lejos con PowerShell. Si no está escribiendo funciones hoy, asegúrese de comenzar a encapsular su código en estas herramientas reutilizables. Pero ... tienen sus límites. Aquí hay algunas razones por las que puede agrupar sus funciones avanzadas en un módulo:

          • Simplifique la organización del código
          • Agrupar funciones relacionadas juntas
          • Compartir estado entre funciones, pero no con el usuario
          • Reutilice las "funciones auxiliares" que no desea que se expongan al usuario.
          • Mejore la capacidad de detección: Find-Module MyModule o Get-Command -Module MyModule
          • Simplifique la distribución: Install-Module MyModule

          En nuestro ejemplo, organizaremos un conjunto de funciones de Stack Exchange en un módulo.

          ¡Esto parece complicado!

          Hacer esto desde cero puede llevarle un poco de tiempo. Afortunadamente, una vez que escribe uno o dos módulos, puede comenzar rápidamente copiándolo y ajustando algunos archivos. No se asuste por la longitud de esta publicación; ¡vale la pena dedicar unos minutos a aprender los conceptos básicos para escribir sus propios módulos!

          Los ingredientes

          Hay muchas formas de crear un módulo, desde colocar una extensión .psm1 en un archivo, hasta compilar un módulo binario completo desde C #. Tomaremos un término medio común aquí y usaremos los siguientes ingredientes:

          • Un manifiesto de módulo. Este es un archivo .psd1 que describe su módulo. PSStackExchange.psd1
          • Un módulo raíz. En nuestro caso, un archivo .psm1 del módulo de script. Este es solo el código de PowerShell para ejecutar al importar el módulo. PSStackExchange.psm1
          • Funciones exportadas (públicas). Estas son las funciones avanzadas que un usuario final puede ejecutar desde nuestro módulo. Por ejemplo, Get-SEQuestion.ps1 o Get-SEObject.ps1
          • Funciones privadas. Estas son "funciones auxiliares" opcionales que queremos usar en nuestras funciones exportadas, que el usuario final no debería ver. Por ejemplo, Add-ObjectDetail.ps1 o Join-Parts.ps1
          • Formatos. Estos son formatos opcionales format.ps1xml para ayudar a decorar su salida, a menudo especificados en el manifiesto del módulo "FormatsToProcess". PSStackExchange.Format.ps1xml
          • Léame. Si está utilizando GitHub u otro repositorio de código común, Readme.md es una página de inicio útil para su proyecto, escrita usando Markdown simple en lugar de HTML
          • Configuración de AppVeyor. Si está utilizando una solución de control de versiones compatible, AppVeyor permite una integración y entrega continuas, simples y gratuitas para proyectos de código abierto. AppVeyor.yml

          Tenemos nuestros ingredientes, ¡echemos un vistazo a la receta de un módulo!

          La receta

          Haremos esto en unos pocos pasos rápidos:

          • Crea un repositorio de GitHub
          • Crea el módulo y el andamio a su alrededor.
          • Conecta AppVeyor y publica el módulo

          Esto puede llevar unos minutos la primera vez que lo revise, pero puede pedir prestado y modificar este mismo andamio para cada módulo que escriba. De hecho, puede encontrar o escribir módulos y herramientas auxiliares de PowerShell que simplifiquen este proceso.

          Seguir la receta

          No hay un orden real para esto dependiendo de lo que haga o no incorpore, no sienta que deba seguir esto al pie de la letra.

          Crea un repositorio de GitHub.

          Esto debería ser bastante sencillo. Si no ha usado GitHub antes, lo siguiente podría ayudar:

          • Cree una cuenta en GitHub, descargue GitHub para Windows
          • Cree un nuevo repositorio (lo llamaremos PSStackExchange y elegiremos la licencia MIT)
          • Clonar PSStackExchange usando GitHub para Windows

          Pasemos a la parte más importante, el módulo en sí.

          Cree el módulo y el andamio a su alrededor

          Así es como suelo organizar mis módulos. Usaremos PSStackExchange como ejemplo, ¡sustitúyalo por su propio módulo!

            • en-US (o configuraciones regionales de su elección)
              • about_PSStackExchange.help.txt
              • Join-Parts.ps1
              • Get-SEData.ps1
              • Get-SEObject.ps1
              • Search-SEQuestion.ps1
              • Some.Library.dll
              • SomeDependency.exe

              Si vamos a agregar nuestro proyecto a GitHub o un repositorio de código similar, agregamos un poco más de scaffolding:

                • PSStackExchange (carpeta del módulo descrita anteriormente)
                • Pruebas
                  • PSStackExchange.Tests.ps1
                  • Appveyor.Pester.ps1

                  Revisé el siguiente código para comenzar. Por lo general, solo copiaré el scaffolding de otro módulo, crearé un nuevo GUID en psd1 y ajustaré otras referencias específicas del módulo.

                  En nuestro caso, tenemos algunas funciones avanzadas de Stack Exchange que, con suerte, siguen algunas de las mejores prácticas, algunas funciones auxiliares privadas que no queremos que el usuario vea y algunos otros archivos para cubrir las pruebas y la usabilidad.

                  En PSStackExchange.psm1 cargamos nuestras funciones públicas y privadas. Si un módulo es un trabajo en progreso, normalmente exportaré $ Public.Basename para evitar funciones de codificación rígidas para exportar en psd1. Una vez que se lanza un módulo, trato de agregar las funciones públicas al psd1.

                  Si está escribiendo un módulo, debería considerar escribir pruebas de Pester para él. Es bastante reconfortante tener un conjunto de pruebas que se ejecutan automáticamente después de cada cambio que empuja, en lugar de asumir que el código que escribe era correcto o intentar probar manualmente su código después de cada cambio. ¡Dale un tiro! Incluimos algunas pruebas superficiales en PSStackExchange.Tests.ps1.

                  Por último, incluimos algunas características de usabilidad. Agregamos un tema de ayuda about_PSStackExchange, decoramos nuestra salida con el archivo PSStackExchange.Format.ps1xml y agregamos algunas notas sobre cómo instalar y usar el módulo en README.md.

                  ¡Estamos listos para irnos! Veamos cómo podemos publicar este módulo para que otros lo usen y lo mejoren.

                  Conecte AppVeyor y publique el módulo

                  El contenido de nuestro módulo está listo para publicarse. Antes de publicar esto, habilitaremos la integración continua con algunas prácticas pruebas automatizadas a través de AppVeyor.

                  Primero, configuramos nuestro proyecto en AppVeyor agregando appveyor.yml al repositorio y agregando el proyecto GitHub a nuestra cuenta AppVeyor. Extraemos las llamadas a Pester en AppVeyor.Pester.ps1, usando algunas ideas de aquí.

                  A continuación, enviamos los cambios que hemos realizado en nuestra computadora a GitHub. Nuestro código ahora está publicado y AppVeyor comenzará a ejecutar una compilación.

                  Por último, queremos publicar nuestro módulo en la Galería de PowerShell, brindando a los usuarios finales con PowerShell 5 una forma sencilla de encontrar e instalar su módulo. Podríamos conectar esto para que se ejecute automáticamente en AppVeyor, pero ese es un tema para más adelante.

                  • Inicie sesión en PowerShellGallery.com con su cuenta de Microsoft
                  • Obtenga su clave API (encuéntrela aquí)
                  • ¡Publica tu módulo!

                  ¡Nuestro módulo ahora está disponible en la Galería de PowerShell!

                  Cómo escribo módulos, resumido

                  ¡Uf! Esa fue una publicación larga. Afortunadamente, la mayoría de estas cosas se pueden reutilizar en cada módulo que escriba. Repasemos los pasos:

                  • Crea un repositorio de GitHub
                  • Crea el módulo y el andamio a su alrededor.
                  • Conecta AppVeyor y publica el módulo

                  El primer y último paso toman uno o dos minutos cada uno. El módulo y los andamios que lo rodean se pueden copiar y modificar, lo que solo debería llevar unos minutos. La mayor parte de su tiempo lo dedicará a escribir las funciones avanzadas del módulo.

                  PSStackExchange

                  ¡El módulo está publicado y listo para usar! Estoy en otra computadora con PowerShell 5, puedo ponerme en marcha con unas pocas líneas de código:

                  A continuación, se muestran algunos resultados de los ejemplos:

                  Terminando

                  ¡Eso es todo! Si aún no está escribiendo módulos, definitivamente debería considerarlo. ¿Busca más lectura? Aquí hay algunas referencias que pueden resultar útiles:

                    - Esto es de la Cumbre de PowerShell 2014, gracias a Kirk Freiheit - Shameless plug. Incluye varias referencias. - Esto brinda una buena descripción general de la visión y los objetivos establecidos para PowerShell. Si está escribiendo módulos para consumo público, considere leer esto para evitar publicar algo tan espantoso como el complemento PVS "PowerShell" de Citrix.

                  Nota al margen para proveedores

                  Escribir PSStackExchange me recordó lo importante que es para los proveedores de productos empresariales proporcionar módulos de PowerShell que envuelvan la API de su producto. A pesar de una buena API y una documentación decente, escribir un módulo de PowerShell con pocas funciones para esto fue tan doloroso como envolver la API de Infoblox.

                  Proveedores: si su competencia ofrece un módulo de PowerShell y usted no, es muy probable que presione por el producto de su competencia. Este es un gran valor agregado si lo hace bien y sigue las convenciones de PowerShell.

                  EDITAR julio de 2016: Enlaces actualizados a PSStackExchange para enlazar a un punto específico en el tiempo. La versión actual de este proyecto puede ver actualizaciones para ilustrar cosas como PSDeploy.

                  Compartir en

                  Construyendo un módulo de PowerShell fue publicado el 06 de septiembre de 2015 y modificado por última vez el 24 de julio de 2016.


                  Construyendo un módulo de PowerShell

                  Hace un tiempo, alguien mencionó que podría ser divertido documentar el proceso de escritura del módulo de PowerShell. Esto se ha hecho antes, pero creo que sería divertido publicar mi propio proceso, desde la idea inicial hasta la publicación en el sitio oficial de PowerShellGallery.com.

                  Recientemente hablé sobre el acertijo de August Scripting Games en PowerShell.org, que implicaba consultar una API web. Resulta que esta es una necesidad muy común, y muchos de los módulos que escribimos resumen estas API en prácticas funciones y módulos de PowerShell.

                  Vamos a suponer que sabe qué es un módulo y que tiene algo de experiencia escribiendo funciones de PowerShell. Si no es así, ¡asegúrese de dedicar un tiempo a aprender PowerShell antes de continuar aquí!

                  Esta publicación cubrirá mi fórmula típica para escribir un módulo, usando la API de Stack Exchange como ejemplo. No dude en navegar por el código de PSStackExchange por su cuenta.

                  ¿Por qué módulos?

                  Las funciones avanzadas lo llevarán lejos con PowerShell. Si no está escribiendo funciones hoy, asegúrese de comenzar a encapsular su código en estas herramientas reutilizables. Pero ... tienen sus límites. Aquí hay algunas razones por las que puede agrupar sus funciones avanzadas en un módulo:

                  • Simplifique la organización del código
                  • Agrupar funciones relacionadas juntas
                  • Compartir estado entre funciones, pero no con el usuario
                  • Reutilice las "funciones auxiliares" que no desea que se expongan al usuario.
                  • Mejore la capacidad de detección: Find-Module MyModule o Get-Command -Module MyModule
                  • Simplifique la distribución: Install-Module MyModule

                  En nuestro ejemplo, organizaremos un conjunto de funciones de Stack Exchange en un módulo.

                  ¡Esto parece complicado!

                  Hacer esto desde cero puede llevarle un poco de tiempo. Afortunadamente, una vez que escribe uno o dos módulos, puede comenzar rápidamente copiándolo y ajustando algunos archivos. No se asuste por la longitud de esta publicación; ¡vale la pena dedicar unos minutos a aprender los conceptos básicos para escribir sus propios módulos!

                  Los ingredientes

                  Hay muchas formas de crear un módulo, desde colocar una extensión .psm1 en un archivo, hasta compilar un módulo binario completo desde C #. Tomaremos un término medio común aquí y usaremos los siguientes ingredientes:

                  • Un manifiesto de módulo. Este es un archivo .psd1 que describe su módulo. PSStackExchange.psd1
                  • Un módulo raíz. En nuestro caso, un archivo .psm1 del módulo de script. Este es solo el código de PowerShell para ejecutar al importar el módulo. PSStackExchange.psm1
                  • Funciones exportadas (públicas). Estas son las funciones avanzadas que un usuario final puede ejecutar desde nuestro módulo. Por ejemplo, Get-SEQuestion.ps1 o Get-SEObject.ps1
                  • Funciones privadas. Estas son "funciones auxiliares" opcionales que queremos usar en nuestras funciones exportadas, que el usuario final no debería ver. Por ejemplo, Add-ObjectDetail.ps1 o Join-Parts.ps1
                  • Formatos. Estos son formatos opcionales format.ps1xml para ayudar a decorar su salida, a menudo especificados en el manifiesto del módulo "FormatsToProcess". PSStackExchange.Format.ps1xml
                  • Léame. Si está utilizando GitHub u otro repositorio de código común, Readme.md es una página de inicio útil para su proyecto, escrita usando Markdown simple en lugar de HTML
                  • Configuración de AppVeyor. Si está utilizando una solución de control de versiones compatible, AppVeyor permite una integración y entrega continuas, simples y gratuitas para proyectos de código abierto. AppVeyor.yml

                  Tenemos nuestros ingredientes, ¡echemos un vistazo a la receta de un módulo!

                  La receta

                  Haremos esto en unos pocos pasos rápidos:

                  • Crea un repositorio de GitHub
                  • Crea el módulo y el andamio a su alrededor.
                  • Conecta AppVeyor y publica el módulo

                  Esto puede llevar unos minutos la primera vez que lo revise, pero puede pedir prestado y modificar este mismo andamio para cada módulo que escriba. De hecho, puede encontrar o escribir módulos y herramientas auxiliares de PowerShell que simplifiquen este proceso.

                  Seguir la receta

                  No hay un orden real para esto dependiendo de lo que haga o no incorpore, no sienta que deba seguir esto al pie de la letra.

                  Crea un repositorio de GitHub.

                  Esto debería ser bastante sencillo. Si no ha usado GitHub antes, lo siguiente podría ayudar:

                  • Cree una cuenta en GitHub, descargue GitHub para Windows
                  • Cree un nuevo repositorio (lo llamaremos PSStackExchange y elegiremos la licencia MIT)
                  • Clonar PSStackExchange usando GitHub para Windows

                  Pasemos a la parte más importante, el módulo en sí.

                  Cree el módulo y el andamio a su alrededor

                  Así es como suelo organizar mis módulos. Usaremos PSStackExchange como ejemplo, ¡sustitúyalo por su propio módulo!

                    • en-US (o configuraciones regionales de su elección)
                      • about_PSStackExchange.help.txt
                      • Join-Parts.ps1
                      • Get-SEData.ps1
                      • Get-SEObject.ps1
                      • Search-SEQuestion.ps1
                      • Some.Library.dll
                      • SomeDependency.exe

                      Si vamos a agregar nuestro proyecto a GitHub o un repositorio de código similar, agregamos un poco más de scaffolding:

                        • PSStackExchange (carpeta del módulo descrita anteriormente)
                        • Pruebas
                          • PSStackExchange.Tests.ps1
                          • Appveyor.Pester.ps1

                          Revisé el siguiente código para comenzar. Por lo general, solo copiaré el scaffolding de otro módulo, crearé un nuevo GUID en psd1 y ajustaré otras referencias específicas del módulo.

                          En nuestro caso, tenemos algunas funciones avanzadas de Stack Exchange que, con suerte, siguen algunas de las mejores prácticas, algunas funciones auxiliares privadas que no queremos que el usuario vea y algunos otros archivos para cubrir las pruebas y la usabilidad.

                          En PSStackExchange.psm1 cargamos nuestras funciones públicas y privadas. Si un módulo es un trabajo en progreso, normalmente exportaré $ Public.Basename para evitar funciones de codificación rígidas para exportar en psd1. Una vez que se lanza un módulo, trato de agregar las funciones públicas al psd1.

                          Si está escribiendo un módulo, debería considerar escribir pruebas de Pester para él. Es bastante reconfortante tener un conjunto de pruebas que se ejecutan automáticamente después de cada cambio que empuja, en lugar de asumir que el código que escribe era correcto o intentar probar manualmente su código después de cada cambio. ¡Dale un tiro! Incluimos algunas pruebas superficiales en PSStackExchange.Tests.ps1.

                          Por último, incluimos algunas características de usabilidad. Agregamos un tema de ayuda about_PSStackExchange, decoramos nuestra salida con el archivo PSStackExchange.Format.ps1xml y agregamos algunas notas sobre cómo instalar y usar el módulo en README.md.

                          ¡Estamos listos para irnos! Veamos cómo podemos publicar este módulo para que otros lo usen y lo mejoren.

                          Conecte AppVeyor y publique el módulo

                          El contenido de nuestro módulo está listo para publicarse. Antes de publicar esto, habilitaremos la integración continua con algunas prácticas pruebas automatizadas a través de AppVeyor.

                          Primero, configuramos nuestro proyecto en AppVeyor agregando appveyor.yml al repositorio y agregando el proyecto GitHub a nuestra cuenta AppVeyor. Extraemos las llamadas a Pester en AppVeyor.Pester.ps1, usando algunas ideas de aquí.

                          A continuación, enviamos los cambios que hemos realizado en nuestra computadora a GitHub. Nuestro código ahora está publicado y AppVeyor comenzará a ejecutar una compilación.

                          Por último, queremos publicar nuestro módulo en la Galería de PowerShell, brindando a los usuarios finales con PowerShell 5 una forma sencilla de encontrar e instalar su módulo. Podríamos conectar esto para que se ejecute automáticamente en AppVeyor, pero ese es un tema para más adelante.

                          • Inicie sesión en PowerShellGallery.com con su cuenta de Microsoft
                          • Obtenga su clave API (encuéntrela aquí)
                          • ¡Publica tu módulo!

                          ¡Nuestro módulo ahora está disponible en la Galería de PowerShell!

                          Cómo escribo módulos, resumido

                          ¡Uf! Esa fue una publicación larga. Afortunadamente, la mayoría de estas cosas se pueden reutilizar en cada módulo que escriba. Repasemos los pasos:

                          • Crea un repositorio de GitHub
                          • Crea el módulo y el andamio a su alrededor.
                          • Conecta AppVeyor y publica el módulo

                          El primer y último paso toman uno o dos minutos cada uno. El módulo y los andamios que lo rodean se pueden copiar y modificar, lo que solo debería llevar unos minutos. La mayor parte de su tiempo lo dedicará a escribir las funciones avanzadas del módulo.

                          PSStackExchange

                          ¡El módulo está publicado y listo para usar! Estoy en otra computadora con PowerShell 5, puedo ponerme en marcha con unas pocas líneas de código:

                          A continuación, se muestran algunos resultados de los ejemplos:

                          Terminando

                          ¡Eso es todo! Si aún no está escribiendo módulos, definitivamente debería considerarlo. ¿Busca más lectura? Aquí hay algunas referencias que pueden resultar útiles:

                            - Esto es de la Cumbre de PowerShell 2014, gracias a Kirk Freiheit - Shameless plug. Incluye varias referencias. - Esto brinda una buena descripción general de la visión y los objetivos establecidos para PowerShell. Si está escribiendo módulos para consumo público, considere leer esto para evitar publicar algo tan espantoso como el complemento PVS "PowerShell" de Citrix.

                          Nota al margen para proveedores

                          Escribir PSStackExchange me recordó lo importante que es para los proveedores de productos empresariales proporcionar módulos de PowerShell que envuelvan la API de su producto. A pesar de una buena API y una documentación decente, escribir un módulo de PowerShell con pocas funciones para esto fue tan doloroso como envolver la API de Infoblox.

                          Proveedores: si su competencia ofrece un módulo de PowerShell y usted no, es muy probable que presione por el producto de su competencia. Este es un gran valor agregado si lo hace bien y sigue las convenciones de PowerShell.

                          EDITAR julio de 2016: Enlaces actualizados a PSStackExchange para enlazar a un punto específico en el tiempo. La versión actual de este proyecto puede ver actualizaciones para ilustrar cosas como PSDeploy.

                          Compartir en

                          Construyendo un módulo de PowerShell fue publicado el 06 de septiembre de 2015 y modificado por última vez el 24 de julio de 2016.


                          Construyendo un módulo de PowerShell

                          Hace un tiempo, alguien mencionó que podría ser divertido documentar el proceso de escritura del módulo de PowerShell. Esto se ha hecho antes, pero creo que sería divertido publicar mi propio proceso, desde la idea inicial hasta la publicación en el sitio oficial de PowerShellGallery.com.

                          Recientemente hablé sobre el acertijo de August Scripting Games en PowerShell.org, que implicaba consultar una API web. Resulta que esta es una necesidad muy común, y muchos de los módulos que escribimos resumen estas API en prácticas funciones y módulos de PowerShell.

                          Vamos a suponer que sabe qué es un módulo y que tiene algo de experiencia escribiendo funciones de PowerShell. Si no es así, ¡asegúrese de dedicar un tiempo a aprender PowerShell antes de continuar aquí!

                          Esta publicación cubrirá mi fórmula típica para escribir un módulo, usando la API de Stack Exchange como ejemplo. No dude en navegar por el código de PSStackExchange por su cuenta.

                          ¿Por qué módulos?

                          Las funciones avanzadas lo llevarán lejos con PowerShell. Si no está escribiendo funciones hoy, asegúrese de comenzar a encapsular su código en estas herramientas reutilizables. Pero ... tienen sus límites. Aquí hay algunas razones por las que puede agrupar sus funciones avanzadas en un módulo:

                          • Simplifique la organización del código
                          • Agrupar funciones relacionadas juntas
                          • Compartir estado entre funciones, pero no con el usuario
                          • Reutilice las "funciones auxiliares" que no desea que se expongan al usuario.
                          • Mejore la capacidad de detección: Find-Module MyModule o Get-Command -Module MyModule
                          • Simplifique la distribución: Install-Module MyModule

                          En nuestro ejemplo, organizaremos un conjunto de funciones de Stack Exchange en un módulo.

                          ¡Esto parece complicado!

                          Hacer esto desde cero puede llevarle un poco de tiempo. Afortunadamente, una vez que escribe uno o dos módulos, puede comenzar rápidamente copiándolo y ajustando algunos archivos. No se asuste por la longitud de esta publicación; ¡vale la pena dedicar unos minutos a aprender los conceptos básicos para escribir sus propios módulos!

                          Los ingredientes

                          Hay muchas formas de crear un módulo, desde colocar una extensión .psm1 en un archivo, hasta compilar un módulo binario completo desde C #. Tomaremos un término medio común aquí y usaremos los siguientes ingredientes:

                          • Un manifiesto de módulo. Este es un archivo .psd1 que describe su módulo. PSStackExchange.psd1
                          • Un módulo raíz. En nuestro caso, un archivo .psm1 del módulo de script. Este es solo el código de PowerShell para ejecutar al importar el módulo. PSStackExchange.psm1
                          • Funciones exportadas (públicas). Estas son las funciones avanzadas que un usuario final puede ejecutar desde nuestro módulo. Por ejemplo, Get-SEQuestion.ps1 o Get-SEObject.ps1
                          • Funciones privadas. Estas son "funciones auxiliares" opcionales que queremos usar en nuestras funciones exportadas, que el usuario final no debería ver. Por ejemplo, Add-ObjectDetail.ps1 o Join-Parts.ps1
                          • Formatos. Estos son formatos opcionales format.ps1xml para ayudar a decorar su salida, a menudo especificados en el manifiesto del módulo "FormatsToProcess". PSStackExchange.Format.ps1xml
                          • Léame. Si está utilizando GitHub u otro repositorio de código común, Readme.md es una página de inicio útil para su proyecto, escrita usando Markdown simple en lugar de HTML
                          • Configuración de AppVeyor. Si está utilizando una solución de control de versiones compatible, AppVeyor permite una integración y entrega continuas, simples y gratuitas para proyectos de código abierto. AppVeyor.yml

                          Tenemos nuestros ingredientes, ¡echemos un vistazo a la receta de un módulo!

                          La receta

                          Haremos esto en unos pocos pasos rápidos:

                          • Crea un repositorio de GitHub
                          • Crea el módulo y el andamio a su alrededor.
                          • Conecta AppVeyor y publica el módulo

                          Esto puede llevar unos minutos la primera vez que lo revise, pero puede pedir prestado y modificar este mismo andamio para cada módulo que escriba. De hecho, puede encontrar o escribir módulos y herramientas auxiliares de PowerShell que simplifiquen este proceso.

                          Seguir la receta

                          No hay un orden real para esto dependiendo de lo que haga o no incorpore, no sienta que deba seguir esto al pie de la letra.

                          Crea un repositorio de GitHub.

                          Esto debería ser bastante sencillo. Si no ha usado GitHub antes, lo siguiente podría ayudar:

                          • Cree una cuenta en GitHub, descargue GitHub para Windows
                          • Cree un nuevo repositorio (lo llamaremos PSStackExchange y elegiremos la licencia MIT)
                          • Clonar PSStackExchange usando GitHub para Windows

                          Pasemos a la parte más importante, el módulo en sí.

                          Cree el módulo y el andamio a su alrededor

                          Así es como suelo organizar mis módulos. Usaremos PSStackExchange como ejemplo, ¡sustitúyalo por su propio módulo!

                            • en-US (o configuraciones regionales de su elección)
                              • about_PSStackExchange.help.txt
                              • Join-Parts.ps1
                              • Get-SEData.ps1
                              • Get-SEObject.ps1
                              • Search-SEQuestion.ps1
                              • Some.Library.dll
                              • SomeDependency.exe

                              Si vamos a agregar nuestro proyecto a GitHub o un repositorio de código similar, agregamos un poco más de scaffolding:

                                • PSStackExchange (carpeta del módulo descrita anteriormente)
                                • Pruebas
                                  • PSStackExchange.Tests.ps1
                                  • Appveyor.Pester.ps1

                                  Revisé el siguiente código para comenzar. Por lo general, solo copiaré el scaffolding de otro módulo, crearé un nuevo GUID en psd1 y ajustaré otras referencias específicas del módulo.

                                  En nuestro caso, tenemos algunas funciones avanzadas de Stack Exchange que, con suerte, siguen algunas de las mejores prácticas, algunas funciones auxiliares privadas que no queremos que el usuario vea y algunos otros archivos para cubrir las pruebas y la usabilidad.

                                  En PSStackExchange.psm1 cargamos nuestras funciones públicas y privadas. Si un módulo es un trabajo en progreso, normalmente exportaré $ Public.Basename para evitar funciones de codificación rígidas para exportar en psd1. Una vez que se lanza un módulo, trato de agregar las funciones públicas al psd1.

                                  Si está escribiendo un módulo, debería considerar escribir pruebas de Pester para él. Es bastante reconfortante tener un conjunto de pruebas que se ejecutan automáticamente después de cada cambio que empuja, en lugar de asumir que el código que escribe era correcto o intentar probar manualmente su código después de cada cambio. ¡Dale un tiro! Incluimos algunas pruebas superficiales en PSStackExchange.Tests.ps1.

                                  Por último, incluimos algunas características de usabilidad. Agregamos un tema de ayuda about_PSStackExchange, decoramos nuestra salida con el archivo PSStackExchange.Format.ps1xml y agregamos algunas notas sobre cómo instalar y usar el módulo en README.md.

                                  ¡Estamos listos para irnos! Veamos cómo podemos publicar este módulo para que otros lo usen y lo mejoren.

                                  Conecte AppVeyor y publique el módulo

                                  El contenido de nuestro módulo está listo para publicarse. Antes de publicar esto, habilitaremos la integración continua con algunas prácticas pruebas automatizadas a través de AppVeyor.

                                  Primero, configuramos nuestro proyecto en AppVeyor agregando appveyor.yml al repositorio y agregando el proyecto GitHub a nuestra cuenta AppVeyor. Extraemos las llamadas a Pester en AppVeyor.Pester.ps1, usando algunas ideas de aquí.

                                  A continuación, enviamos los cambios que hemos realizado en nuestra computadora a GitHub. Nuestro código ahora está publicado y AppVeyor comenzará a ejecutar una compilación.

                                  Por último, queremos publicar nuestro módulo en la Galería de PowerShell, brindando a los usuarios finales con PowerShell 5 una forma sencilla de encontrar e instalar su módulo. Podríamos conectar esto para que se ejecute automáticamente en AppVeyor, pero ese es un tema para más adelante.

                                  • Inicie sesión en PowerShellGallery.com con su cuenta de Microsoft
                                  • Obtenga su clave API (encuéntrela aquí)
                                  • ¡Publica tu módulo!

                                  ¡Nuestro módulo ahora está disponible en la Galería de PowerShell!

                                  Cómo escribo módulos, resumido

                                  ¡Uf! Esa fue una publicación larga. Afortunadamente, la mayoría de estas cosas se pueden reutilizar en cada módulo que escriba. Repasemos los pasos:

                                  • Crea un repositorio de GitHub
                                  • Crea el módulo y el andamio a su alrededor.
                                  • Conecta AppVeyor y publica el módulo

                                  El primer y último paso toman uno o dos minutos cada uno. El módulo y los andamios que lo rodean se pueden copiar y modificar, lo que solo debería llevar unos minutos. La mayor parte de su tiempo lo dedicará a escribir las funciones avanzadas del módulo.

                                  PSStackExchange

                                  ¡El módulo está publicado y listo para usar! Estoy en otra computadora con PowerShell 5, puedo ponerme en marcha con unas pocas líneas de código:

                                  A continuación, se muestran algunos resultados de los ejemplos:

                                  Terminando

                                  ¡Eso es todo! Si aún no está escribiendo módulos, definitivamente debería considerarlo. ¿Busca más lectura? Aquí hay algunas referencias que pueden resultar útiles:

                                    - Esto es de la Cumbre de PowerShell 2014, gracias a Kirk Freiheit - Shameless plug. Incluye varias referencias. - Esto brinda una buena descripción general de la visión y los objetivos establecidos para PowerShell. Si está escribiendo módulos para consumo público, considere leer esto para evitar publicar algo tan espantoso como el complemento PVS "PowerShell" de Citrix.

                                  Nota al margen para proveedores

                                  Escribir PSStackExchange me recordó lo importante que es para los proveedores de productos empresariales proporcionar módulos de PowerShell que envuelvan la API de su producto. A pesar de una buena API y una documentación decente, escribir un módulo de PowerShell con pocas funciones para esto fue tan doloroso como envolver la API de Infoblox.

                                  Proveedores: si su competencia ofrece un módulo de PowerShell y usted no, es muy probable que presione por el producto de su competencia. Este es un gran valor agregado si lo hace bien y sigue las convenciones de PowerShell.

                                  EDITAR julio de 2016: Enlaces actualizados a PSStackExchange para enlazar a un punto específico en el tiempo. La versión actual de este proyecto puede ver actualizaciones para ilustrar cosas como PSDeploy.

                                  Compartir en

                                  Construyendo un módulo de PowerShell fue publicado el 06 de septiembre de 2015 y modificado por última vez el 24 de julio de 2016.


                                  Construyendo un módulo de PowerShell

                                  Hace un tiempo, alguien mencionó que podría ser divertido documentar el proceso de escritura del módulo de PowerShell. Esto se ha hecho antes, pero creo que sería divertido publicar mi propio proceso, desde la idea inicial hasta la publicación en el sitio oficial de PowerShellGallery.com.

                                  Recientemente hablé sobre el acertijo de August Scripting Games en PowerShell.org, que implicaba consultar una API web. Resulta que esta es una necesidad muy común, y muchos de los módulos que escribimos resumen estas API en prácticas funciones y módulos de PowerShell.

                                  Vamos a suponer que sabe qué es un módulo y que tiene algo de experiencia escribiendo funciones de PowerShell. Si no es así, ¡asegúrese de dedicar un tiempo a aprender PowerShell antes de continuar aquí!

                                  Esta publicación cubrirá mi fórmula típica para escribir un módulo, usando la API de Stack Exchange como ejemplo. No dude en navegar por el código de PSStackExchange por su cuenta.

                                  ¿Por qué módulos?

                                  Las funciones avanzadas lo llevarán lejos con PowerShell. Si no está escribiendo funciones hoy, asegúrese de comenzar a encapsular su código en estas herramientas reutilizables. Pero ... tienen sus límites. Aquí hay algunas razones por las que puede agrupar sus funciones avanzadas en un módulo:

                                  • Simplifique la organización del código
                                  • Agrupar funciones relacionadas juntas
                                  • Compartir estado entre funciones, pero no con el usuario
                                  • Reutilice las "funciones auxiliares" que no desea que se expongan al usuario.
                                  • Mejore la capacidad de detección: Find-Module MyModule o Get-Command -Module MyModule
                                  • Simplifique la distribución: Install-Module MyModule

                                  En nuestro ejemplo, organizaremos un conjunto de funciones de Stack Exchange en un módulo.

                                  ¡Esto parece complicado!

                                  Hacer esto desde cero puede llevarle un poco de tiempo. Afortunadamente, una vez que escribe uno o dos módulos, puede comenzar rápidamente copiándolo y ajustando algunos archivos. No se asuste por la longitud de esta publicación; ¡vale la pena dedicar unos minutos a aprender los conceptos básicos para escribir sus propios módulos!

                                  Los ingredientes

                                  Hay muchas formas de crear un módulo, desde colocar una extensión .psm1 en un archivo, hasta compilar un módulo binario completo desde C #. Tomaremos un término medio común aquí y usaremos los siguientes ingredientes:

                                  • Un manifiesto de módulo. Este es un archivo .psd1 que describe su módulo. PSStackExchange.psd1
                                  • Un módulo raíz. En nuestro caso, un archivo .psm1 del módulo de script. Este es solo el código de PowerShell para ejecutar al importar el módulo. PSStackExchange.psm1
                                  • Funciones exportadas (públicas). Estas son las funciones avanzadas que un usuario final puede ejecutar desde nuestro módulo. Por ejemplo, Get-SEQuestion.ps1 o Get-SEObject.ps1
                                  • Funciones privadas. Estas son "funciones auxiliares" opcionales que queremos usar en nuestras funciones exportadas, que el usuario final no debería ver. Por ejemplo, Add-ObjectDetail.ps1 o Join-Parts.ps1
                                  • Formatos. Estos son formatos opcionales format.ps1xml para ayudar a decorar su salida, a menudo especificados en el manifiesto del módulo "FormatsToProcess". PSStackExchange.Format.ps1xml
                                  • Léame. Si está utilizando GitHub u otro repositorio de código común, Readme.md es una página de inicio útil para su proyecto, escrita usando Markdown simple en lugar de HTML
                                  • Configuración de AppVeyor. Si está utilizando una solución de control de versiones compatible, AppVeyor permite una integración y entrega continuas, simples y gratuitas para proyectos de código abierto. AppVeyor.yml

                                  Tenemos nuestros ingredientes, ¡echemos un vistazo a la receta de un módulo!

                                  La receta

                                  Haremos esto en unos pocos pasos rápidos:

                                  • Crea un repositorio de GitHub
                                  • Crea el módulo y el andamio a su alrededor.
                                  • Conecta AppVeyor y publica el módulo

                                  Esto puede llevar unos minutos la primera vez que lo revise, pero puede pedir prestado y modificar este mismo andamio para cada módulo que escriba. De hecho, puede encontrar o escribir módulos y herramientas auxiliares de PowerShell que simplifiquen este proceso.

                                  Seguir la receta

                                  No hay un orden real para esto dependiendo de lo que haga o no incorpore, no sienta que deba seguir esto al pie de la letra.

                                  Crea un repositorio de GitHub.

                                  Esto debería ser bastante sencillo. Si no ha usado GitHub antes, lo siguiente podría ayudar:

                                  • Cree una cuenta en GitHub, descargue GitHub para Windows
                                  • Cree un nuevo repositorio (lo llamaremos PSStackExchange y elegiremos la licencia MIT)
                                  • Clonar PSStackExchange usando GitHub para Windows

                                  Pasemos a la parte más importante, el módulo en sí.

                                  Cree el módulo y el andamio a su alrededor

                                  Así es como suelo organizar mis módulos. Usaremos PSStackExchange como ejemplo, ¡sustitúyalo por su propio módulo!

                                    • en-US (o configuraciones regionales de su elección)
                                      • about_PSStackExchange.help.txt
                                      • Join-Parts.ps1
                                      • Get-SEData.ps1
                                      • Get-SEObject.ps1
                                      • Search-SEQuestion.ps1
                                      • Some.Library.dll
                                      • SomeDependency.exe

                                      Si vamos a agregar nuestro proyecto a GitHub o un repositorio de código similar, agregamos un poco más de scaffolding:

                                        • PSStackExchange (carpeta del módulo descrita anteriormente)
                                        • Pruebas
                                          • PSStackExchange.Tests.ps1
                                          • Appveyor.Pester.ps1

                                          Revisé el siguiente código para comenzar. Por lo general, solo copiaré el scaffolding de otro módulo, crearé un nuevo GUID en psd1 y ajustaré otras referencias específicas del módulo.

                                          En nuestro caso, tenemos algunas funciones avanzadas de Stack Exchange que, con suerte, siguen algunas de las mejores prácticas, algunas funciones auxiliares privadas que no queremos que el usuario vea y algunos otros archivos para cubrir las pruebas y la usabilidad.

                                          En PSStackExchange.psm1 cargamos nuestras funciones públicas y privadas. Si un módulo es un trabajo en progreso, normalmente exportaré $ Public.Basename para evitar funciones de codificación rígidas para exportar en psd1. Una vez que se lanza un módulo, trato de agregar las funciones públicas al psd1.

                                          Si está escribiendo un módulo, debería considerar escribir pruebas de Pester para él. Es bastante reconfortante tener un conjunto de pruebas que se ejecutan automáticamente después de cada cambio que empuja, en lugar de asumir que el código que escribe era correcto o intentar probar manualmente su código después de cada cambio. ¡Dale un tiro! Incluimos algunas pruebas superficiales en PSStackExchange.Tests.ps1.

                                          Por último, incluimos algunas características de usabilidad. Agregamos un tema de ayuda about_PSStackExchange, decoramos nuestra salida con el archivo PSStackExchange.Format.ps1xml y agregamos algunas notas sobre cómo instalar y usar el módulo en README.md.

                                          ¡Estamos listos para irnos! Veamos cómo podemos publicar este módulo para que otros lo usen y lo mejoren.

                                          Conecte AppVeyor y publique el módulo

                                          El contenido de nuestro módulo está listo para publicarse. Antes de publicar esto, habilitaremos la integración continua con algunas prácticas pruebas automatizadas a través de AppVeyor.

                                          Primero, configuramos nuestro proyecto en AppVeyor agregando appveyor.yml al repositorio y agregando el proyecto GitHub a nuestra cuenta AppVeyor. Extraemos las llamadas a Pester en AppVeyor.Pester.ps1, usando algunas ideas de aquí.

                                          A continuación, enviamos los cambios que hemos realizado en nuestra computadora a GitHub. Nuestro código ahora está publicado y AppVeyor comenzará a ejecutar una compilación.

                                          Por último, queremos publicar nuestro módulo en la Galería de PowerShell, brindando a los usuarios finales con PowerShell 5 una forma sencilla de encontrar e instalar su módulo. Podríamos conectar esto para que se ejecute automáticamente en AppVeyor, pero ese es un tema para más adelante.

                                          • Inicie sesión en PowerShellGallery.com con su cuenta de Microsoft
                                          • Obtenga su clave API (encuéntrela aquí)
                                          • ¡Publica tu módulo!

                                          ¡Nuestro módulo ahora está disponible en la Galería de PowerShell!

                                          Cómo escribo módulos, resumido

                                          ¡Uf! Esa fue una publicación larga. Afortunadamente, la mayoría de estas cosas se pueden reutilizar en cada módulo que escriba. Repasemos los pasos:

                                          • Crea un repositorio de GitHub
                                          • Crea el módulo y el andamio a su alrededor.
                                          • Conecta AppVeyor y publica el módulo

                                          El primer y último paso toman uno o dos minutos cada uno. El módulo y los andamios que lo rodean se pueden copiar y modificar, lo que solo debería llevar unos minutos. La mayor parte de su tiempo lo dedicará a escribir las funciones avanzadas del módulo.

                                          PSStackExchange

                                          ¡El módulo está publicado y listo para usar! Estoy en otra computadora con PowerShell 5, puedo ponerme en marcha con unas pocas líneas de código:

                                          A continuación, se muestran algunos resultados de los ejemplos:

                                          Terminando

                                          ¡Eso es todo! Si aún no está escribiendo módulos, definitivamente debería considerarlo. ¿Busca más lectura? Aquí hay algunas referencias que pueden resultar útiles:

                                            - Esto es de la Cumbre de PowerShell 2014, gracias a Kirk Freiheit - Shameless plug. Incluye varias referencias. - Esto brinda una buena descripción general de la visión y los objetivos establecidos para PowerShell. Si está escribiendo módulos para consumo público, considere leer esto para evitar publicar algo tan espantoso como el complemento PVS "PowerShell" de Citrix.

                                          Nota al margen para proveedores

                                          Escribir PSStackExchange me recordó lo importante que es para los proveedores de productos empresariales proporcionar módulos de PowerShell que envuelvan la API de su producto. A pesar de una buena API y una documentación decente, escribir un módulo de PowerShell con pocas funciones para esto fue tan doloroso como envolver la API de Infoblox.

                                          Proveedores: si su competencia ofrece un módulo de PowerShell y usted no, es muy probable que presione por el producto de su competencia. Este es un gran valor agregado si lo hace bien y sigue las convenciones de PowerShell.

                                          EDITAR julio de 2016: Enlaces actualizados a PSStackExchange para enlazar a un punto específico en el tiempo. La versión actual de este proyecto puede ver actualizaciones para ilustrar cosas como PSDeploy.

                                          Compartir en

                                          Construyendo un módulo de PowerShell fue publicado el 06 de septiembre de 2015 y modificado por última vez el 24 de julio de 2016.


                                          Construyendo un módulo de PowerShell

                                          Hace un tiempo, alguien mencionó que podría ser divertido documentar el proceso de escritura del módulo de PowerShell. Esto se ha hecho antes, pero creo que sería divertido publicar mi propio proceso, desde la idea inicial hasta la publicación en el sitio oficial de PowerShellGallery.com.

                                          Recientemente hablé sobre el acertijo de August Scripting Games en PowerShell.org, que implicaba consultar una API web. Resulta que esta es una necesidad muy común, y muchos de los módulos que escribimos resumen estas API en prácticas funciones y módulos de PowerShell.

                                          Vamos a suponer que sabe qué es un módulo y que tiene algo de experiencia escribiendo funciones de PowerShell. Si no es así, ¡asegúrese de dedicar un tiempo a aprender PowerShell antes de continuar aquí!

                                          Esta publicación cubrirá mi fórmula típica para escribir un módulo, usando la API de Stack Exchange como ejemplo. No dude en navegar por el código de PSStackExchange por su cuenta.

                                          ¿Por qué módulos?

                                          Las funciones avanzadas lo llevarán lejos con PowerShell. Si no está escribiendo funciones hoy, asegúrese de comenzar a encapsular su código en estas herramientas reutilizables. Pero ... tienen sus límites. Aquí hay algunas razones por las que puede agrupar sus funciones avanzadas en un módulo:

                                          • Simplifique la organización del código
                                          • Agrupar funciones relacionadas juntas
                                          • Compartir estado entre funciones, pero no con el usuario
                                          • Reutilice las "funciones auxiliares" que no desea que se expongan al usuario.
                                          • Mejore la capacidad de detección: Find-Module MyModule o Get-Command -Module MyModule
                                          • Simplifique la distribución: Install-Module MyModule

                                          En nuestro ejemplo, organizaremos un conjunto de funciones de Stack Exchange en un módulo.

                                          ¡Esto parece complicado!

                                          Hacer esto desde cero puede llevarle un poco de tiempo. Afortunadamente, una vez que escribe uno o dos módulos, puede comenzar rápidamente copiándolo y ajustando algunos archivos. No se asuste por la longitud de esta publicación; ¡vale la pena dedicar unos minutos a aprender los conceptos básicos para escribir sus propios módulos!

                                          Los ingredientes

                                          Hay muchas formas de crear un módulo, desde colocar una extensión .psm1 en un archivo, hasta compilar un módulo binario completo desde C #. Tomaremos un término medio común aquí y usaremos los siguientes ingredientes:

                                          • Un manifiesto de módulo. Este es un archivo .psd1 que describe su módulo. PSStackExchange.psd1
                                          • Un módulo raíz. En nuestro caso, un archivo .psm1 del módulo de script. Este es solo el código de PowerShell para ejecutar al importar el módulo. PSStackExchange.psm1
                                          • Funciones exportadas (públicas). Estas son las funciones avanzadas que un usuario final puede ejecutar desde nuestro módulo. Por ejemplo, Get-SEQuestion.ps1 o Get-SEObject.ps1
                                          • Funciones privadas. Estas son "funciones auxiliares" opcionales que queremos usar en nuestras funciones exportadas, que el usuario final no debería ver. Por ejemplo, Add-ObjectDetail.ps1 o Join-Parts.ps1
                                          • Formatos. Estos son formatos opcionales format.ps1xml para ayudar a decorar su salida, a menudo especificados en el manifiesto del módulo "FormatsToProcess". PSStackExchange.Format.ps1xml
                                          • Léame. Si está utilizando GitHub u otro repositorio de código común, Readme.md es una página de inicio útil para su proyecto, escrita usando Markdown simple en lugar de HTML
                                          • Configuración de AppVeyor. Si está utilizando una solución de control de versiones compatible, AppVeyor permite una integración y entrega continuas, simples y gratuitas para proyectos de código abierto. AppVeyor.yml

                                          Tenemos nuestros ingredientes, ¡echemos un vistazo a la receta de un módulo!

                                          La receta

                                          Haremos esto en unos pocos pasos rápidos:

                                          • Crea un repositorio de GitHub
                                          • Crea el módulo y el andamio a su alrededor.
                                          • Conecta AppVeyor y publica el módulo

                                          Esto puede llevar unos minutos la primera vez que lo revise, pero puede pedir prestado y modificar este mismo andamio para cada módulo que escriba. De hecho, puede encontrar o escribir módulos y herramientas auxiliares de PowerShell que simplifiquen este proceso.

                                          Seguir la receta

                                          No hay un orden real para esto dependiendo de lo que haga o no incorpore, no sienta que deba seguir esto al pie de la letra.

                                          Crea un repositorio de GitHub.

                                          Esto debería ser bastante sencillo. Si no ha usado GitHub antes, lo siguiente podría ayudar:

                                          • Cree una cuenta en GitHub, descargue GitHub para Windows
                                          • Cree un nuevo repositorio (lo llamaremos PSStackExchange y elegiremos la licencia MIT)
                                          • Clonar PSStackExchange usando GitHub para Windows

                                          Pasemos a la parte más importante, el módulo en sí.

                                          Cree el módulo y el andamio a su alrededor

                                          Así es como suelo organizar mis módulos. Usaremos PSStackExchange como ejemplo, ¡sustitúyalo por su propio módulo!

                                            • en-US (o configuraciones regionales de su elección)
                                              • about_PSStackExchange.help.txt
                                              • Join-Parts.ps1
                                              • Get-SEData.ps1
                                              • Get-SEObject.ps1
                                              • Search-SEQuestion.ps1
                                              • Some.Library.dll
                                              • SomeDependency.exe

                                              Si vamos a agregar nuestro proyecto a GitHub o un repositorio de código similar, agregamos un poco más de scaffolding:

                                                • PSStackExchange (carpeta del módulo descrita anteriormente)
                                                • Pruebas
                                                  • PSStackExchange.Tests.ps1
                                                  • Appveyor.Pester.ps1

                                                  Revisé el siguiente código para comenzar. Por lo general, solo copiaré el scaffolding de otro módulo, crearé un nuevo GUID en psd1 y ajustaré otras referencias específicas del módulo.

                                                  En nuestro caso, tenemos algunas funciones avanzadas de Stack Exchange que, con suerte, siguen algunas de las mejores prácticas, algunas funciones auxiliares privadas que no queremos que el usuario vea y algunos otros archivos para cubrir las pruebas y la usabilidad.

                                                  En PSStackExchange.psm1 cargamos nuestras funciones públicas y privadas. Si un módulo es un trabajo en progreso, normalmente exportaré $ Public.Basename para evitar funciones de codificación rígidas para exportar en psd1. Una vez que se lanza un módulo, trato de agregar las funciones públicas al psd1.

                                                  Si está escribiendo un módulo, debería considerar escribir pruebas de Pester para él. Es bastante reconfortante tener un conjunto de pruebas que se ejecutan automáticamente después de cada cambio que empuja, en lugar de asumir que el código que escribe era correcto o intentar probar manualmente su código después de cada cambio. ¡Dale un tiro! Incluimos algunas pruebas superficiales en PSStackExchange.Tests.ps1.

                                                  Por último, incluimos algunas características de usabilidad. Agregamos un tema de ayuda about_PSStackExchange, decoramos nuestra salida con el archivo PSStackExchange.Format.ps1xml y agregamos algunas notas sobre cómo instalar y usar el módulo en README.md.

                                                  ¡Estamos listos para irnos! Veamos cómo podemos publicar este módulo para que otros lo usen y lo mejoren.

                                                  Conecte AppVeyor y publique el módulo

                                                  El contenido de nuestro módulo está listo para publicarse. Antes de publicar esto, habilitaremos la integración continua con algunas prácticas pruebas automatizadas a través de AppVeyor.

                                                  Primero, configuramos nuestro proyecto en AppVeyor agregando appveyor.yml al repositorio y agregando el proyecto GitHub a nuestra cuenta AppVeyor. Extraemos las llamadas a Pester en AppVeyor.Pester.ps1, usando algunas ideas de aquí.

                                                  A continuación, enviamos los cambios que hemos realizado en nuestra computadora a GitHub. Nuestro código ahora está publicado y AppVeyor comenzará a ejecutar una compilación.

                                                  Por último, queremos publicar nuestro módulo en la Galería de PowerShell, brindando a los usuarios finales con PowerShell 5 una forma sencilla de encontrar e instalar su módulo.Podríamos conectar esto para que se ejecute automáticamente en AppVeyor, pero ese es un tema para más adelante.

                                                  • Inicie sesión en PowerShellGallery.com con su cuenta de Microsoft
                                                  • Obtenga su clave API (encuéntrela aquí)
                                                  • ¡Publica tu módulo!

                                                  ¡Nuestro módulo ahora está disponible en la Galería de PowerShell!

                                                  Cómo escribo módulos, resumido

                                                  ¡Uf! Esa fue una publicación larga. Afortunadamente, la mayoría de estas cosas se pueden reutilizar en cada módulo que escriba. Repasemos los pasos:

                                                  • Crea un repositorio de GitHub
                                                  • Crea el módulo y el andamio a su alrededor.
                                                  • Conecta AppVeyor y publica el módulo

                                                  El primer y último paso toman uno o dos minutos cada uno. El módulo y los andamios que lo rodean se pueden copiar y modificar, lo que solo debería llevar unos minutos. La mayor parte de su tiempo lo dedicará a escribir las funciones avanzadas del módulo.

                                                  PSStackExchange

                                                  ¡El módulo está publicado y listo para usar! Estoy en otra computadora con PowerShell 5, puedo ponerme en marcha con unas pocas líneas de código:

                                                  A continuación, se muestran algunos resultados de los ejemplos:

                                                  Terminando

                                                  ¡Eso es todo! Si aún no está escribiendo módulos, definitivamente debería considerarlo. ¿Busca más lectura? Aquí hay algunas referencias que pueden resultar útiles:

                                                    - Esto es de la Cumbre de PowerShell 2014, gracias a Kirk Freiheit - Shameless plug. Incluye varias referencias. - Esto brinda una buena descripción general de la visión y los objetivos establecidos para PowerShell. Si está escribiendo módulos para consumo público, considere leer esto para evitar publicar algo tan espantoso como el complemento PVS "PowerShell" de Citrix.

                                                  Nota al margen para proveedores

                                                  Escribir PSStackExchange me recordó lo importante que es para los proveedores de productos empresariales proporcionar módulos de PowerShell que envuelvan la API de su producto. A pesar de una buena API y una documentación decente, escribir un módulo de PowerShell con pocas funciones para esto fue tan doloroso como envolver la API de Infoblox.

                                                  Proveedores: si su competencia ofrece un módulo de PowerShell y usted no, es muy probable que presione por el producto de su competencia. Este es un gran valor agregado si lo hace bien y sigue las convenciones de PowerShell.

                                                  EDITAR julio de 2016: Enlaces actualizados a PSStackExchange para enlazar a un punto específico en el tiempo. La versión actual de este proyecto puede ver actualizaciones para ilustrar cosas como PSDeploy.

                                                  Compartir en

                                                  Construyendo un módulo de PowerShell fue publicado el 06 de septiembre de 2015 y modificado por última vez el 24 de julio de 2016.


                                                  Construyendo un módulo de PowerShell

                                                  Hace un tiempo, alguien mencionó que podría ser divertido documentar el proceso de escritura del módulo de PowerShell. Esto se ha hecho antes, pero creo que sería divertido publicar mi propio proceso, desde la idea inicial hasta la publicación en el sitio oficial de PowerShellGallery.com.

                                                  Recientemente hablé sobre el acertijo de August Scripting Games en PowerShell.org, que implicaba consultar una API web. Resulta que esta es una necesidad muy común, y muchos de los módulos que escribimos resumen estas API en prácticas funciones y módulos de PowerShell.

                                                  Vamos a suponer que sabe qué es un módulo y que tiene algo de experiencia escribiendo funciones de PowerShell. Si no es así, ¡asegúrese de dedicar un tiempo a aprender PowerShell antes de continuar aquí!

                                                  Esta publicación cubrirá mi fórmula típica para escribir un módulo, usando la API de Stack Exchange como ejemplo. No dude en navegar por el código de PSStackExchange por su cuenta.

                                                  ¿Por qué módulos?

                                                  Las funciones avanzadas lo llevarán lejos con PowerShell. Si no está escribiendo funciones hoy, asegúrese de comenzar a encapsular su código en estas herramientas reutilizables. Pero ... tienen sus límites. Aquí hay algunas razones por las que puede agrupar sus funciones avanzadas en un módulo:

                                                  • Simplifique la organización del código
                                                  • Agrupar funciones relacionadas juntas
                                                  • Compartir estado entre funciones, pero no con el usuario
                                                  • Reutilice las "funciones auxiliares" que no desea que se expongan al usuario.
                                                  • Mejore la capacidad de detección: Find-Module MyModule o Get-Command -Module MyModule
                                                  • Simplifique la distribución: Install-Module MyModule

                                                  En nuestro ejemplo, organizaremos un conjunto de funciones de Stack Exchange en un módulo.

                                                  ¡Esto parece complicado!

                                                  Hacer esto desde cero puede llevarle un poco de tiempo. Afortunadamente, una vez que escribe uno o dos módulos, puede comenzar rápidamente copiándolo y ajustando algunos archivos. No se asuste por la longitud de esta publicación; ¡vale la pena dedicar unos minutos a aprender los conceptos básicos para escribir sus propios módulos!

                                                  Los ingredientes

                                                  Hay muchas formas de crear un módulo, desde colocar una extensión .psm1 en un archivo, hasta compilar un módulo binario completo desde C #. Tomaremos un término medio común aquí y usaremos los siguientes ingredientes:

                                                  • Un manifiesto de módulo. Este es un archivo .psd1 que describe su módulo. PSStackExchange.psd1
                                                  • Un módulo raíz. En nuestro caso, un archivo .psm1 del módulo de script. Este es solo el código de PowerShell para ejecutar al importar el módulo. PSStackExchange.psm1
                                                  • Funciones exportadas (públicas). Estas son las funciones avanzadas que un usuario final puede ejecutar desde nuestro módulo. Por ejemplo, Get-SEQuestion.ps1 o Get-SEObject.ps1
                                                  • Funciones privadas. Estas son "funciones auxiliares" opcionales que queremos usar en nuestras funciones exportadas, que el usuario final no debería ver. Por ejemplo, Add-ObjectDetail.ps1 o Join-Parts.ps1
                                                  • Formatos. Estos son formatos opcionales format.ps1xml para ayudar a decorar su salida, a menudo especificados en el manifiesto del módulo "FormatsToProcess". PSStackExchange.Format.ps1xml
                                                  • Léame. Si está utilizando GitHub u otro repositorio de código común, Readme.md es una página de inicio útil para su proyecto, escrita usando Markdown simple en lugar de HTML
                                                  • Configuración de AppVeyor. Si está utilizando una solución de control de versiones compatible, AppVeyor permite una integración y entrega continuas, simples y gratuitas para proyectos de código abierto. AppVeyor.yml

                                                  Tenemos nuestros ingredientes, ¡echemos un vistazo a la receta de un módulo!

                                                  La receta

                                                  Haremos esto en unos pocos pasos rápidos:

                                                  • Crea un repositorio de GitHub
                                                  • Crea el módulo y el andamio a su alrededor.
                                                  • Conecta AppVeyor y publica el módulo

                                                  Esto puede llevar unos minutos la primera vez que lo revise, pero puede pedir prestado y modificar este mismo andamio para cada módulo que escriba. De hecho, puede encontrar o escribir módulos y herramientas auxiliares de PowerShell que simplifiquen este proceso.

                                                  Seguir la receta

                                                  No hay un orden real para esto dependiendo de lo que haga o no incorpore, no sienta que deba seguir esto al pie de la letra.

                                                  Crea un repositorio de GitHub.

                                                  Esto debería ser bastante sencillo. Si no ha usado GitHub antes, lo siguiente podría ayudar:

                                                  • Cree una cuenta en GitHub, descargue GitHub para Windows
                                                  • Cree un nuevo repositorio (lo llamaremos PSStackExchange y elegiremos la licencia MIT)
                                                  • Clonar PSStackExchange usando GitHub para Windows

                                                  Pasemos a la parte más importante, el módulo en sí.

                                                  Cree el módulo y el andamio a su alrededor

                                                  Así es como suelo organizar mis módulos. Usaremos PSStackExchange como ejemplo, ¡sustitúyalo por su propio módulo!

                                                    • en-US (o configuraciones regionales de su elección)
                                                      • about_PSStackExchange.help.txt
                                                      • Join-Parts.ps1
                                                      • Get-SEData.ps1
                                                      • Get-SEObject.ps1
                                                      • Search-SEQuestion.ps1
                                                      • Some.Library.dll
                                                      • SomeDependency.exe

                                                      Si vamos a agregar nuestro proyecto a GitHub o un repositorio de código similar, agregamos un poco más de scaffolding:

                                                        • PSStackExchange (carpeta del módulo descrita anteriormente)
                                                        • Pruebas
                                                          • PSStackExchange.Tests.ps1
                                                          • Appveyor.Pester.ps1

                                                          Revisé el siguiente código para comenzar. Por lo general, solo copiaré el scaffolding de otro módulo, crearé un nuevo GUID en psd1 y ajustaré otras referencias específicas del módulo.

                                                          En nuestro caso, tenemos algunas funciones avanzadas de Stack Exchange que, con suerte, siguen algunas de las mejores prácticas, algunas funciones auxiliares privadas que no queremos que el usuario vea y algunos otros archivos para cubrir las pruebas y la usabilidad.

                                                          En PSStackExchange.psm1 cargamos nuestras funciones públicas y privadas. Si un módulo es un trabajo en progreso, normalmente exportaré $ Public.Basename para evitar funciones de codificación rígidas para exportar en psd1. Una vez que se lanza un módulo, trato de agregar las funciones públicas al psd1.

                                                          Si está escribiendo un módulo, debería considerar escribir pruebas de Pester para él. Es bastante reconfortante tener un conjunto de pruebas que se ejecutan automáticamente después de cada cambio que empuja, en lugar de asumir que el código que escribe era correcto o intentar probar manualmente su código después de cada cambio. ¡Dale un tiro! Incluimos algunas pruebas superficiales en PSStackExchange.Tests.ps1.

                                                          Por último, incluimos algunas características de usabilidad. Agregamos un tema de ayuda about_PSStackExchange, decoramos nuestra salida con el archivo PSStackExchange.Format.ps1xml y agregamos algunas notas sobre cómo instalar y usar el módulo en README.md.

                                                          ¡Estamos listos para irnos! Veamos cómo podemos publicar este módulo para que otros lo usen y lo mejoren.

                                                          Conecte AppVeyor y publique el módulo

                                                          El contenido de nuestro módulo está listo para publicarse. Antes de publicar esto, habilitaremos la integración continua con algunas prácticas pruebas automatizadas a través de AppVeyor.

                                                          Primero, configuramos nuestro proyecto en AppVeyor agregando appveyor.yml al repositorio y agregando el proyecto GitHub a nuestra cuenta AppVeyor. Extraemos las llamadas a Pester en AppVeyor.Pester.ps1, usando algunas ideas de aquí.

                                                          A continuación, enviamos los cambios que hemos realizado en nuestra computadora a GitHub. Nuestro código ahora está publicado y AppVeyor comenzará a ejecutar una compilación.

                                                          Por último, queremos publicar nuestro módulo en la Galería de PowerShell, brindando a los usuarios finales con PowerShell 5 una forma sencilla de encontrar e instalar su módulo. Podríamos conectar esto para que se ejecute automáticamente en AppVeyor, pero ese es un tema para más adelante.

                                                          • Inicie sesión en PowerShellGallery.com con su cuenta de Microsoft
                                                          • Obtenga su clave API (encuéntrela aquí)
                                                          • ¡Publica tu módulo!

                                                          ¡Nuestro módulo ahora está disponible en la Galería de PowerShell!

                                                          Cómo escribo módulos, resumido

                                                          ¡Uf! Esa fue una publicación larga. Afortunadamente, la mayoría de estas cosas se pueden reutilizar en cada módulo que escriba. Repasemos los pasos:

                                                          • Crea un repositorio de GitHub
                                                          • Crea el módulo y el andamio a su alrededor.
                                                          • Conecta AppVeyor y publica el módulo

                                                          El primer y último paso toman uno o dos minutos cada uno. El módulo y los andamios que lo rodean se pueden copiar y modificar, lo que solo debería llevar unos minutos. La mayor parte de su tiempo lo dedicará a escribir las funciones avanzadas del módulo.

                                                          PSStackExchange

                                                          ¡El módulo está publicado y listo para usar! Estoy en otra computadora con PowerShell 5, puedo ponerme en marcha con unas pocas líneas de código:

                                                          A continuación, se muestran algunos resultados de los ejemplos:

                                                          Terminando

                                                          ¡Eso es todo! Si aún no está escribiendo módulos, definitivamente debería considerarlo. ¿Busca más lectura? Aquí hay algunas referencias que pueden resultar útiles:

                                                            - Esto es de la Cumbre de PowerShell 2014, gracias a Kirk Freiheit - Shameless plug. Incluye varias referencias. - Esto brinda una buena descripción general de la visión y los objetivos establecidos para PowerShell. Si está escribiendo módulos para consumo público, considere leer esto para evitar publicar algo tan espantoso como el complemento PVS "PowerShell" de Citrix.

                                                          Nota al margen para proveedores

                                                          Escribir PSStackExchange me recordó lo importante que es para los proveedores de productos empresariales proporcionar módulos de PowerShell que envuelvan la API de su producto. A pesar de una buena API y una documentación decente, escribir un módulo de PowerShell con pocas funciones para esto fue tan doloroso como envolver la API de Infoblox.

                                                          Proveedores: si su competencia ofrece un módulo de PowerShell y usted no, es muy probable que presione por el producto de su competencia. Este es un gran valor agregado si lo hace bien y sigue las convenciones de PowerShell.

                                                          EDITAR julio de 2016: Enlaces actualizados a PSStackExchange para enlazar a un punto específico en el tiempo. La versión actual de este proyecto puede ver actualizaciones para ilustrar cosas como PSDeploy.

                                                          Compartir en

                                                          Construyendo un módulo de PowerShell fue publicado el 06 de septiembre de 2015 y modificado por última vez el 24 de julio de 2016.


                                                          Construyendo un módulo de PowerShell

                                                          Hace un tiempo, alguien mencionó que podría ser divertido documentar el proceso de escritura del módulo de PowerShell. Esto se ha hecho antes, pero creo que sería divertido publicar mi propio proceso, desde la idea inicial hasta la publicación en el sitio oficial de PowerShellGallery.com.

                                                          Recientemente hablé sobre el acertijo de August Scripting Games en PowerShell.org, que implicaba consultar una API web. Resulta que esta es una necesidad muy común, y muchos de los módulos que escribimos resumen estas API en prácticas funciones y módulos de PowerShell.

                                                          Vamos a suponer que sabe qué es un módulo y que tiene algo de experiencia escribiendo funciones de PowerShell. Si no es así, ¡asegúrese de dedicar un tiempo a aprender PowerShell antes de continuar aquí!

                                                          Esta publicación cubrirá mi fórmula típica para escribir un módulo, usando la API de Stack Exchange como ejemplo. No dude en navegar por el código de PSStackExchange por su cuenta.

                                                          ¿Por qué módulos?

                                                          Las funciones avanzadas lo llevarán lejos con PowerShell. Si no está escribiendo funciones hoy, asegúrese de comenzar a encapsular su código en estas herramientas reutilizables. Pero ... tienen sus límites. Aquí hay algunas razones por las que puede agrupar sus funciones avanzadas en un módulo:

                                                          • Simplifique la organización del código
                                                          • Agrupar funciones relacionadas juntas
                                                          • Compartir estado entre funciones, pero no con el usuario
                                                          • Reutilice las "funciones auxiliares" que no desea que se expongan al usuario.
                                                          • Mejore la capacidad de detección: Find-Module MyModule o Get-Command -Module MyModule
                                                          • Simplifique la distribución: Install-Module MyModule

                                                          En nuestro ejemplo, organizaremos un conjunto de funciones de Stack Exchange en un módulo.

                                                          ¡Esto parece complicado!

                                                          Hacer esto desde cero puede llevarle un poco de tiempo. Afortunadamente, una vez que escribe uno o dos módulos, puede comenzar rápidamente copiándolo y ajustando algunos archivos. No se asuste por la longitud de esta publicación; ¡vale la pena dedicar unos minutos a aprender los conceptos básicos para escribir sus propios módulos!

                                                          Los ingredientes

                                                          Hay muchas formas de crear un módulo, desde colocar una extensión .psm1 en un archivo, hasta compilar un módulo binario completo desde C #. Tomaremos un término medio común aquí y usaremos los siguientes ingredientes:

                                                          • Un manifiesto de módulo. Este es un archivo .psd1 que describe su módulo. PSStackExchange.psd1
                                                          • Un módulo raíz. En nuestro caso, un archivo .psm1 del módulo de script. Este es solo el código de PowerShell para ejecutar al importar el módulo. PSStackExchange.psm1
                                                          • Funciones exportadas (públicas). Estas son las funciones avanzadas que un usuario final puede ejecutar desde nuestro módulo. Por ejemplo, Get-SEQuestion.ps1 o Get-SEObject.ps1
                                                          • Funciones privadas. Estas son "funciones auxiliares" opcionales que queremos usar en nuestras funciones exportadas, que el usuario final no debería ver. Por ejemplo, Add-ObjectDetail.ps1 o Join-Parts.ps1
                                                          • Formatos. Estos son formatos opcionales format.ps1xml para ayudar a decorar su salida, a menudo especificados en el manifiesto del módulo "FormatsToProcess". PSStackExchange.Format.ps1xml
                                                          • Léame. Si está utilizando GitHub u otro repositorio de código común, Readme.md es una página de inicio útil para su proyecto, escrita usando Markdown simple en lugar de HTML
                                                          • Configuración de AppVeyor. Si está utilizando una solución de control de versiones compatible, AppVeyor permite una integración y entrega continuas, simples y gratuitas para proyectos de código abierto. AppVeyor.yml

                                                          Tenemos nuestros ingredientes, ¡echemos un vistazo a la receta de un módulo!

                                                          La receta

                                                          Haremos esto en unos pocos pasos rápidos:

                                                          • Crea un repositorio de GitHub
                                                          • Crea el módulo y el andamio a su alrededor.
                                                          • Conecta AppVeyor y publica el módulo

                                                          Esto puede llevar unos minutos la primera vez que lo revise, pero puede pedir prestado y modificar este mismo andamio para cada módulo que escriba. De hecho, puede encontrar o escribir módulos y herramientas auxiliares de PowerShell que simplifiquen este proceso.

                                                          Seguir la receta

                                                          No hay un orden real para esto dependiendo de lo que haga o no incorpore, no sienta que deba seguir esto al pie de la letra.

                                                          Crea un repositorio de GitHub.

                                                          Esto debería ser bastante sencillo. Si no ha usado GitHub antes, lo siguiente podría ayudar:

                                                          • Cree una cuenta en GitHub, descargue GitHub para Windows
                                                          • Cree un nuevo repositorio (lo llamaremos PSStackExchange y elegiremos la licencia MIT)
                                                          • Clonar PSStackExchange usando GitHub para Windows

                                                          Pasemos a la parte más importante, el módulo en sí.

                                                          Cree el módulo y el andamio a su alrededor

                                                          Así es como suelo organizar mis módulos. Usaremos PSStackExchange como ejemplo, ¡sustitúyalo por su propio módulo!

                                                            • en-US (o configuraciones regionales de su elección)
                                                              • about_PSStackExchange.help.txt
                                                              • Join-Parts.ps1
                                                              • Get-SEData.ps1
                                                              • Get-SEObject.ps1
                                                              • Search-SEQuestion.ps1
                                                              • Some.Library.dll
                                                              • SomeDependency.exe

                                                              Si vamos a agregar nuestro proyecto a GitHub o un repositorio de código similar, agregamos un poco más de scaffolding:

                                                                • PSStackExchange (carpeta del módulo descrita anteriormente)
                                                                • Pruebas
                                                                  • PSStackExchange.Tests.ps1
                                                                  • Appveyor.Pester.ps1

                                                                  Revisé el siguiente código para comenzar. Por lo general, solo copiaré el scaffolding de otro módulo, crearé un nuevo GUID en psd1 y ajustaré otras referencias específicas del módulo.

                                                                  En nuestro caso, tenemos algunas funciones avanzadas de Stack Exchange que, con suerte, siguen algunas de las mejores prácticas, algunas funciones auxiliares privadas que no queremos que el usuario vea y algunos otros archivos para cubrir las pruebas y la usabilidad.

                                                                  En PSStackExchange.psm1 cargamos nuestras funciones públicas y privadas. Si un módulo es un trabajo en progreso, normalmente exportaré $ Public.Basename para evitar funciones de codificación rígidas para exportar en psd1. Una vez que se lanza un módulo, trato de agregar las funciones públicas al psd1.

                                                                  Si está escribiendo un módulo, debería considerar escribir pruebas de Pester para él. Es bastante reconfortante tener un conjunto de pruebas que se ejecutan automáticamente después de cada cambio que empuja, en lugar de asumir que el código que escribe era correcto o intentar probar manualmente su código después de cada cambio. ¡Dale un tiro! Incluimos algunas pruebas superficiales en PSStackExchange.Tests.ps1.

                                                                  Por último, incluimos algunas características de usabilidad. Agregamos un tema de ayuda about_PSStackExchange, decoramos nuestra salida con el archivo PSStackExchange.Format.ps1xml y agregamos algunas notas sobre cómo instalar y usar el módulo en README.md.

                                                                  ¡Estamos listos para irnos! Veamos cómo podemos publicar este módulo para que otros lo usen y lo mejoren.

                                                                  Conecte AppVeyor y publique el módulo

                                                                  El contenido de nuestro módulo está listo para publicarse. Antes de publicar esto, habilitaremos la integración continua con algunas prácticas pruebas automatizadas a través de AppVeyor.

                                                                  Primero, configuramos nuestro proyecto en AppVeyor agregando appveyor.yml al repositorio y agregando el proyecto GitHub a nuestra cuenta AppVeyor.Extraemos las llamadas a Pester en AppVeyor.Pester.ps1, usando algunas ideas de aquí.

                                                                  A continuación, enviamos los cambios que hemos realizado en nuestra computadora a GitHub. Nuestro código ahora está publicado y AppVeyor comenzará a ejecutar una compilación.

                                                                  Por último, queremos publicar nuestro módulo en la Galería de PowerShell, brindando a los usuarios finales con PowerShell 5 una forma sencilla de encontrar e instalar su módulo. Podríamos conectar esto para que se ejecute automáticamente en AppVeyor, pero ese es un tema para más adelante.

                                                                  • Inicie sesión en PowerShellGallery.com con su cuenta de Microsoft
                                                                  • Obtenga su clave API (encuéntrela aquí)
                                                                  • ¡Publica tu módulo!

                                                                  ¡Nuestro módulo ahora está disponible en la Galería de PowerShell!

                                                                  Cómo escribo módulos, resumido

                                                                  ¡Uf! Esa fue una publicación larga. Afortunadamente, la mayoría de estas cosas se pueden reutilizar en cada módulo que escriba. Repasemos los pasos:

                                                                  • Crea un repositorio de GitHub
                                                                  • Crea el módulo y el andamio a su alrededor.
                                                                  • Conecta AppVeyor y publica el módulo

                                                                  El primer y último paso toman uno o dos minutos cada uno. El módulo y los andamios que lo rodean se pueden copiar y modificar, lo que solo debería llevar unos minutos. La mayor parte de su tiempo lo dedicará a escribir las funciones avanzadas del módulo.

                                                                  PSStackExchange

                                                                  ¡El módulo está publicado y listo para usar! Estoy en otra computadora con PowerShell 5, puedo ponerme en marcha con unas pocas líneas de código:

                                                                  A continuación, se muestran algunos resultados de los ejemplos:

                                                                  Terminando

                                                                  ¡Eso es todo! Si aún no está escribiendo módulos, definitivamente debería considerarlo. ¿Busca más lectura? Aquí hay algunas referencias que pueden resultar útiles:

                                                                    - Esto es de la Cumbre de PowerShell 2014, gracias a Kirk Freiheit - Shameless plug. Incluye varias referencias. - Esto brinda una buena descripción general de la visión y los objetivos establecidos para PowerShell. Si está escribiendo módulos para consumo público, considere leer esto para evitar publicar algo tan espantoso como el complemento PVS "PowerShell" de Citrix.

                                                                  Nota al margen para proveedores

                                                                  Escribir PSStackExchange me recordó lo importante que es para los proveedores de productos empresariales proporcionar módulos de PowerShell que envuelvan la API de su producto. A pesar de una buena API y una documentación decente, escribir un módulo de PowerShell con pocas funciones para esto fue tan doloroso como envolver la API de Infoblox.

                                                                  Proveedores: si su competencia ofrece un módulo de PowerShell y usted no, es muy probable que presione por el producto de su competencia. Este es un gran valor agregado si lo hace bien y sigue las convenciones de PowerShell.

                                                                  EDITAR julio de 2016: Enlaces actualizados a PSStackExchange para enlazar a un punto específico en el tiempo. La versión actual de este proyecto puede ver actualizaciones para ilustrar cosas como PSDeploy.

                                                                  Compartir en

                                                                  Construyendo un módulo de PowerShell fue publicado el 06 de septiembre de 2015 y modificado por última vez el 24 de julio de 2016.


                                                                  Construyendo un módulo de PowerShell

                                                                  Hace un tiempo, alguien mencionó que podría ser divertido documentar el proceso de escritura del módulo de PowerShell. Esto se ha hecho antes, pero creo que sería divertido publicar mi propio proceso, desde la idea inicial hasta la publicación en el sitio oficial de PowerShellGallery.com.

                                                                  Recientemente hablé sobre el acertijo de August Scripting Games en PowerShell.org, que implicaba consultar una API web. Resulta que esta es una necesidad muy común, y muchos de los módulos que escribimos resumen estas API en prácticas funciones y módulos de PowerShell.

                                                                  Vamos a suponer que sabe qué es un módulo y que tiene algo de experiencia escribiendo funciones de PowerShell. Si no es así, ¡asegúrese de dedicar un tiempo a aprender PowerShell antes de continuar aquí!

                                                                  Esta publicación cubrirá mi fórmula típica para escribir un módulo, usando la API de Stack Exchange como ejemplo. No dude en navegar por el código de PSStackExchange por su cuenta.

                                                                  ¿Por qué módulos?

                                                                  Las funciones avanzadas lo llevarán lejos con PowerShell. Si no está escribiendo funciones hoy, asegúrese de comenzar a encapsular su código en estas herramientas reutilizables. Pero ... tienen sus límites. Aquí hay algunas razones por las que puede agrupar sus funciones avanzadas en un módulo:

                                                                  • Simplifique la organización del código
                                                                  • Agrupar funciones relacionadas juntas
                                                                  • Compartir estado entre funciones, pero no con el usuario
                                                                  • Reutilice las "funciones auxiliares" que no desea que se expongan al usuario.
                                                                  • Mejore la capacidad de detección: Find-Module MyModule o Get-Command -Module MyModule
                                                                  • Simplifique la distribución: Install-Module MyModule

                                                                  En nuestro ejemplo, organizaremos un conjunto de funciones de Stack Exchange en un módulo.

                                                                  ¡Esto parece complicado!

                                                                  Hacer esto desde cero puede llevarle un poco de tiempo. Afortunadamente, una vez que escribe uno o dos módulos, puede comenzar rápidamente copiándolo y ajustando algunos archivos. No se asuste por la longitud de esta publicación; ¡vale la pena dedicar unos minutos a aprender los conceptos básicos para escribir sus propios módulos!

                                                                  Los ingredientes

                                                                  Hay muchas formas de crear un módulo, desde colocar una extensión .psm1 en un archivo, hasta compilar un módulo binario completo desde C #. Tomaremos un término medio común aquí y usaremos los siguientes ingredientes:

                                                                  • Un manifiesto de módulo. Este es un archivo .psd1 que describe su módulo. PSStackExchange.psd1
                                                                  • Un módulo raíz. En nuestro caso, un archivo .psm1 del módulo de script. Este es solo el código de PowerShell para ejecutar al importar el módulo. PSStackExchange.psm1
                                                                  • Funciones exportadas (públicas). Estas son las funciones avanzadas que un usuario final puede ejecutar desde nuestro módulo. Por ejemplo, Get-SEQuestion.ps1 o Get-SEObject.ps1
                                                                  • Funciones privadas. Estas son "funciones auxiliares" opcionales que queremos usar en nuestras funciones exportadas, que el usuario final no debería ver. Por ejemplo, Add-ObjectDetail.ps1 o Join-Parts.ps1
                                                                  • Formatos. Estos son formatos opcionales format.ps1xml para ayudar a decorar su salida, a menudo especificados en el manifiesto del módulo "FormatsToProcess". PSStackExchange.Format.ps1xml
                                                                  • Léame. Si está utilizando GitHub u otro repositorio de código común, Readme.md es una página de inicio útil para su proyecto, escrita usando Markdown simple en lugar de HTML
                                                                  • Configuración de AppVeyor. Si está utilizando una solución de control de versiones compatible, AppVeyor permite una integración y entrega continuas, simples y gratuitas para proyectos de código abierto. AppVeyor.yml

                                                                  Tenemos nuestros ingredientes, ¡echemos un vistazo a la receta de un módulo!

                                                                  La receta

                                                                  Haremos esto en unos pocos pasos rápidos:

                                                                  • Crea un repositorio de GitHub
                                                                  • Crea el módulo y el andamio a su alrededor.
                                                                  • Conecta AppVeyor y publica el módulo

                                                                  Esto puede llevar unos minutos la primera vez que lo revise, pero puede pedir prestado y modificar este mismo andamio para cada módulo que escriba. De hecho, puede encontrar o escribir módulos y herramientas auxiliares de PowerShell que simplifiquen este proceso.

                                                                  Seguir la receta

                                                                  No hay un orden real para esto dependiendo de lo que haga o no incorpore, no sienta que deba seguir esto al pie de la letra.

                                                                  Crea un repositorio de GitHub.

                                                                  Esto debería ser bastante sencillo. Si no ha usado GitHub antes, lo siguiente podría ayudar:

                                                                  • Cree una cuenta en GitHub, descargue GitHub para Windows
                                                                  • Cree un nuevo repositorio (lo llamaremos PSStackExchange y elegiremos la licencia MIT)
                                                                  • Clonar PSStackExchange usando GitHub para Windows

                                                                  Pasemos a la parte más importante, el módulo en sí.

                                                                  Cree el módulo y el andamio a su alrededor

                                                                  Así es como suelo organizar mis módulos. Usaremos PSStackExchange como ejemplo, ¡sustitúyalo por su propio módulo!

                                                                    • en-US (o configuraciones regionales de su elección)
                                                                      • about_PSStackExchange.help.txt
                                                                      • Join-Parts.ps1
                                                                      • Get-SEData.ps1
                                                                      • Get-SEObject.ps1
                                                                      • Search-SEQuestion.ps1
                                                                      • Some.Library.dll
                                                                      • SomeDependency.exe

                                                                      Si vamos a agregar nuestro proyecto a GitHub o un repositorio de código similar, agregamos un poco más de scaffolding:

                                                                        • PSStackExchange (carpeta del módulo descrita anteriormente)
                                                                        • Pruebas
                                                                          • PSStackExchange.Tests.ps1
                                                                          • Appveyor.Pester.ps1

                                                                          Revisé el siguiente código para comenzar. Por lo general, solo copiaré el scaffolding de otro módulo, crearé un nuevo GUID en psd1 y ajustaré otras referencias específicas del módulo.

                                                                          En nuestro caso, tenemos algunas funciones avanzadas de Stack Exchange que, con suerte, siguen algunas de las mejores prácticas, algunas funciones auxiliares privadas que no queremos que el usuario vea y algunos otros archivos para cubrir las pruebas y la usabilidad.

                                                                          En PSStackExchange.psm1 cargamos nuestras funciones públicas y privadas. Si un módulo es un trabajo en progreso, normalmente exportaré $ Public.Basename para evitar funciones de codificación rígidas para exportar en psd1. Una vez que se lanza un módulo, trato de agregar las funciones públicas al psd1.

                                                                          Si está escribiendo un módulo, debería considerar escribir pruebas de Pester para él. Es bastante reconfortante tener un conjunto de pruebas que se ejecutan automáticamente después de cada cambio que empuja, en lugar de asumir que el código que escribe era correcto o intentar probar manualmente su código después de cada cambio. ¡Dale un tiro! Incluimos algunas pruebas superficiales en PSStackExchange.Tests.ps1.

                                                                          Por último, incluimos algunas características de usabilidad. Agregamos un tema de ayuda about_PSStackExchange, decoramos nuestra salida con el archivo PSStackExchange.Format.ps1xml y agregamos algunas notas sobre cómo instalar y usar el módulo en README.md.

                                                                          ¡Estamos listos para irnos! Veamos cómo podemos publicar este módulo para que otros lo usen y lo mejoren.

                                                                          Conecte AppVeyor y publique el módulo

                                                                          El contenido de nuestro módulo está listo para publicarse. Antes de publicar esto, habilitaremos la integración continua con algunas prácticas pruebas automatizadas a través de AppVeyor.

                                                                          Primero, configuramos nuestro proyecto en AppVeyor agregando appveyor.yml al repositorio y agregando el proyecto GitHub a nuestra cuenta AppVeyor. Extraemos las llamadas a Pester en AppVeyor.Pester.ps1, usando algunas ideas de aquí.

                                                                          A continuación, enviamos los cambios que hemos realizado en nuestra computadora a GitHub. Nuestro código ahora está publicado y AppVeyor comenzará a ejecutar una compilación.

                                                                          Por último, queremos publicar nuestro módulo en la Galería de PowerShell, brindando a los usuarios finales con PowerShell 5 una forma sencilla de encontrar e instalar su módulo. Podríamos conectar esto para que se ejecute automáticamente en AppVeyor, pero ese es un tema para más adelante.

                                                                          • Inicie sesión en PowerShellGallery.com con su cuenta de Microsoft
                                                                          • Obtenga su clave API (encuéntrela aquí)
                                                                          • ¡Publica tu módulo!

                                                                          ¡Nuestro módulo ahora está disponible en la Galería de PowerShell!

                                                                          Cómo escribo módulos, resumido

                                                                          ¡Uf! Esa fue una publicación larga. Afortunadamente, la mayoría de estas cosas se pueden reutilizar en cada módulo que escriba. Repasemos los pasos:

                                                                          • Crea un repositorio de GitHub
                                                                          • Crea el módulo y el andamio a su alrededor.
                                                                          • Conecta AppVeyor y publica el módulo

                                                                          El primer y último paso toman uno o dos minutos cada uno. El módulo y los andamios que lo rodean se pueden copiar y modificar, lo que solo debería llevar unos minutos. La mayor parte de su tiempo lo dedicará a escribir las funciones avanzadas del módulo.

                                                                          PSStackExchange

                                                                          ¡El módulo está publicado y listo para usar! Estoy en otra computadora con PowerShell 5, puedo ponerme en marcha con unas pocas líneas de código:

                                                                          A continuación, se muestran algunos resultados de los ejemplos:

                                                                          Terminando

                                                                          ¡Eso es todo! Si aún no está escribiendo módulos, definitivamente debería considerarlo. ¿Busca más lectura? Aquí hay algunas referencias que pueden resultar útiles:

                                                                            - Esto es de la Cumbre de PowerShell 2014, gracias a Kirk Freiheit - Shameless plug. Incluye varias referencias. - Esto brinda una buena descripción general de la visión y los objetivos establecidos para PowerShell. Si está escribiendo módulos para consumo público, considere leer esto para evitar publicar algo tan espantoso como el complemento PVS "PowerShell" de Citrix.

                                                                          Nota al margen para proveedores

                                                                          Escribir PSStackExchange me recordó lo importante que es para los proveedores de productos empresariales proporcionar módulos de PowerShell que envuelvan la API de su producto. A pesar de una buena API y una documentación decente, escribir un módulo de PowerShell con pocas funciones para esto fue tan doloroso como envolver la API de Infoblox.

                                                                          Proveedores: si su competencia ofrece un módulo de PowerShell y usted no, es muy probable que presione por el producto de su competencia. Este es un gran valor agregado si lo hace bien y sigue las convenciones de PowerShell.

                                                                          EDITAR julio de 2016: Enlaces actualizados a PSStackExchange para enlazar a un punto específico en el tiempo. La versión actual de este proyecto puede ver actualizaciones para ilustrar cosas como PSDeploy.

                                                                          Compartir en

                                                                          Construyendo un módulo de PowerShell fue publicado el 06 de septiembre de 2015 y modificado por última vez el 24 de julio de 2016.


                                                                          Construyendo un módulo de PowerShell

                                                                          Hace un tiempo, alguien mencionó que podría ser divertido documentar el proceso de escritura del módulo de PowerShell. Esto se ha hecho antes, pero creo que sería divertido publicar mi propio proceso, desde la idea inicial hasta la publicación en el sitio oficial de PowerShellGallery.com.

                                                                          Recientemente hablé sobre el acertijo de August Scripting Games en PowerShell.org, que implicaba consultar una API web. Resulta que esta es una necesidad muy común, y muchos de los módulos que escribimos resumen estas API en prácticas funciones y módulos de PowerShell.

                                                                          Vamos a suponer que sabe qué es un módulo y que tiene algo de experiencia escribiendo funciones de PowerShell. Si no es así, ¡asegúrese de dedicar un tiempo a aprender PowerShell antes de continuar aquí!

                                                                          Esta publicación cubrirá mi fórmula típica para escribir un módulo, usando la API de Stack Exchange como ejemplo. No dude en navegar por el código de PSStackExchange por su cuenta.

                                                                          ¿Por qué módulos?

                                                                          Las funciones avanzadas lo llevarán lejos con PowerShell. Si no está escribiendo funciones hoy, asegúrese de comenzar a encapsular su código en estas herramientas reutilizables. Pero ... tienen sus límites. Aquí hay algunas razones por las que puede agrupar sus funciones avanzadas en un módulo:

                                                                          • Simplifique la organización del código
                                                                          • Agrupar funciones relacionadas juntas
                                                                          • Compartir estado entre funciones, pero no con el usuario
                                                                          • Reutilice las "funciones auxiliares" que no desea que se expongan al usuario.
                                                                          • Mejore la capacidad de detección: Find-Module MyModule o Get-Command -Module MyModule
                                                                          • Simplifique la distribución: Install-Module MyModule

                                                                          En nuestro ejemplo, organizaremos un conjunto de funciones de Stack Exchange en un módulo.

                                                                          ¡Esto parece complicado!

                                                                          Hacer esto desde cero puede llevarle un poco de tiempo. Afortunadamente, una vez que escribe uno o dos módulos, puede comenzar rápidamente copiándolo y ajustando algunos archivos. No se asuste por la longitud de esta publicación; ¡vale la pena dedicar unos minutos a aprender los conceptos básicos para escribir sus propios módulos!

                                                                          Los ingredientes

                                                                          Hay muchas formas de crear un módulo, desde colocar una extensión .psm1 en un archivo, hasta compilar un módulo binario completo desde C #. Tomaremos un término medio común aquí y usaremos los siguientes ingredientes:

                                                                          • Un manifiesto de módulo. Este es un archivo .psd1 que describe su módulo. PSStackExchange.psd1
                                                                          • Un módulo raíz. En nuestro caso, un archivo .psm1 del módulo de script. Este es solo el código de PowerShell para ejecutar al importar el módulo. PSStackExchange.psm1
                                                                          • Funciones exportadas (públicas). Estas son las funciones avanzadas que un usuario final puede ejecutar desde nuestro módulo. Por ejemplo, Get-SEQuestion.ps1 o Get-SEObject.ps1
                                                                          • Funciones privadas. Estas son "funciones auxiliares" opcionales que queremos usar en nuestras funciones exportadas, que el usuario final no debería ver. Por ejemplo, Add-ObjectDetail.ps1 o Join-Parts.ps1
                                                                          • Formatos. Estos son formatos opcionales format.ps1xml para ayudar a decorar su salida, a menudo especificados en el manifiesto del módulo "FormatsToProcess". PSStackExchange.Format.ps1xml
                                                                          • Léame. Si está utilizando GitHub u otro repositorio de código común, Readme.md es una página de inicio útil para su proyecto, escrita usando Markdown simple en lugar de HTML
                                                                          • Configuración de AppVeyor. Si está utilizando una solución de control de versiones compatible, AppVeyor permite una integración y entrega continuas, simples y gratuitas para proyectos de código abierto. AppVeyor.yml

                                                                          Tenemos nuestros ingredientes, ¡echemos un vistazo a la receta de un módulo!

                                                                          La receta

                                                                          Haremos esto en unos pocos pasos rápidos:

                                                                          • Crea un repositorio de GitHub
                                                                          • Crea el módulo y el andamio a su alrededor.
                                                                          • Conecta AppVeyor y publica el módulo

                                                                          Esto puede llevar unos minutos la primera vez que lo revise, pero puede pedir prestado y modificar este mismo andamio para cada módulo que escriba. De hecho, puede encontrar o escribir módulos y herramientas auxiliares de PowerShell que simplifiquen este proceso.

                                                                          Seguir la receta

                                                                          No hay un orden real para esto dependiendo de lo que haga o no incorpore, no sienta que deba seguir esto al pie de la letra.

                                                                          Crea un repositorio de GitHub.

                                                                          Esto debería ser bastante sencillo. Si no ha usado GitHub antes, lo siguiente podría ayudar:

                                                                          • Cree una cuenta en GitHub, descargue GitHub para Windows
                                                                          • Cree un nuevo repositorio (lo llamaremos PSStackExchange y elegiremos la licencia MIT)
                                                                          • Clonar PSStackExchange usando GitHub para Windows

                                                                          Pasemos a la parte más importante, el módulo en sí.

                                                                          Cree el módulo y el andamio a su alrededor

                                                                          Así es como suelo organizar mis módulos. Usaremos PSStackExchange como ejemplo, ¡sustitúyalo por su propio módulo!

                                                                            • en-US (o configuraciones regionales de su elección)
                                                                              • about_PSStackExchange.help.txt
                                                                              • Join-Parts.ps1
                                                                              • Get-SEData.ps1
                                                                              • Get-SEObject.ps1
                                                                              • Search-SEQuestion.ps1
                                                                              • Some.Library.dll
                                                                              • SomeDependency.exe

                                                                              Si vamos a agregar nuestro proyecto a GitHub o un repositorio de código similar, agregamos un poco más de scaffolding:

                                                                                • PSStackExchange (carpeta del módulo descrita anteriormente)
                                                                                • Pruebas
                                                                                  • PSStackExchange.Tests.ps1
                                                                                  • Appveyor.Pester.ps1

                                                                                  Revisé el siguiente código para comenzar. Por lo general, solo copiaré el scaffolding de otro módulo, crearé un nuevo GUID en psd1 y ajustaré otras referencias específicas del módulo.

                                                                                  En nuestro caso, tenemos algunas funciones avanzadas de Stack Exchange que, con suerte, siguen algunas de las mejores prácticas, algunas funciones auxiliares privadas que no queremos que el usuario vea y algunos otros archivos para cubrir las pruebas y la usabilidad.

                                                                                  En PSStackExchange.psm1 cargamos nuestras funciones públicas y privadas. Si un módulo es un trabajo en progreso, normalmente exportaré $ Public.Basename para evitar funciones de codificación rígidas para exportar en psd1. Una vez que se lanza un módulo, trato de agregar las funciones públicas al psd1.

                                                                                  Si está escribiendo un módulo, debería considerar escribir pruebas de Pester para él. Es bastante reconfortante tener un conjunto de pruebas que se ejecutan automáticamente después de cada cambio que empuja, en lugar de asumir que el código que escribe era correcto o intentar probar manualmente su código después de cada cambio. ¡Dale un tiro! Incluimos algunas pruebas superficiales en PSStackExchange.Tests.ps1.

                                                                                  Por último, incluimos algunas características de usabilidad. Agregamos un tema de ayuda about_PSStackExchange, decoramos nuestra salida con el archivo PSStackExchange.Format.ps1xml y agregamos algunas notas sobre cómo instalar y usar el módulo en README.md.

                                                                                  ¡Estamos listos para irnos! Veamos cómo podemos publicar este módulo para que otros lo usen y lo mejoren.

                                                                                  Conecte AppVeyor y publique el módulo

                                                                                  El contenido de nuestro módulo está listo para publicarse. Antes de publicar esto, habilitaremos la integración continua con algunas prácticas pruebas automatizadas a través de AppVeyor.

                                                                                  Primero, configuramos nuestro proyecto en AppVeyor agregando appveyor.yml al repositorio y agregando el proyecto GitHub a nuestra cuenta AppVeyor. Extraemos las llamadas a Pester en AppVeyor.Pester.ps1, usando algunas ideas de aquí.

                                                                                  A continuación, enviamos los cambios que hemos realizado en nuestra computadora a GitHub. Nuestro código ahora está publicado y AppVeyor comenzará a ejecutar una compilación.

                                                                                  Por último, queremos publicar nuestro módulo en la Galería de PowerShell, brindando a los usuarios finales con PowerShell 5 una forma sencilla de encontrar e instalar su módulo. Podríamos conectar esto para que se ejecute automáticamente en AppVeyor, pero ese es un tema para más adelante.

                                                                                  • Inicie sesión en PowerShellGallery.com con su cuenta de Microsoft
                                                                                  • Obtenga su clave API (encuéntrela aquí)
                                                                                  • ¡Publica tu módulo!

                                                                                  ¡Nuestro módulo ahora está disponible en la Galería de PowerShell!

                                                                                  Cómo escribo módulos, resumido

                                                                                  ¡Uf! Esa fue una publicación larga. Afortunadamente, la mayoría de estas cosas se pueden reutilizar en cada módulo que escriba. Repasemos los pasos:

                                                                                  • Crea un repositorio de GitHub
                                                                                  • Crea el módulo y el andamio a su alrededor.
                                                                                  • Conecta AppVeyor y publica el módulo

                                                                                  El primer y último paso toman uno o dos minutos cada uno. El módulo y los andamios que lo rodean se pueden copiar y modificar, lo que solo debería llevar unos minutos. La mayor parte de su tiempo lo dedicará a escribir las funciones avanzadas del módulo.

                                                                                  PSStackExchange

                                                                                  ¡El módulo está publicado y listo para usar! Estoy en otra computadora con PowerShell 5, puedo ponerme en marcha con unas pocas líneas de código:

                                                                                  A continuación, se muestran algunos resultados de los ejemplos:

                                                                                  Terminando

                                                                                  ¡Eso es todo! Si aún no está escribiendo módulos, definitivamente debería considerarlo. ¿Busca más lectura? Aquí hay algunas referencias que pueden resultar útiles:

                                                                                    - Esto es de la Cumbre de PowerShell 2014, gracias a Kirk Freiheit - Shameless plug. Incluye varias referencias. - Esto brinda una buena descripción general de la visión y los objetivos establecidos para PowerShell. Si está escribiendo módulos para consumo público, considere leer esto para evitar publicar algo tan espantoso como el complemento PVS "PowerShell" de Citrix.

                                                                                  Nota al margen para proveedores

                                                                                  Escribir PSStackExchange me recordó lo importante que es para los proveedores de productos empresariales proporcionar módulos de PowerShell que envuelvan la API de su producto. A pesar de una buena API y una documentación decente, escribir un módulo de PowerShell con pocas funciones para esto fue tan doloroso como envolver la API de Infoblox.

                                                                                  Proveedores: si su competencia ofrece un módulo de PowerShell y usted no, es muy probable que presione por el producto de su competencia. Este es un gran valor agregado si lo hace bien y sigue las convenciones de PowerShell.

                                                                                  EDITAR julio de 2016: Enlaces actualizados a PSStackExchange para enlazar a un punto específico en el tiempo. La versión actual de este proyecto puede ver actualizaciones para ilustrar cosas como PSDeploy.

                                                                                  Compartir en

                                                                                  Construyendo un módulo de PowerShell fue publicado el 06 de septiembre de 2015 y modificado por última vez el 24 de julio de 2016.


                                                                                  Ver el vídeo: 5. Barrio Sésamo Epi y Blas: Dentro y fuera