Página principal » cómo » Geek School Aprender a usar objetos en PowerShell

    Geek School Aprender a usar objetos en PowerShell

    Comprender los objetos es uno de los conceptos fundamentales para "obtener" PowerShell. Únase a nosotros para explorar los objetos y cómo hacen que PowerShell sea mejor que cualquier otro shell hoy en día..

    Asegúrese de leer los artículos anteriores de la serie:

    • Aprenda cómo automatizar Windows con PowerShell
    • Aprendiendo a usar cmdlets en PowerShell

    Y estad atentos para el resto de la serie toda la semana..

    Objetos

    ¿Alguna vez se ha preguntado qué diferencia a PowerShell de un shell tradicional de Linux como Bash, o incluso al símbolo del sistema heredado? La respuesta es realmente simple: los shells tradicionales generan texto, lo que dificulta hacer cosas como formatear y filtrar. Por supuesto, hay herramientas para ayudarlo a realizar el trabajo (sed y grep vienen a la mente), pero al final del día, si desea realizar cualquier tipo de análisis de texto pesado, necesita conocer expresiones regulares como la dorso de tu mano.

    PowerShell aprovecha el marco .Net subyacente y adopta un enfoque diferente, utilizando objetos en lugar de texto. Los objetos son solo una representación de algo. Son una colección de partes y acciones para usarlas. Echemos un vistazo a las partes de una bicicleta y cómo podemos usarlas.

    Los objetos en .Net son muy parecidos, excepto por dos pequeñas diferencias: las "Partes" se llaman propiedades y las "instrucciones" se llaman metodos. Si quisiéramos representar un servicio de Windows como un objeto, podríamos decidir que es apropiado describirlo usando tres propiedades: Nombre del servicio, Estado y Descripción. También necesitamos interactuar con el servicio, por lo que podríamos darle al objeto un método de inicio, detención y pausa.

    Puede ver las propiedades y los métodos de un objeto pasándolo al cmdlet Get-Member. Los objetos que genera un cmdlet de PowerShell son en gran parte tipos subyacentes del marco .Net, pero puede crear sus propios objetos si necesita usar un lenguaje como C # o usar el tipo PSObject.

    La tubería

    Hay un montón de shells de Linux con una canalización, lo que le permite enviar el texto que un comando envía como entrada al siguiente comando en la canalización. PowerShell lleva esto al siguiente nivel al permitirle tomar los objetos que genera un cmdlet y pasarlos como entrada al siguiente cmdlet en la canalización. El truco es saber qué tipo de objeto devuelve un cmdlet, que es realmente fácil cuando se usa el cmdlet Get-Member.

    Obtener servicio | Get-Member

    Por razones que van más allá del alcance de este artículo, las propiedades y los métodos se denominan conjuntamente miembros de la clase, lo que explica por qué usa el cmdlet Get-Member para obtener una lista de todos los métodos y propiedades que tiene un objeto. Sin embargo, el cmdlet Get-Member también devuelve otra información importante, el tipo de objeto subyacente. En la captura de pantalla anterior, podemos ver que Get-Service devuelve objetos del tipo:

    System.ServiceProcess.ServiceController

    Como PowerShell trata con objetos y no con texto, no todos los cmdlets se pueden vincular entre sí mediante la canalización [1]. Eso significa que debemos encontrar un cmdlet que busque aceptar un objeto System.ServiceProcess.ServiceController desde la canalización.

    Get-Command -ParameterType System.ServiceProcess.ServiceController

    Tenga en cuenta que hay un cmdlet llamado Stop-Service; echemos un vistazo a la ayuda para ello.

    Obtener Ayuda -Nombre Stop-Service

    Parece que el parámetro InputObject toma una matriz de objetos ServiceController como entrada. Por lo general, si ve un parámetro llamado InputObject, aceptará la entrada de Pipeline, pero para asegurarnos de que echemos un vistazo a la ayuda completa para ese parámetro.

    Obtener ayuda -Nombre Stop-Service -Full

    Nuestras sospechas eran correctas. Así que en este punto sabemos lo siguiente:

    • Get-Service devuelve objetos ServiceController
    • Stop-Service tiene un parámetro llamado InputObject que acepta uno o más ServiceControllers como entrada.
    • El parámetro InputObject acepta entrada de canalización.

    Usando esta información podríamos hacer lo siguiente:

    Obtener servicio -Nombre 'Dispositivo móvil de Apple' | Parada de servicio

    Eso es todo por este tiempo amigos. La próxima vez que veamos cómo podemos formatear, filtrar y comparar objetos en el Oleoducto.

    Deberes

    • Leer sobre la tubería de objetos

    Si tiene alguna pregunta, puede enviarme un tweet a @taybgibb o simplemente dejar un comentario..