Windows PowerShell Los fundamentos del lenguaje Prólogo 1. Sobre PowerShell 17 2. Sobre este libro 18 3. Sobre los autores 18 Introducción 1. ¿ Para qué utilizar los scripts ? 19 2. Histórico de los lenguajes de script 20 3. Interés de los scripts frente a los lenguajes de programación 23 4. En resumen... 23 Descubrimiento de PowerShell 1. Presentación de PowerShell 25 2. Histórico de versiones 26 3. Plataformas soportadas 28 3.1 Plataformas cliente 3.2 Plataformas servidor 28 28 4. Comenzando con PowerShell 29 4.1 Arranque de la consola PowerShell www.ediciones-eni.com © Ediciones ENI 29 1/18 Windows PowerShell Los fundamentos del lenguaje 4.2 Descubrir la consola clásica 4.3 El entorno integrado de escritura de scripts (ISE) 30 32 5. Una transición suave con el pasado 36 6. Sistema de ayuda integrado 38 6.1 Actualización de los archivos de ayuda 6.2 Configuración del sistema de ayuda en empresa 6.2.1 Copiar la ayuda en una carpeta compartida en red 6.2.2 Actualización de la ayuda desde una carpeta de red compartida 6.2.3 Forzar Update-Help para que utilice la ubicación de red 7. Comandos básicos 42 7.1 Estructura de los comandos 7.2 Get-Command 7.3 Get-Help 7.3.1 Ayuda sobre los comandos 7.3.2 Ayuda conceptual 7.4 Get-Member 8. Gestión de carpetas y archivos 43 43 47 47 49 50 53 8.1 Get-ChildItem (alias: gci, ls, dir) 8.2 Set-Location (alias: sl, cd, chdir) 8.3 Get-Location (alias: gl, pwd) 8.4 New-Item (alias: ni, md) 8.4.1 Crear una carpeta 8.4.2 Crear un archivo 8.5 Remove-Item (alias: ri, rm, rmdir, rd, erase, del) 8.6 Move-Item (alias: mi, move, mv) 8.6.1 Mover archivos 8.6.2 Mover carpetas 8.7 Rename-Item (alias: ren, rni) 8.7.1 Renombrar un archivo 8.7.2 Renombrar una carpeta 8.8 Copy-Item (alias: cpi, cp, copy) www.ediciones-eni.com 39 40 41 42 42 © Ediciones ENI 53 57 57 57 58 58 59 59 59 60 60 61 61 61 2/18 Windows PowerShell Los fundamentos del lenguaje 9. Proveedores PowerShell 62 Manipulación de objetos 1. ¿ Qué es la noción de objeto ? 67 2. Manipulación de objetos 69 2.1 Las colecciones 2.2 Diferencias de comportamiento entre versiones de PowerShell 2.3 Selección/recuperación de resultados 2.3.1 Recuperación de los n primeros objetos 2.3.2 Recuperación de los n últimos objetos 2.3.3 Recuperación de objetos únicos 2.3.4 Recuperación de una propiedad determinada 2.3.5 Selección de objetos de un array basado en el valor del índice 2.3.6 Examen de todos los objetos de una colección 2.3.7 Agrupación de objetos 2.3.8 Ordenación de objetos 2.3.9 Enumeración/cantidad de objetos 2.3.10 Comparación de objetos 2.4 Filtrar los objetos 3. Formateo de objetos para la visualización 3.1 Format-List 3.1.1 Visualización selectiva de las propiedades de un objeto 3.1.2 Visualización de todas las propiedades disponibles de un objeto 3.2 Format-Table 3.2.1 Tamaño automático de una tabla 3.2.2 Agrupación sobre una propiedad 4. Creación de objetos personalizados 88 89 90 91 92 94 95 96 4.1 Transformación de un objeto existente www.ediciones-eni.com 69 72 74 74 75 75 76 78 78 79 81 82 84 86 © Ediciones ENI 96 3/18 Windows PowerShell Los fundamentos del lenguaje 4.2 Creación de un objeto desde la nada 4.3 Añadir miembros 4.3.1 Añadir una propiedad 4.3.2 Añadir un método 4.4 Creación de una colección de objetos personalizados 99 100 100 102 102 Variables, constantes y tipos 1. Las variables 105 1.1 Creación y asignación 1.2 Determinar el tipo de una variable 1.3 Acceder al contenido de una variable 105 106 106 2. Las constantes 106 3. Tipos de datos 107 4. Asignación manual de tipos y tipado 108 4.1 Conversión de un número decimal en hexadecimal 4.2 Conversión de un número decimal en octal (base 8) 4.3 Conversión de un número decimal en binario (base 2) 110 110 111 5. Hacer obligatoria la declaración e inicialización de variables 111 6. Variables predefinidas 112 6.1 Variables automáticas 6.2 Variables de configuración 112 116 7. Ámbito de las variables 119 7.1 Ámbito global (global:) 7.2 Ámbito local (local:) 7.3 Ámbito script (script:) 7.4 Ámbito privado (private:) www.ediciones-eni.com 121 122 122 123 © Ediciones ENI 4/18 Windows PowerShell Los fundamentos del lenguaje 7.5 Ámbito using (using:) 7.6 Ámbito workflow (workflow:) 123 124 8. Cuantificadores de bytes 124 Operadores 1. Introducción 127 1.1 Operadores aritméticos 127 2. Operadores de comparación 129 2.1 Comparación sobre escalares 2.2 Comparación sobre arrays 129 130 3. Operadores de comparación genéricos 131 4. Operador de comparación de expresiones regulares 133 4.1 Operaciones sobre escalares 4.2 Operaciones sobre arrays 134 137 5. Operador de rango 138 6. Operadores de pertenencia 138 7. Operador de sustitución 139 7.1 Sustitución con la ayuda de una expresión regular 7.2 Sustitución aplicada sobre un array 140 140 8. Operadores de tipo 142 9. Operadores lógicos 142 www.ediciones-eni.com © Ediciones ENI 5/18 Windows PowerShell Los fundamentos del lenguaje 10. Operadores binarios 143 11. Operadores de asignación 144 12. Operadores de redirección 146 13. Operadores de partición y de concatenación 148 14. Operador de formato -f 149 14.1 Nociones básicas 14.2 Ir más allá con los formatos de cadenas 15. Resumen de operadores 149 150 151 Arrays 1. Introducción 155 2. Arrays de una dimensión 155 2.1 Inicializar un array vacío 2.2 Inicializar un array con valores 2.3 Leer un array de una dimensión 2.4 Concatenar dos arrays 2.5 Añadir un elemento a un array 2.6 Modificar el valor de un elemento 2.7 Eliminar un elemento 2.8 Determinar el número de elementos de un array 2.9 Convertir en cadena el contenido de un array 3. Arrays de varias dimensiones www.ediciones-eni.com 156 157 158 159 159 159 160 161 161 161 © Ediciones ENI 6/18 Windows PowerShell Los fundamentos del lenguaje 4. Arrays asociativos 164 4.1 Arrays asociativos estándares 4.1.1 Declarar un array asociativo vacío 4.1.2 Inicializar un array asociativo con datos 4.1.3 Añadir datos a un array asociativo 4.1.4 Recorrer un array asociativo 4.2 Arrays asociativos ordenados 164 164 164 165 166 167 Bucles y condiciones 1. Los bucles 169 1.1 Bucle While 1.2 Bucle Do-While 1.3 Bucle For 1.4 Bucle Foreach 1.4.1 Primera técnica 1.4.2 Segunda técnica 169 170 170 171 171 172 2. Estructura condicional If, Else, ElseIf 174 3. Switch 176 Funciones y scripts 1. Funciones 179 1.1 Estructura de una función 1.2 Uso de argumentos 1.3 Uso de parámetros 1.4 Retorno de valores 1.4.1 Devolver un valor escalar 1.4.2 Devolver un objeto www.ediciones-eni.com 179 180 181 183 183 183 © Ediciones ENI 7/18 Windows PowerShell Los fundamentos del lenguaje 1.5 Funciones filtros 1.6 Introducción a las funciones avanzadas 2. Scripts 185 187 189 2.1 Estructuración de un script 2.2 Comentarios 2.3 Ejecución de un script 2.4 La directiva #Requires 2.5 Toma de contacto del entorno de ejecución (contexto) 2.6 Internacionalización 189 190 190 191 192 195 3. DotSourcing 198 4. Ayuda integrada a los scripts y funciones 199 Gestión de archivos y fechas 1. La gestión de archivos 205 1.1 Envío de datos en un archivo 1.1.1 Archivos de texto con Out-File 1.1.2 Redirección del flujo estándar 1.1.3 Creación de archivos binarios con Set-Content 1.2 Lectura de datos con Get-Content 1.3 Búsqueda en el contenido con Select-String 1.4 Gestión de archivos CSV 1.4.1 Importación/exportación de datos 1.4.2 Conversión de datos al formato CSV 1.4.3 Conversión de datos a partir del formato CSV 1.5 Gestión de archivos XML 1.5.1 Carga de un archivo XML 1.5.2 Gestión del contenido 1.5.3 Serialización/deserialización con los comandos *-CliXML 1.6 Exportar datos como página HTML 1.7 Exportar datos con Out-GridView www.ediciones-eni.com © Ediciones ENI 206 207 209 211 215 220 226 226 230 231 233 235 235 236 238 243 8/18 Windows PowerShell Los fundamentos del lenguaje 2. Fechas 245 2.1 Manipulación de los objetos DateTime 2.2 Formateo de fechas 2.2.1 Formatos estándares 2.2.2 Formatos personalizados 2.3 Manipulación de fechas 2.3.1 Crear una fecha 2.3.2 Modificar una fecha 2.3.3 Comparar fechas 2.3.4 Calcular un intervalo entre dos fechas 2.3.5 Conversión de una fecha expresada en ticks 246 249 251 252 256 256 256 257 257 258 Perfiles PowerShell 1. Introducción 261 2. Perfiles disponibles 262 3. Orden de aplicación de perfiles 264 4. Creación de un perfil 264 5. Personalización del entorno 265 5.1 Modificación del prompt 5.1.1 Un prompt con mucho color 5.1.2 Un prompt siempre en hora 5.2 Modificación del tamaño de la ventana 5.3 Modificación de los colores 5.4 Modificación del título de la ventana 5.5 Añadir un mensaje de bienvenida personalizado 5.6 Perfil completo www.ediciones-eni.com © Ediciones ENI 265 267 267 268 269 270 271 272 9/18 Windows PowerShell Los fundamentos del lenguaje 6. Ejecutar PowerShell sin perfil 274 Módulos y snap-ins 1. Introducción 275 2. Los snap-ins 275 2.1 Enumerar los snap-ins instalados 2.2 Importar un snap-in 2.3 Enumerar los comandos de un snap-in 2.4 Descargar un snap-in 3. Los módulos 276 277 278 279 279 3.1 Instalar un módulo 3.2 Enumerar e importar los módulos 3.2.1 Prefijar los comandos de un módulo 3.3 Enumerar los comandos de un módulo 3.4 Seguir el uso de los módulos 3.5 Descargar un módulo 280 281 288 289 289 292 Gestión de los errores 1. Introducción a la gestión de errores y a la depuración 293 2. La gestión de los errores 294 3. Los errores no críticos 294 3.1 Variable de opciones: $ErrorActionPreference 3.2 El parámetro -ErrorAction y los parámetros comunes 3.3 Almacenamiento de errores 3.4 El tipo ErrorRecord www.ediciones-eni.com © Ediciones ENI 294 296 299 300 10/18 Windows PowerShell Los fundamentos del lenguaje 3.5 Redirección de la visualización de los mensajes de error 3.5.1 Redirección a un archivo de texto 3.5.2 Redirección a una variable 3.5.3 Redirección de errores hacia $null 3.6 Intercepción de errores no críticos 3.6.1 Caso general 3.6.2 Caso de ejecutables externos 4. Los errores críticos 302 303 303 304 304 304 304 305 4.1 Intercepción de errores críticos con trap 4.2 Intercepción de errores críticos con Try-Catch-Finally 4.3 Determinar el tipo de errores críticos 4.4 Generación de excepciones personalizadas 5. La depuración 305 313 315 316 316 5.1 Visualización de mensajes en modo verbose 5.2 Visualización de mensajes en modo debug 5.3 Visualización de mensajes en modo warning 5.4 Forzar la declaración de variables 5.5 Ejecución paso a paso 5.5.1 En la consola PowerShell clásica 5.5.2 En la consola PowerShell ISE 5.6 Modo traza de Set-PSDebug 5.7 Trace-Command 317 318 318 319 321 321 326 327 330 Seguridad 1. La seguridad: ¿ para quién ? ¿ Por qué ? 337 2. Los riesgos vinculados al scripting 337 3. Optimizar la seguridad de PowerShell 338 3.1 La seguridad de PowerShell por defecto www.ediciones-eni.com © Ediciones ENI 338 11/18 Windows PowerShell Los fundamentos del lenguaje 3.2 Las directivas de ejecución 3.2.1 Las diferentes directivas de ejecución 3.2.2 Los ámbitos de las directivas de ejecución 3.2.3 Identificar la directiva de ejecución actual 3.2.4 Aplicar una directiva de ejecución 3.3 Scripts descargados de Internet 3.4 Los Alternate Data Streams (ADS) 3.4.1 Los origines 3.4.2 Crear y leer los ADS 3.4.3 Observar y comprender los ADS de sus archivos .ps1 3.4.4 Modificar el ZoneId o cómo transformar un script remoto en un script local 3.5 Cadenas securizadas 3.5.1 Securizar una cadena 3.5.2 Leer una cadena securizada 3.6 Cifrado 3.6.1 Cifrar una cadena 3.6.2 Descifrar una cadena 3.7 Gestión de credenciales 3.8 Solicitar la introducción de una contraseña de forma segura 3.8.1 Uso del comando Read-Host 3.8.2 Uso del comando Get-Credential 4. Firma de scripts 339 339 342 342 343 345 347 347 348 349 351 351 352 356 357 360 362 363 367 367 367 368 4.1 Las firmas digitales 4.2 Los certificados 4.2.1 Comprar un certificado 4.2.2 Crear un certificado auto firmado 4.3 Firmar su primer script 4.4 Ejecutar scripts firmados 5. Gestionar las directivas de ejecución de PowerShell mediante las directivas de grupo 368 369 369 369 376 378 379 Objetos .NET www.ediciones-eni.com © Ediciones ENI 12/18 Windows PowerShell Los fundamentos del lenguaje 1. Introducción a .NET 385 2. El framework .NET 386 3. Utilizar objetos .NET con PowerShell 387 3.1 Crear una instancia de tipo (Objeto) 3.2 Los assemblies 3.3 Cargar un assembly 3.4 Enumerar los tipos contenidos en los assemblies 4. Sacar partido de la potencia de .NET 390 394 396 397 399 4.1 Wake-on-LAN 4.2 Comprimir un archivo 4.3 Crear un tooltip con información contextual (Balloon Tip) 399 400 402 CIM/WMI 1. Introducción 405 2. Estándares, y más estándares, pero ¿ para hacer qué ? 406 2.1 ¿ Que es WMI ? 2.2 ¿ Que es CIM ? 2.3 CIM vs WMI 2.4 Y concretamente ¿ qué podemos hacer ? 2.4.1 Configuración de servidores DELL mediante iDRAC 2.4.2 Gestión de sistemas operativos Linux desde Windows 2.4.3 Gestión de Windows Server 2012/R2 desde Linux 2.5 Dificultades que superar 3. Arquitectura general y terminología www.ediciones-eni.com 407 407 408 408 408 409 409 409 410 © Ediciones ENI 13/18 Windows PowerShell Los fundamentos del lenguaje 4. Comandos de la familia CIM 412 4.1 Conjunto de comandos 4.2 Descubrimiento de clases 4.2.1 Enumerar todas las clases 4.2.2 Buscar clases con una determinada palabra 4.3 Descubrimiento de los miembros de una clase 4.3.1 Enumerar los miembros de una clase 4.3.2 Buscar miembros de una clase 4.4 Recuperar una o varias instancias 4.5 Recuperar una o varias instancias con un filtro QL/CQL 4.6 Invocar un método 5. Comandos de la familia WMI 421 5.1 Búsqueda de clases y miembros 5.2 Recuperar una o varias instancias 6. Establecer sesiones con equipos remotos 6.1 6.2 6.3 6.4 Comando New-CimSession Comando New-CimSessionOption Comando Get-CimSession Comando Remove-CimSession 7. Monitoring de los recursos con la gestión de eventos 7.1 Vigilar la creación de un proceso local 7.2 Vigilar la creación de un proceso en un equipo remoto 7.3 Vigilar el espacio ocupado de un disco duro en un servidor remoto 7.4 Monitorizar la supresión de archivos 7.5 Algunas explicaciones complementarias 8. Gestión basada en las URI (Uniform Resource Identifier) 8.1 Anatomía de una URI 8.2 Conjunto de comandos PowerShell 8.2.1 Conjunto de comandos de la familia WSMan 8.2.2 Conjunto de comandos de la familia CIM www.ediciones-eni.com 412 413 414 414 415 416 417 418 419 421 © Ediciones ENI 423 424 426 426 427 428 428 429 429 431 434 435 435 436 437 438 438 439 14/18 Windows PowerShell Los fundamentos del lenguaje 8.3 Prueba de la correcta configuración de un sistema 8.4 Envío de consultas CIM/WMI mediante una URI 8.4.1 Enumerar los servicios de un equipo remoto 8.4.2 Determinar la fecha de instalación de un equipo remoto 9. Caja de herramientas gráfica para la exploración de la base CIM/WMI 9.1 Tester WMI (Wbemtest.exe) 9.2 CIM Studio 9.3 SAPIEN WMI Explorer 2015 439 440 440 441 443 443 444 445 Ejecución remota 1. Introducción 447 2. Comunicaciones remotas del framework .NET 448 2.1 Requisitos 2.2 Determinar los comandos remotos del framework .NET 2.3 El conjunto de comandos 2.4 Envío de comandos remotos 3. Comunicaciones remotas de Windows PowerShell 3.1 Requisitos 3.2 Configuración manual del servicio WinRM en un entorno Active Directory 3.2.1 Activación del servicio WinRM 3.2.2 Comunicar con HTTPS 3.2.3 Cambiar los puertos de escucha 3.2.4 Mecanismos de autenticación 3.3 Configuración del servicio WinRM en un entorno Active Directory por GPO 3.4 Configuración del servicio WinRM en un entorno Workgroup 3.4.1 Configuración de la lista de equipos de confianza (trusted hosts list) 3.4.2 Desactivación de la UAC 3.5 Problemática del "doble salto" (noción de rebote) 3.6 Gestión de las configuraciones de sesiones 3.6.1 Generalidades www.ediciones-eni.com © Ediciones ENI 449 449 451 452 454 455 457 457 461 463 465 466 469 469 470 471 472 472 15/18 Windows PowerShell Los fundamentos del lenguaje 3.6.2 Configuraciones de sesión por defecto 3.6.3 Modificación de permisos 3.6.4 Creación de una configuración de sesión personalizada 3.6.5 Creación de una configuración de sesión delegada (RunAs) 3.7 Creación de una sesión remota 3.8 Ejecución de comandos remotos 3.9 Sesiones WinRM en modo desconectado 3.10 Ejecución de scripts remotos 3.11 Apertura de una sesión remota interactiva PowerShell 3.11.1 Enter-PSSession 3.11.2 PowerShell ISE (Integrated Scripting Environment) 3.12 Importación de comandos remotos 475 477 478 486 488 490 492 493 498 498 501 501 Casos de estudio 1. Encontrar las cuentas de equipo caducadas dentro del AD DS 1.1 Problemática 1.2 Dificultades que superar 1.3 Solución 505 505 506 506 2. Enumerar las cuentas de usuario inactivas en el AD DS 2.1 Problemática 2.2 Solución: ¡hacer limpieza! 508 508 508 3. Cambiar la contraseña de Administrador local remotamente 512 3.1 Problemática 3.2 Dificultades que superar 3.3 Solución 1: DCOM/RPC 3.4 Solución 2: WSMan/WinRM 512 513 513 515 4. Vigilar el registro de un evento en el log 516 4.1 Problemática 4.2 Solución www.ediciones-eni.com 516 516 © Ediciones ENI 16/18 Windows PowerShell Los fundamentos del lenguaje 5. Crear cuentas de usuarios por lote 520 5.1 Problemática 5.2 Solución 520 520 6. Verificar la versión software de una aplicación remota 6.1 Problemática 6.2 Solución 523 523 524 7. Actualizar la configuración de red de un conjunto de equipos 7.1 Problemática 7.2 Solución 7.3 Prueba de la solución 526 526 527 529 8. Encontrar los certificados caducados 533 8.1 Problemática 8.2 Solución 1: Tarea planificada local PowerShell 8.3 Solución 2: Consulta desde un punto central 9. Delegar la gestión de un servidor (solamente algunos comandos) 9.1 Problemática 9.2 Solución 533 533 537 538 538 538 Recursos adicionales 1. Recursos Web 545 1.1 Sitios Web en español 1.1.1 IT Pro.es: comunidad de profesionales de Infraestructura 1.1.2 Aprende Informática Conmigo 1.2 Sitios Web en inglés 1.2.1 Windows PowerShell Blog 1.2.2 PowerShell Magazine 1.2.3 PowerShell.org www.ediciones-eni.com © Ediciones ENI 545 545 547 548 548 549 550 17/18 Windows PowerShell Los fundamentos del lenguaje 1.2.4 PowerShell.com 1.2.5 Get-Scripting 1.2.6 CodePlex/GitHub 551 552 553 2. Herramientas de terceros 554 2.1 PowerGUI 2.2 PowerShell Plus 2.3 PowerShell Studio 2015 2.4 PowerGadget 2.5 ISE Steroids 554 555 556 557 558 Anexos 1. Lista de comandos PowerShell v3 en Windows Server 2012 561 2. Lista de los alias 566 3. Lista de los módulos Windows Server 2012 569 4. Lista de los módulos Windows 8 570 5. Lista de los orígenes de traza (Get-TraceSource) 571 6. Sintaxis de las expresiones regulares 572 7. Lista de verbos aprobados (Get-Verb) 574 índice 577 www.ediciones-eni.com © Ediciones ENI 18/18