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 esGet
. 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 esProcess
. 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 letraU
.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 queProcessName
comienza porp
.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 aWhere-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 paraWhere-Object
usa el operador-like
para buscar coincidencias con los procesos que comienzan por la letrap
.
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.