PowerShell es una herramienta de automatización extensible de código abierto de Microsoft [2] que consta de un shell con una interfaz de línea de comandos y un lenguaje de secuencias de comandos que lo acompaña . El lenguaje se demostró públicamente por primera vez en la Conferencia de desarrolladores profesionales (PDC) en septiembre de 2003 , con el nombre en código Monad. La herramienta se lanzó originalmente como una característica de Windows llamada Windows PowerShell . El código abierto se lanzó con el inicio del desarrollo de PowerShell Core en agosto de 2016 .
Windows PowerShell 2.0 se lanzó con Windows 7 , Windows 8 y Windows Server 2008 R2 , así como con Windows Server 2012 R2 como componente integral del sistema. Además, la segunda versión también está disponible para otros sistemas como Windows XP SP3, Windows Server 2003 SP2, Windows Vista SP1, Windows Vista SP2, Windows Server 2008 [3] y Windows Server 2012.
PowerShell se creó e integró originalmente con Microsoft .NET Framework y más tarde con .NET . Además, PowerShell brinda acceso conveniente a COM , WMI y ADSI , así como la capacidad de ejecutar comandos de línea de comandos comunes para crear un entorno único donde los administradores pueden realizar diversas tareas en sistemas locales y remotos.
Estas tareas administrativas generalmente se realizan mediante cmdlets (originalmente "cmdlets" ), que son clases .NET especializadas. El usuario puede combinarlos en scripts (scripts) usando varias construcciones, utilidades de línea de comandos y llamadas a clases regulares de .NET, objetos WMI o COM . Además, puedes utilizar varios almacenes de datos, como el sistema de archivos o el registro de Windows , que son proporcionados por PowerShell a través de proveedores ( proveedores en inglés ).
PowerShell también proporciona un mecanismo de incrustación a través del cual los ejecutables de PowerShell pueden incrustarse en otras aplicaciones. Luego, estas aplicaciones pueden usar la funcionalidad de PowerShell para implementar una variedad de operaciones, incluidas las proporcionadas a través de una interfaz gráfica. Este enfoque se adopta en Microsoft Exchange Server 2007 para implementar la funcionalidad de administración en forma de cmdlets de PowerShell y las utilidades de administración gráfica en forma de shells de PowerShell que invocan los cmdlets necesarios. Por lo tanto, la interfaz de administración gráfica se encuentra en la parte superior de la capa intermedia: PowerShell. Otras aplicaciones de Microsoft, incluidas Microsoft SQL Server 2008 , System Center Operations Manager y System Center Data Protection Manager , también brindan acceso a sus interfaces de administración a través de los cmdlets de PowerShell.
PowerShell tiene su propia ayuda extensible disponible (incluso desde la línea de comandos) a través de Get-Help.
Cada versión lanzada de MS-DOS y Microsoft Windows para computadoras personales incluía una utilidad que proporcionaba una interfaz de línea de comandos. Estos fueron COMMAND.COM(en sistemas basados en MS-DOS, incluido Windows 9x ) y cmd.exe(en sistemas de la familia Windows NT ). Estos eran intérpretes de línea de comandos ordinarios con solo unos pocos comandos básicos. Otras tareas requerían aplicaciones de consola separadas que se llamaban desde estos shells. También disponían de un lenguaje de scripting ( archivos por lotes ) con el que automatizar diversas tareas. Sin embargo, estos intérpretes no eran adecuados para la automatización total, en parte porque carecían de los equivalentes de muchas operaciones GUI y también debido a la débil funcionalidad del lenguaje de secuencias de comandos, que no permitía describir algoritmos suficientemente complejos. En Windows Server 2003 , la situación mejoró, pero el soporte de secuencias de comandos aún se consideraba insuficiente.
Microsoft trató de abordar algunas de estas deficiencias con Windows Script Host , lanzado en 1998 con Windows 98 , y una utilidad de línea de comandos cscript.exe. Se integra con Active Script y permite realizar secuencias de comandos en lenguajes compatibles como JScript y VBScript utilizando las API proporcionadas por las aplicaciones a través del Component Object Model (COM). Sin embargo, esta solución tiene sus inconvenientes. Windows Script Host no está integrado con el shell, no hay documentación incorporada. Varias versiones de Windows también proporcionan shells especiales (como netsh.exeWMIC ) con sus propios conjuntos de comandos. No están integrados con el shell y no proporcionan interoperabilidad.
En 2003, Microsoft comenzó a desarrollar un nuevo shell llamado Monad (también conocido como Microsoft Shell o MSH). Monad iba a ser un shell de línea de comandos nuevo y extensible, con un diseño nuevo que automatizaría una amplia gama de tareas administrativas. Microsoft lanzó la primera versión beta pública de Monad el 17 de junio de 2005. La segunda y tercera versión beta se lanzaron el 11 de septiembre de 2005 y el 10 de enero de 2006, respectivamente. El 25 de abril de 2006, se anunció que se había cambiado el nombre de Monad a Windows PowerShell para posicionarlo como una parte importante de sus tecnologías de administración. Al mismo tiempo, se lanzó Release Candidate 1. Release Candidate 2 siguió el 26 de septiembre de 2006. La versión final (Release to Web, RTW) se lanzó el 14 de noviembre de 2006 para Windows XP SP2 y Windows 2003. La versión final para Windows Vista no estuvo disponible hasta el 30 de enero de 2007.
La última versión preliminar de tecnología comunitaria de Windows PowerShell versión 2.0 se publicó en diciembre de 2008. La versión final de la segunda versión de PowerShell se lanzó en Windows 7 y Windows Server 2008 R2 al mismo tiempo que se lanzaron. Para otros sistemas (Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008), PowerShell 2 estuvo disponible como parte de Windows Management Framework el 27 de octubre de 2009. Además de Windows PowerShell versión 2, este paquete también incluye WinRM versión 2.0 y BITS 4.0 (este último solo está disponible para Windows Vista y Windows 2008; está integrado en Windows 7 y Windows Server 2008 R2).
Los comandos que se ejecutan en Windows PowerShell pueden tener la forma de cmdlets, que son clases .NET especializadas diseñadas para proporcionar funcionalidad en PowerShell como scripts de PowerShell ( .PS1), o pueden ser ejecutables regulares . Si el comando es un archivo ejecutable, PowerShell lo ejecuta en un proceso separado; si es un comando, entonces se ejecuta dentro del proceso de PowerShell. PowerShell proporciona una interfaz de línea de comandos donde puede ingresar comandos y mostrar su salida como texto. Esta interfaz de usuario, que se basa en el mecanismo de consola estándar de Windows , proporciona un mecanismo de finalización de comandos personalizable, pero no proporciona resaltado de sintaxis, aunque se puede proporcionar si se desea [4] . En PowerShell, también puede crear alias ( eng. alias ) para cmdlets que, cuando se llaman, se convierten en comandos originales. Además, los cmdlets admiten parámetros posicionales y con nombre. Cuando ejecuta un cmdlet, el propio PowerShell realiza el trabajo de vincular los valores de los argumentos a los parámetros, pero cuando llama a los ejecutables externos, se les pasan los argumentos para su análisis.
Otro concepto que se usa en PowerShell es una canalización . Al igual que las canalizaciones en UNIX , están diseñadas para combinar varios comandos al pasar la salida de un comando a la entrada de un segundo comando usando el . Pero, a diferencia de su contraparte en UNIX, la canalización de PowerShell es completamente objeto , es decir, los datos entre cmdlets se transfieren como objetos completos de los tipos apropiados, y no como una secuencia de bytes. Cuando los datos se pasan como objetos, los elementos que contienen conservan su estructura y tipos en los cmdlets, sin necesidad de serializar ni analizar los datos carácter por carácter. El objeto también puede contener algunas funciones diseñadas para trabajar con datos. También se ponen a disposición del cmdlet que los recibe. El resultado del último cmdlet en la canalización de PowerShell se pasa automáticamente al cmdlet , que crea una representación textual de los objetos y los datos que contienen y los muestra en la pantalla. |Write-Host
Dado que todos los objetos de PowerShell son objetos .NET, contienen un método .ToString()que devuelve una representación textual de los datos del objeto. PowerShell usa este método para convertir un objeto en texto. Además, permite especificar reglas de formato para personalizar la representación textual de los objetos. Sin embargo, por motivos de compatibilidad, si se usa un ejecutable externo en una canalización, recibe un flujo de texto que representa el objeto y no se integra con el sistema de tipos de PowerShell.
Sistema de tipo extendido (ETS) PowerShell se basa en el sistema de tipo .NET, pero implementa algunas adiciones . Por ejemplo, le permite crear diferentes representaciones de objetos, mostrando solo algunas de sus propiedades y métodos, así como aplicar mecanismos especiales de formato y clasificación. Estas vistas están vinculadas a los objetos originales mediante archivos de configuración en formato XML .
Los cmdlets son comandos de PowerShell especializados que implementan diversas funciones . Estos son comandos integrados en PowerShell. Los cmdlets se nombran de acuerdo con la regla , por ejemplo, para que su propósito quede claro en el nombre. Los cmdlets generan resultados como objetos o colecciones de objetos. Además, los cmdlets pueden recibir entradas de la misma forma y, en consecuencia, usarse como receptores en la canalización. Si bien PowerShell le permite canalizar matrices y otras colecciones, los cmdlets siempre procesan los objetos de uno en uno. Para una colección de objetos, el controlador de cmdlet se invoca en cada objeto de la colección por turno. Глагол-СуществительноеGet-ChildItem
Las instancias de objetos se crean en PowerShell y se ejecutan cuando se invocan. Los cmdlets se heredan de Cmdleto de PSCmdlet, y este último se usa cuando el cmdlet necesita interactuar con la parte ejecutable de PowerShell ( tiempo de ejecución de PowerShell ) . Estas clases base especifican algunos métodos, y al menos uno de los cuales la implementación del cmdlet debe sobrescribir para proporcionar su funcionalidad. Cada vez que se ejecuta el cmdlet, PowerShell llama a estos métodos a su vez. Primero, se llama , luego, si los datos se pasan al cmdlet a través de la canalización, para cada elemento y, al final, - . Una clase que implementa debe tener un atributo .NET , que especifica el verbo y el sustantivo que forman el nombre del cmdlet. Los verbos populares se presentan en forma de enumeración ( ing. enum ). BeginProcessing()ProcessRecord()EndProcessing()BeginProcessing()ProcessRecord()EndProcessing()CmdletCmdletAttribute
Las implementaciones de cmdlet pueden llamar a cualquier API de .NET disponible y se pueden escribir en cualquier lenguaje de .NET. PowerShell también proporciona algunas API adicionales, como WriteObject(), que son necesarias para acceder a la funcionalidad específica de PowerShell, como la salida de objetos de resultados a una canalización. Los cmdlets pueden usar las API para acceder a los datos directamente o pueden usar el marco de trabajo del proveedor de PowerShell para acceder a los almacenes de datos a través de rutas únicas. Los almacenes de datos se representan a través de letras de unidad y una estructura de directorio jerárquica dentro de ellos. Windows PowerShell incluye proveedores para el sistema de archivos , el registro de Windows , el almacén de certificados y los alias de comandos, variables y funciones. Otras aplicaciones pueden agregar sus propios cmdlets y proveedores para acceder a sus almacenes de datos.
PowerShell 2.0 agregó la capacidad de crear cmdlets en el mismo PowerShell, sin usar lenguajes .NET.
PowerShell, al igual que los shells de UNIX/Linux, tiene una canalización. Esta canalización se usa para canalizar la salida de un cmdlet a la entrada de otro cmdlet. En particular, el usuario puede enviar los resultados de un cmdlet Get-Processa un cmdlet Sort-Object(por ejemplo, para ordenar los procesos por identificadores), luego Where-Objectfiltrar los procesos que, por ejemplo, ocupan menos de 1 MB de memoria de página y finalmente pasar el resultados al cmdlet Select-Objectpara seleccionar solo los primeros 10 procesos (por número de identificadores). El concepto de canalización se usa originalmente en sistemas similares a UNIX (consulte Canalización (UNIX) ), el concepto de PowerShell es diferente de este. En sistemas similares a UNIX, la salida de un comando se pasa a la siguiente etapa de la canalización en forma binaria, es decir, en realidad es un flujo de datos. Ejemplo: dd if=/dev/zero bs=1M count=1M | bzip2 -z9 -c > ex.bz2donde el flujo de "ceros" en bloques de 1 MB en la cantidad de 1 millón de veces (desde el dispositivo /dev/zero) por el comando dd(copiando archivos especiales) se transmite a la entrada del comando Bzip2, que los comprime tanto como sea posible (desde el punto de vista del algoritmo de compresión bzip2, opción -z9) y el flujo resultante se transmite a stdout(opción -с), que a su vez se redirige a un archivo ex.bz2. El resultado de ejecutar un comando tan relativamente corto será la creación de un archivo, dentro del cual habrá una secuencia de cero bytes de 1 terabyte de tamaño. El proceso de creación de dicho archivo en este caso utiliza 2 canalizaciones secuenciales.
PowerShell incluye un lenguaje de secuencias de comandos con tipos dinámicos que se pueden usar para implementar operaciones complejas mediante cmdlets. El lenguaje de secuencias de comandos admite variables, funciones, construcciones de bifurcación ( if-then-else), bucles ( while, y ) do, manejo estructurado de errores y muchas otras características, incluida la integración de .NET. Las variables en PowerShell se indican con un prefijo antes del nombre; se pueden establecer en cualquier valor, incluida la salida de cmdlets. Aunque el lenguaje en sí no está fuertemente tipado , las variables internas se almacenan con sus tipos, que pueden ser tipos u objetos primitivos . Las cadenas se pueden encerrar entre comillas simples o dobles: el uso de comillas dobles reemplazará las variables contenidas en la cadena con sus valores. De acuerdo con la sintaxis de la variable, si la ruta de un archivo está encerrada entre llaves precedidas por un signo de dólar (es decir , ), será una referencia al contenido del archivo. Todo lo que se asignará a dicha variable se escribirá en el archivo y viceversa: al acceder a su contenido, se mostrará el contenido del archivo. forforeach$ ${C:\foo.txt}
Puede acceder a las propiedades y métodos de un objeto utilizando el punto ( .) como en la sintaxis de C# . PowerShell proporciona variables especiales como $args, que contiene una matriz de todos los argumentos de la línea de comandos sin nombre pasados a una función, o $_que hace referencia al objeto actual en canalizaciones y otras construcciones. PowerShell también tiene arreglos y arreglos asociativos . Además, PowerShell evalúa automáticamente las expresiones aritméticas ingresadas en la línea de comando y comprende abreviaturas populares como GB (GB), MB (MB) y KB (KB).
En PowerShell, puede crear sus propias funciones que toman parámetros usando el function. El problema para muchos principiantes es que las funciones no toman argumentos separados por comas, sino por espacios (como utilidades de línea de comandos o cmdlets):
Estos argumentos se pueden vincular a los parámetros especificados en la declaración de la función. También se puede acceder a ellos a través de una matriz $args.
PowerShell le permite llamar a cualquier método .NET encerrando su espacio de nombres entre corchetes ( []) y luego usando un par de dos puntos ( ::) para especificar un método estático . Por ejemplo, [System.Console]::WriteLine("PowerShell"). Los objetos se crean mediante el cmdlet New-Objecty puede agregarles nuevas propiedades mediante el cmdlet Add-Member.
Para el manejo de errores, PowerShell proporciona un mecanismo basado en .NET. En caso de error, Exceptionse devuelven objetos que contienen información sobre el error (objeto), que son interceptados por la palabra clave trap. Sin embargo, el comportamiento del error es configurable. Por ejemplo, puede configurar PowerShell para que continúe ejecutándose de forma silenciosa en caso de error sin atrapar el error. La segunda versión de PowerShell también agregó el Try Catch Finally.
Los scripts escritos en PowerShell se pueden guardar entre sesiones en formato .PS1. A continuación, puede utilizar todo el script o funciones individuales de él. Los scripts y las funciones se usan como cmdlets, es decir, pueden ser comandos en una canalización y puede pasarles parámetros. Los objetos se pueden pasar de forma transparente entre scripts, funciones y cmdlets en una canalización. Sin embargo, la ejecución de scripts de PowerShell está deshabilitada de forma predeterminada y debe habilitarse mediante el cmdlet Set-ExecutionPolicy. Los scripts de PowerShell se pueden firmar digitalmente para verificar su integridad.
Microsoft lanzó PowerShell 2.0 como parte de Windows 7 y Windows Server 2008 R2. Windows PowerShell 2.0 está preinstalado en estos sistemas. La excepción es el modo de instalación de Windows Server 2008 R2 en modo Core, donde PowerShell 2.0 se puede reinstalar manualmente. Para plataformas más antiguas, está disponible como parte de Windows Management Framework. PowerShell 2.0 trae algunos cambios al lenguaje de secuencias de comandos y la API de incrustación, además de 240 cmdlets nuevos.
Una lista parcial de las nuevas características incluidas en PowerShell 2.0:
La siguiente tabla contiene una selección de los cmdlets que se envían con PowerShell, con comandos que son lo más similares posible a otros shells de línea de comandos conocidos.
Cabe señalar que esta tabla se proporciona para un conocimiento superficial, no cubre todas las posibilidades de las conchas presentadas.
Windows PowerShell (cmdlet) |
Windows PowerShell (alias) |
cmd.exe / COMMAND.COM (MS-DOS, Windows, OS/2, etc.) |
Bash (Unix, BSD, Linux, Mac OS X, etc.) |
Descripción |
---|---|---|---|---|
Obtener ubicación | gl, pwd | discos compactos [5] | personas con discapacidad | Muestra el directorio de trabajo actual |
Escoger localización | sl, cd, chdir | cd , chdir | discos compactos | Cambia el directorio actual |
claro-host | claro, claro | cls | claro | Borra la pantalla [6] |
Copiar elemento | cpi, copia, cp | Copiar | c.p. | Copia uno o más archivos o un árbol de directorios (en PowerShell, también puede copiar objetos de otros proveedores de datos) |
Consigue ayuda | ayuda hombre | ayuda | hombre | Ayuda de comandos |
Remover el artículo | ri, del, borrar, rmdir, rd, rm | del , borrar , rmdir , rd | rm , rmdir | Elimina un archivo/directorio (u otro elemento en los proveedores de datos de PowerShell). |
Renombrar artículo | rni, ren | ren , renombrar | m.v. | Cambia el nombre de un archivo/directorio |
Mover elemento | mi, muévete, mv | Muevete | m.v. | Mueve un archivo/directorio a una nueva ubicación |
Obtener elemento secundario | gci, directorio, ls | directorio | ls | Lista todos los archivos/directorios en el directorio actual |
Salida de escritura | eco, escribir | eco | eco | Imprime cadenas, variables a la salida estándar |
ubicación pop | papá | papá | papá | Cambia el directorio actual al último que se colocó en la pila |
Empujar ubicación | empujar | empujar | empujar | Empuja el directorio actual a la pila |
Establecer variables | sv, conjunto | establecer | establecer | Establecer el valor de una variable / crear una variable |
Obtener el contenido | gc, tipo, gato | escribe | gato | Obtiene el contenido de un archivo. |
Seleccionar cadena | SLS | encontrar , encontrar str | grep | Muestra líneas que coinciden con una condición |
ObtenerProceso | gps, pd | tlist, [7] lista de tareas [8] | PD | Enumera todos los procesos en ejecución |
Detener proceso | spps, matar | matar , [7] matar tareas [8] | matar | Detiene un proceso en ejecución |
Objeto en T | tee | n / A | tee | Pasa la entrada a un archivo o variable, luego la pasa más abajo en la canalización |
.RED | |
---|---|
Implementaciones | |
Arquitectura | |
Infraestructura | |
Idiomas de Microsoft | |
Otros idiomas | |
Fundamentos de Windows | |
Componentes | |
comparaciones |
|
Tecnologías futuras | |
Recursos informativos |
Software de Microsoft gratuito y de código abierto | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
información general |
| ||||||||||||
Software _ |
| ||||||||||||
Licencias | |||||||||||||
Temas relacionados |
| ||||||||||||
Categoría |