¿Qué es PowerShell?What is PowerShell?

PowerShell es un marco de administración de configuración y automatización de tareas multiplataforma que consta de un shell de línea de comandos y un lenguaje de scripting.PowerShell is a cross-platform task automation and configuration management framework, consisting of a command-line shell and scripting language. A diferencia de la mayoría de los shells, que aceptan y devuelven texto, PowerShell se basa en .NET Common Language Runtime (CLR) y acepta y devuelve objetos de .NET.Unlike most shells, which accept and return text, PowerShell is built on top of the .NET Common Language Runtime (CLR), and accepts and returns .NET objects. Este cambio fundamental aporta herramientas y métodos completamente nuevos para la automatización.This fundamental change brings entirely new tools and methods for automation.

La salida está basada en objetosOutput is object-based

A diferencia de las interfaces tradicionales de la línea de comandos, los cmdlets de PowerShell están diseñados para tratar con objetos.Unlike traditional command-line interfaces, PowerShell cmdlets are designed to deal with objects. Un objeto es información estructurada que es algo más que la cadena de caracteres que aparece en la pantalla.An object is structured information that is more than just the string of characters appearing on the screen. La salida del comando siempre incluye información adicional que puede usarse si es necesaria.Command output always carries extra information that you can use if you need it.

Si ha utilizado herramientas de procesamiento de texto para procesar datos en el pasado, verá que se comportan de forma diferente cuando se utilizan en PowerShell.If you've used text-processing tools to process data in the past, you'll find that they behave differently when used in PowerShell. En la mayoría de los casos, no necesita herramientas de procesamiento de texto para extraer información específica.In most cases, you don't need text-processing tools to extract specific information. Se accede directamente a partes de los datos mediante la sintaxis de objetos estándar de PowerShell.You directly access portions of the data using standard PowerShell object syntax.

La familia de comandos es extensibleThe command family is extensible

Las interfaces como cmd.exe no proporcionan una manera de extender directamente el conjunto de comandos integrado.Interfaces such as cmd.exe don't provide a way for you to directly extend the built-in command set. Puede crear herramientas externas de línea de comandos que se ejecuten en cmd.exe.You can create external command-line tools that run in cmd.exe. Pero estas herramientas externas no tienen servicios, como la integración de la ayuda.But these external tools don't have services, such as Help integration. cmd.exe no sabe automáticamente que estas herramientas externas son comandos válidos.cmd.exe doesn't automatically know that these external tools are valid commands.

Los comandos de PowerShell se conocen como cmdlets .The commands in PowerShell are known as cmdlets . Puede usar cada cmdlet por separado, pero su eficacia se aprecia cuando se combinan para realizar tareas complejas.You can use each cmdlet separately, but their power is realized when you combine them to perform complex tasks. Al igual que muchos de los shells, PowerShell le proporciona acceso al sistema de archivos en el equipo.Like many shells, PowerShell gives you access to the file system on the computer. Además, los proveedores de PowerShell permiten acceder a otros almacenes de datos, como el registro y los almacenes de certificados, tan fácilmente como se accede al sistema de archivos.PowerShell providers enable you to access other data stores, such as the registry and the certificate stores, as easily as you access the file system.

Puede crear sus propios cmdlets y módulos de funciones mediante el código compilado o scripts.You can create your own cmdlet and function modules using compiled code or scripts. Los módulos pueden agregar cmdlets y proveedores al shell.Modules can add cmdlets and providers to the shell. PowerShell también admite scripts que son análogos a los scripts de shell de UNIX y los archivos por lotes de cmd.exe.PowerShell also supports scripts that are analogous to UNIX shell scripts and cmd.exe batch files.

Compatibilidad con alias de comandosSupport for command aliases

PowerShell admite alias para referirse a comandos con nombres alternativos.PowerShell supports aliases to refer to commands by alternate names. La creación de alias permite a los usuarios con experiencia en otros shells utilizar los nombres de comandos comunes que ya conocen en operaciones similares en PowerShell.Aliasing allows users with experience in other shells to use common command names that they already know for similar operations in PowerShell.

La creación de alias asocia un nombre nuevo con otro comando.Aliasing associates a new name with another command. Por ejemplo, PowerShell tiene una función interna denominada Clear-Host que borra la ventana de salida.For example, PowerShell has an internal function named Clear-Host that clears the output window. Puede escribir el alias cls o clear en un símbolo del sistema.You can type either the cls or clear alias at a command prompt. PowerShell interpreta estos alias y ejecuta la función Clear-Host.PowerShell interprets these aliases and runs the Clear-Host function.

