Descripción de PowerShell

PowerShell es un shell de línea de comandos y un lenguaje de scripting, todo en uno. PowerShell se inició en Windows para ayudar a automatizar las tareas administrativas. Ahora, se ejecuta entre plataformas y se puede usar para varias tareas.

Lo que hace que PowerShell sea único es que acepta y devuelve objetos .NET, en lugar de texto. Esta característica facilita la conexión de distintos comandos en una canalización.

¿Para qué se puede usar PowerShell?

El uso de PowerShell ha crecido desde los días en los que era exclusivo de Windows. Todavía se usa para la automatización de tareas de Windows, pero hoy en día se puede utilizar para tareas como las siguientes:

  • Administración de la nube. PowerShell se puede usar para recursos de nube. Por ejemplo, puede recuperar información sobre los recursos de nube, así como para actualizar o implementar nuevos recursos.
  • CI/CD. También se puede usar como parte de una canalización de implementación continua o de integración continua.
  • Automatización de tareas para Active Directory y Exchange. Se puede usar para automatizar prácticamente cualquier tarea en Windows, como la creación de usuarios en Active Directory y buzones de Exchange.

Hay muchas más áreas de uso, pero la lista anterior le ofrece una sugerencia de todo lo que ha evolucionado PowerShell.

¿Quién usa PowerShell?

PowerShell es una herramienta eficaz que puede ayudar a las personas que trabajan en una multitud de roles. Tradicionalmente, el uso de PowerShell ha correspondido al rol de administrador del sistema, pero ahora lo utilizan usuarios que se denominan DevOps, operaciones en la nube e incluso desarrolladores.

Cmdlets de PowerShell

PowerShell incluye cientos de comandos preinstalados. Los comandos de PowerShell se conocen como cmdlets.

El nombre de cada cmdlet consta de un par de verbo-sustantivo. Por ejemplo, Get-Process. Esta convención de nomenclatura hace que sea más fácil comprender lo que hace el cmdlet. También facilita la búsqueda del comando que se necesita. Al buscar un cmdlet para usar, puede filtrar por el verbo o el sustantivo.

Uso de cmdlets para explorar PowerShell

La primera vez que se selecciona PowerShell, es posible que le intimide, ya que hay mucho que aprender. PowerShell está diseñado para ayudarle a aprender progresivamente, según lo necesite.

PowerShell incluye cmdlets que ayudan a descubrir PowerShell. Con estos tres cmdlets, puede descubrir qué comandos están disponibles, qué hacen y con qué tipos funcionan.

  • Get-Verb. Al ejecutar este comando se devuelve una lista de verbos a los que se adhieren la mayoría de los comandos. La respuesta incluye una descripción de lo que hacen estos verbos. Como la mayoría de los comandos siguen esta convención de nomenclatura, establece las expectativas sobre lo que hace un comando. Esto le ayuda a seleccionar el comando adecuado y qué nombre asignar a un comando, si va a crear uno.
  • Get-Command. Este comando recupera una lista de todos los comandos instalados en la máquina.
  • Get-Member. Funciona en la salida basada en objetos y puede detectar qué objetos, propiedades y métodos están disponibles para un comando.
  • Get-Help. Al invocar este comando con el nombre de un comando como argumento, se muestra una página de ayuda en la que se describen varios elementos de un comando.

Con estos comandos, puede descubrir prácticamente todo lo que necesita saber sobre PowerShell.

Verbo

El concepto de verbo es importante en PowerShell. Se trata de un estándar de nomenclatura que siguen la mayoría de los cmdlets. También es un estándar de nomenclatura que se espera que siga al escribir comandos propios. La idea es que el verbo indique lo que se intenta hacer, como leer datos o posiblemente cambiarlos. PowerShell tiene una lista normalizada de verbos. Para obtener una lista completa de todos los verbos posibles, use el cmdlet Get-Verb:

Get-Verb

El cmdlet devuelve una lista larga de verbos. La Descripción proporciona el contexto de lo que el verbo debe hacer. Estas son las primeras filas de la salida:

Verb    AliasPrefix   Group     Description
----    -----------   -----     -----------
Add     a             Common    Adds a resource to a container, or attaches an item to another item
Clear   cl            Common    Removes all the resources from a container but does not delete the container
Close   cs            Common    Changes the state of a resource to make it inaccessible, unavailable, or unusab…
Copy    cp            Common    Copies a resource to another name or to another container
Enter   et            Common    Specifies an action that allows the user to move into a resource
Exit    ex            Common    Sets the current environment or context to the most recently used context
...

Búsqueda de comandos con Get-Command

El cmdlet Get-Command devuelve una lista de todos los comandos disponibles que están instalados en el sistema. La lista que recibe es bastante grande. Puede limitar la cantidad de información obtenida filtrando la respuesta mediante parámetros o cmdlets auxiliares.

Filtrado por nombre

Puede filtrar la salida de Get-Command mediante parámetros diferentes. El filtrado permite buscar comandos que tengan determinadas propiedades. El parámetro Name permite buscar un comando específico por nombre.

Get-Command -Name Get-Process
CommandType     Name              Version    Source
-----------     ----              -------    ------
Cmdlet          Get-Process       7.0.0.0    Microsoft.PowerShell.Management

¿Y si desea encontrar todos los comandos que funcionan con procesos? Puede usar un carácter comodín * para que coincida con otras formas de la cadena. Por ejemplo:

Get-Command -Name *-Process
CommandType     Name              Version    Source
-----------     ----              -------    ------
Cmdlet          Debug-Process     7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Get-Process       7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Start-Process     7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Stop-Process      7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Wait-Process      7.0.0.0    Microsoft.PowerShell.Management

Filtrado por sustantivo y verbo

Hay otros parámetros que filtran los valores del verbo y del nombre. La parte del verbo del nombre de un comando es la situada más a la izquierda. El verbo debe ser uno de los valores devueltos por el cmdlet Get-Verb. El elemento situado más a la derecha de un comando es la parte del sustantivo. Un nombre puede ser cualquier cosa.

  • Filtrado por verbo. En el comando Get-Process, la parte del verbo es Get. Para filtrar por la parte de verbo, use el parámetro Verb.

    Get-Command -Verb 'Get'
    

    En este ejemplo se enumeran todos los comandos que usan el verbo Get.

  • Filtrado por sustantivo. En el comando Get-Process, la parte del sustantivo es Process. Para filtrar por el sustantivo, use el parámetro Noun. En el ejemplo siguiente se devuelven todos los cmdlets que tienen nombres que comienzan por la letra U.

    Get-Command -Noun U*
    

Además, puede combinar parámetros para restringir la búsqueda, por ejemplo:

Get-Command -Verb Get -Noun U*
CommandType     Name                         Version    Source
-----------     ----                         -------    ------
Cmdlet          Get-UICulture                7.0.0.0    Microsoft.PowerShell.Utility
Cmdlet          Get-Unique                   7.0.0.0    Microsoft.PowerShell.Utility
Cmdlet          Get-Uptime                   7.0.0.0    Microsoft.PowerShell.Utility

Uso de cmdlets de asistente para filtrar los resultados

También puede usar otros cmdlets para filtrar los resultados.

  • Select-Object. Este comando versátil le ayuda a elegir propiedades específicas de uno o más objetos. También puede limitar el número de elementos que obtiene. En el ejemplo siguiente se devuelven los valores de propiedad Name y Source de los primeros 5 comandos disponibles en la sesión actual.

    Get-Command | Select-Object -First 5 -Property Name, Source
    
    Name                      Source
    ----                      ------
    Add-AppPackage            Appx
    Add-AppPackageVolume      Appx
    Add-AppProvisionedPackage Dism
    Add-AssertionOperator     Pester
    Add-ProvisionedAppPackage Dism
    

    Para más información, vea Selección de objeto.

  • Where-Object. Este cmdlet permite filtrar los objetos devueltos en función de los valores de las propiedades. El comando toma una expresión que puede probar el valor de una propiedad. En el ejemplo siguiente se devuelven todos los procesos en los que ProcessName comienza por p.

    Get-Process | Where-Object {$_.ProcessName -like "p*"}
    

    El cmdlet Get-Process devuelve una colección de objetos de proceso. Para filtrar la respuesta, canalice la salida a Where-Object. El proceso de canalización significa que dos o más comandos están conectados a través de un carácter de barra vertical |. La salida de un comando se envía como la entrada del siguiente. La expresión de filtro para Where-Object usa el operador -like para buscar coincidencias con los procesos que comienzan por la letra p.

Exploración de objetos con Get-Member

Una vez que haya podido encontrar el cmdlet que quiere, le interesará saber más sobre lo que genera, El cmdlet Get-Member muestra el tipo, las propiedades y los métodos de un objeto. Canalice la salida que quiera inspeccionar a Get-Member.

Get-Process | Get-Member

En el resultado se muestra el tipo devuelto como TypeName y todas las propiedades y los métodos del objeto. Este es un fragmento de este resultado:

TypeName: System.Diagnostics.Process

Name        MemberType     Definition
----        ----------     ----------
Handles     AliasProperty  Handles = Handlecount
Name        AliasProperty  Name = ProcessName
...

Con el parámetro MemberType, puede limitar la información devuelta.

Get-Process | Get-Member -MemberType Method

De forma predeterminada, PowerShell solo muestra algunas propiedades. En el ejemplo anterior se muestran los miembros Name, MemberType y Definition. Puede usar Select-Object para especificar las propiedades que desea ver. Por ejemplo, solo quiere mostrar las propiedades Name y Definition:

Get-Process | Get-Member | Select-Object Name, Definition

Búsqueda por tipo de parámetro

Get-Member nos mostró que Get-Process devuelve objetos de tipo Process. El parámetro ParameterType de Get-Command se puede usar para buscar otros comandos que toman objetos Process como entrada.

Get-Command -ParameterType Process
CommandType     Name                         Version    Source
-----------     ----                         -------    ------
Cmdlet          Debug-Process                7.0.0.0    Microsoft.PowerShell.Managem…
Cmdlet          Enter-PSHostProcess          7.1.0.0    Microsoft.PowerShell.Core
Cmdlet          Get-Process                  7.0.0.0    Microsoft.PowerShell.Managem…
Cmdlet          Get-PSHostProcessInfo        7.1.0.0    Microsoft.PowerShell.Core
Cmdlet          Stop-Process                 7.0.0.0    Microsoft.PowerShell.Managem…
Cmdlet          Wait-Process                 7.0.0.0    Microsoft.PowerShell.Managem…

Conocer el tipo de salida de un comando puede ayudar a reducir la búsqueda de comandos relacionados.

Recursos adicionales