Compartir a través de


Detección de PowerShell

PowerShell es un shell de línea de comandos y un lenguaje de scripting en uno. PowerShell se inició en Windows para ayudar a automatizar las tareas administrativas. Ahora, se ejecuta multiplataforma 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?

Inicialmente, PowerShell era solo windows. Ahora, es multiplataforma y se puede usar para varias tareas como:

  • Administración en la nube. PowerShell se puede usar para administrar recursos en la nube. Por ejemplo, puede recuperar información, actualizar o implementar nuevos recursos.
  • CI/CD. También se puede usar como parte de una canalización de integración continua o implementación continua.
  • Automatice las tareas de Active Directory y Exchange. Puede usarlo para automatizar casi cualquier tarea en Windows, como crear usuarios en Active Directory y buzones en Exchange.

¿Quién usa PowerShell?

PowerShell es una herramienta eficaz que puede ayudar a los usuarios a trabajar en multitud de roles. Tradicionalmente, Los administradores del sistema usaron PowerShell. Ahora los usuarios llaman a sí mismos DevOps, Operaciones en la nube e incluso desarrolladores.

Cmdlets de PowerShell

PowerShell incluye cientos de comandos preinstalados. Los comandos de PowerShell se denominan cmdlets (pronuncia command-lets).

El nombre de cada cmdlet consta de un par Verb-Noun . Por ejemplo: Get-Process. Esta convención de nomenclatura facilita la comprensión de lo que hace el cmdlet. También facilita la búsqueda del comando que está buscando. Al buscar un cmdlet que se va a usar, puede filtrar por el verbo o el nombre.

Uso de cmdlets para explorar PowerShell

Cuando se toma PowerShell por primera vez, puede sentirse intimidante, ya que parece que hay tanto que aprender. PowerShell está diseñado para ayudarle a aprender un poco a la vez, ya que lo necesita.

PowerShell incluye cmdlets que le ayudan a detectar PowerShell. Con estos tres cmdlets, puede detectar qué comandos están disponibles, qué hacen y qué tipos operan.

  • Get-Verb. Al ejecutar este comando se devuelve una lista de verbos a los que se adhiere la mayoría de los comandos. La respuesta incluye una descripción de lo que hacen estos verbos. Dado que la mayoría de los comandos siguen esta convención de nomenclatura, establece las expectativas sobre lo que hace un comando. Este comando le ayuda a seleccionar el verbo adecuado y qué asignar un nombre a un comando al crear sus propios comandos.
  • Get-Command. Este comando recupera una lista de todos los comandos instalados en el equipo.
  • Get-Member. Funciona en la salida basada en objetos y puede detectar qué objeto, 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 que describe varias partes de un comando.

Con estos comandos, puede detectar casi todo lo que necesita saber sobre PowerShell.

Verbo

Verbo es un concepto importante en PowerShell. Es 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 sus propios comandos. La idea es que el verbo diga lo que está intentando hacer, como leer o quizá cambiar los datos. PowerShell tiene una lista estandarizada de verbos. Para obtener una lista completa de todos los verbos posibles, use el Get-Verb cmdlet :

Get-Verb

El cmdlet devuelve una larga lista de verbos. La descripción proporciona contexto para lo que el verbo está pensado para hacer. Estas son las primeras filas de 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 Get-Command cmdlet devuelve una lista de todos los comandos disponibles instalados en el sistema. La lista puede ser grande. Puede limitar la cantidad de información que vuelve filtrando la respuesta mediante parámetros o cmdlets auxiliares.

Filtrar 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

¿Qué ocurre 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 de nombres y verbos

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

  • Filtre 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.

  • Filtre por nombre. En el comando Get-Process, la parte de nombre es Process. Para filtrar por el nombre, use el parámetro Sustantivo . En el ejemplo siguiente se devuelven todos los cmdlets que tienen nombres a partir de 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 auxiliares 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 varios objetos. También puede limitar el número de elementos que obtenga. 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 obtener más información, vea Select-Object.

  • Where-Object. Este cmdlet le 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 ProcessName que comienza por p.

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

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

Exploración de objetos con Get-Member

Una vez que busque el cmdlet que desee, querrá saber más sobre qué salida genera. El Get-Member cmdlet muestra el tipo, las propiedades y los métodos de un objeto . Canalice la salida que desea inspeccionar en Get-Member.

Get-Process | Get-Member

El resultado muestra el tipo devuelto como TypeName y todas las propiedades y métodos del objeto. Este es un extracto 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 Namemiembros , MemberTypey Definition . Puede usar Select-Object para especificar las propiedades que desea ver. Por ejemplo, solo desea mostrar las Name propiedades y Definition :

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

Buscar 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