Esta característica ayuda a los usuarios a aprender PowerShell.This feature helps users to learn PowerShell. Primero, la mayoría de los usuarios de cmd.exe y Unix tienen un amplio repertorio de comandos que los usuarios ya conocen por su nombre.First, most cmd.exe and Unix users have a large repertoire of commands that users already know by name. Los equivalentes de PowerShell pueden no producir resultados idénticos.The PowerShell equivalents may not produce identical results. Sin embargo, los resultados son lo suficientemente cercanos como para que los usuarios puedan trabajar sin conocer el nombre del comando PowerShell.However, the results are close enough that users can do work without knowing the PowerShell command name. El automatismo es otra fuente importante de frustración cuando se aprende un nuevo shell de comandos."Muscle memory" is another major source of frustration when learning a new command shell. Si ha usado cmd.exe durante años, puede que escriba el comando cls para borrar la pantalla de forma inconsciente.If you have used cmd.exe for years, you might reflexively type the cls command to clear the screen. Sin el alias de Clear-Host, recibirá un mensaje de error y no sabrá qué hacer para borrar la salida.Without the alias for Clear-Host, you receive an error message and won't know what to do to clear the output.

PowerShell controla la entrada y la presentación de la consolaPowerShell handles console input and display

Cuando se escribe un comando, PowerShell siempre procesa la entrada directamente de línea de comandos directamente.When you type a command, PowerShell always processes the command-line input directly. PowerShell también formatea la salida que se ve en la pantalla.PowerShell also formats the output that you see on the screen. Esta diferencia es significativa porque reduce el trabajo requerido de cada cmdlet.This difference is significant because it reduces the work required of each cmdlet. Esto asegura que siempre se pueden hacer las cosas de la misma manera con cualquier cmdlet.It ensures that you can always do things the same way with any cmdlet. Los desarrolladores de cmdlets no necesitan escribir código para analizar los argumentos de línea de comandos o formatear la salida.Cmdlet developers don't need to write code to parse the command-line arguments or format the output.

Las herramientas de línea de comandos tradicionales tienen sus propios esquemas para solicitar y mostrar la Ayuda.Traditional command-line tools have their own schemes for requesting and displaying Help. Algunas herramientas de línea de comandos usan /? para desencadenar la visualización de la ayuda; otros usan -?, /H o incluso //.Some command-line tools use /? to trigger the Help display; others use -?, /H, or even //. Algunas mostrarán la Ayuda en una ventana de interfaz gráfica de usuario, en lugar de hacerlo en la pantalla de la consola.Some will display Help in a GUI window, rather than in the console display. Si usa un parámetro equivocado, la herramienta podría omitir la entrada y empezar a ejecutar una tarea automáticamente.If you use the wrong parameter, the tool might ignore what you typed and begin executing a task automatically. Puesto que PowerShell analiza y procesa automáticamente la línea de comandos, el parámetro -? siempre significa "mostrar la ayuda para este comando".Since PowerShell automatically parses and processes the command line, the -? parameter always means "show me Help for this command".

Nota

Si se ejecuta una aplicación de gráficos en PowerShell, se abre la ventana de la aplicación.If you run a graphic application in PowerShell, the window for the application opens. PowerShell interviene solo al procesar la entrada de línea de comandos que proporciona o la salida de la aplicación devuelta a la ventana de la consola.PowerShell intervenes only when processing the command-line input you supply or the application output returned to the console window. No afecta al funcionamiento interno de la aplicación.It does not affect how the application works internally.

PowerShell tiene una canalizaciónPowerShell has a pipeline

Las canalizaciones son sin duda el concepto más valioso usado en las interfaces de línea de comandos.Pipelines are arguably the most valuable concept used in command-line interfaces. Cuando se usan correctamente, las canalizaciones reducen el esfuerzo de usar comandos complejos y facilitan la visualización del flujo de trabajo.When used properly, pipelines reduce the effort of using complex commands and make it easier to see the flow of work. Cada comando de una canalización pasa su salida, elemento a elemento, al siguiente comando.Each command in a pipeline passes its output, item by item, to the next command. Los comandos no tienen que controlar más de un elemento a la vez.Commands don't have to handle more than one item at a time. El resultado es un menor consumo de recursos y la capacidad de obtener la salida inmediatamente.The result is reduced resource consumption and the ability to get output immediately.

La notación utilizada para las canalizaciones es similar a la notación utilizada en otros shells.The notation used for pipelines is similar to the notation used in other shells. A primera vista, puede que no sea evidente en qué se diferencian las canalizaciones en PowerShell.At first glance, it may not be apparent how pipelines are different in PowerShell. Aunque se ve texto en la pantalla, PowerShell canaliza objetos, no texto, entre los comandos.Although you see text on the screen, PowerShell pipes objects, not text, between commands.

Por ejemplo, si usa el cmdlet Out-Host para forzar una presentación página por página de la salida de otro comando, la salida tiene el aspecto del texto normal que se muestra en la pantalla, dividida en páginas:For example, if you use the Out-Host cmdlet to force a page-by-page display of output from another command, the output looks just like the normal text displayed on the screen, broken up into pages:

Get-ChildItem | Out-Host -Paging
    Directory: /mnt/c/Git/PS-Docs/PowerShell-Docs/reference/7.0/Microsoft.PowerShell.Core

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          05/22/2020    08:30                About
-----          05/20/2020    14:36           9044 Add-History.md
-----          05/20/2020    14:36          12227 Clear-History.md
-----          05/20/2020    14:36           3566 Clear-Host.md
-----          05/20/2020    14:36          29087 Connect-PSSession.md
-----          05/20/2020    14:36           5705 Debug-Job.md
-----          05/20/2020    14:36           3515 Disable-ExperimentalFeature.md
-----          05/20/2020    14:36          25531 Disable-PSRemoting.md
-----          05/20/2020    14:36           7852 Disable-PSSessionConfiguration.md
-----          05/20/2020    14:36          25355 Disconnect-PSSession.md
-----          05/20/2020    14:36           3491 Enable-ExperimentalFeature.md
-----          05/20/2020    14:36          13310 Enable-PSRemoting.md
-----          05/20/2020    14:36           8401 Enable-PSSessionConfiguration.md
-----          05/20/2020    14:36           9531 Enter-PSHostProcess.md
...
<SPACE> next page; <CR> next line; Q quit

La paginación también reduce la utilización de la CPU porque el procesamiento se transfiere al cmdlet Out-Host cuando tiene una página completa lista para mostrar.Paging also reduces CPU utilization because processing transfers to the Out-Host cmdlet when it has a complete page ready to display. Los cmdlets que lo preceden en la canalización pausan la ejecución hasta que la siguiente página de salida está disponible.The cmdlets that precede it in the pipeline pause execution until the next page of output is available.

Objetos de la canalizaciónObjects in the pipeline

Cuando se ejecuta un cmdlet en PowerShell, se verá la salida del texto debido a la necesidad de representar objetos como texto en una ventana de la consola.When you run a cmdlet in PowerShell, you see text output because it is necessary to represent objects as text in a console window. Es posible que la salida de texto no muestre todas las propiedades del objeto que se está emitiendo.The text output may not display all of the properties of the object being output.

Por ejemplo, tenga en cuenta el cmdlet Get-Location.For example, consider the Get-Location cmdlet. La salida de texto es un resumen de la información y no una representación completa del objeto devuelto por Get-Location.The text output is a summary of information, not a complete representation of the object returned by Get-Location. El encabezado de la salida se agrega mediante el proceso que formatea los datos para su visualización en pantalla.The heading in the output is added by the process that formats the data for onscreen display.

Get-Location
Path
----
C:\

Al canalizar la salida al cmdlet Get-Member, se muestra información sobre el objeto devuelto por Get-Location.Piping the output to the Get-Member cmdlet displays information about the object returned by Get-Location.

Get-Location | Get-Member
   TypeName: System.Management.Automation.PathInfo

Name         MemberType Definition
----         ---------- ----------
Equals       Method     bool Equals(System.Object obj)
GetHashCode  Method     int GetHashCode()
GetType      Method     type GetType()
ToString     Method     string ToString()
Drive        Property   System.Management.Automation.PSDriveInfo Drive {get;}
Path         Property   string Path {get;}
Provider     Property   System.Management.Automation.ProviderInfo Provider {get;}
ProviderPath Property   string ProviderPath {get;}

Get-Location devuelve un objeto PathInfo que contiene la ruta de acceso actual y otra información.Get-Location returns a PathInfo object that contains the current path and other information.

Sistema de ayuda integradoBuilt-in help system

De forma similar a las páginas de man de UNIX, PowerShell incluye artículos de ayuda detallados que explican los conceptos y la sintaxis de los comandos de PowerShell.Similar to Unix man pages, PowerShell includes detailed help articles that explain PowerShell concepts and command syntax. Use el cmdlet Get-Help para ver estos artículos en el símbolo del sistema o ver las versiones actualizadas más recientemente de estos artículos en la documentación en línea de PowerShell.Use the Get-Help cmdlet to display these articles at the command prompt or view the most recently updated versions of these articles in the PowerShell documentation online.

Pasos siguientesNext steps

Para obtener más información sobre PowerShell, vea la sección Aprendizaje de PowerShell de este sitio.To learn more about PowerShell, see the Learning PowerShell section of this site.