Anda di halaman 1dari 18

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 28


3.2 Plataformas servidor 28

4. Comenzando con PowerShell 29

4.1 Arranque de la consola PowerShell 29

www.ediciones-eni.com © Ediciones ENI 1/18


Windows PowerShell
Los fundamentos del lenguaje

4.2 Descubrir la consola clásica 30


4.3 El entorno integrado de escritura de scripts (ISE) 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 39
6.2 Configuración del sistema de ayuda en empresa 40
6.2.1 Copiar la ayuda en una carpeta compartida en red 41
6.2.2 Actualización de la ayuda desde una carpeta de red compartida 42
6.2.3 Forzar Update-Help para que utilice la ubicación de red 42

7. Comandos básicos 42

7.1 Estructura de los comandos 43


7.2 Get-Command 43
7.3 Get-Help 47
7.3.1 Ayuda sobre los comandos 47
7.3.2 Ayuda conceptual 49
7.4 Get-Member 50

8. Gestión de carpetas y archivos 53

8.1 Get-ChildItem (alias: gci, ls, dir) 53


8.2 Set-Location (alias: sl, cd, chdir) 57
8.3 Get-Location (alias: gl, pwd) 57
8.4 New-Item (alias: ni, md) 57
8.4.1 Crear una carpeta 58
8.4.2 Crear un archivo 58
8.5 Remove-Item (alias: ri, rm, rmdir, rd, erase, del) 59
8.6 Move-Item (alias: mi, move, mv) 59
8.6.1 Mover archivos 59
8.6.2 Mover carpetas 60
8.7 Rename-Item (alias: ren, rni) 60
8.7.1 Renombrar un archivo 61
8.7.2 Renombrar una carpeta 61
8.8 Copy-Item (alias: cpi, cp, copy) 61

www.ediciones-eni.com © Ediciones ENI 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 69
2.2 Diferencias de comportamiento entre versiones de PowerShell 72
2.3 Selección/recuperación de resultados 74
2.3.1 Recuperación de los n primeros objetos 74
2.3.2 Recuperación de los n últimos objetos 75
2.3.3 Recuperación de objetos únicos 75
2.3.4 Recuperación de una propiedad determinada 76
2.3.5 Selección de objetos de un array basado en el valor del índice 78
2.3.6 Examen de todos los objetos de una colección 78
2.3.7 Agrupación de objetos 79
2.3.8 Ordenación de objetos 81
2.3.9 Enumeración/cantidad de objetos 82
2.3.10 Comparación de objetos 84
2.4 Filtrar los objetos 86

3. Formateo de objetos para la visualización 88

3.1 Format-List 89
3.1.1 Visualización selectiva de las propiedades de un objeto 90
3.1.2 Visualización de todas las propiedades disponibles de un objeto 91
3.2 Format-Table 92
3.2.1 Tamaño automático de una tabla 94
3.2.2 Agrupación sobre una propiedad 95

4. Creación de objetos personalizados 96

4.1 Transformación de un objeto existente 96

www.ediciones-eni.com © Ediciones ENI 3/18


Windows PowerShell
Los fundamentos del lenguaje

4.2 Creación de un objeto desde la nada 99


4.3 Añadir miembros 100
4.3.1 Añadir una propiedad 100
4.3.2 Añadir un método 102
4.4 Creación de una colección de objetos personalizados 102

Variables, constantes y tipos

1. Las variables 105

1.1 Creación y asignación 105


1.2 Determinar el tipo de una variable 106
1.3 Acceder al contenido de una variable 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 110


4.2 Conversión de un número decimal en octal (base 8) 110
4.3 Conversión de un número decimal en binario (base 2) 111

5. Hacer obligatoria la declaración e inicialización de variables 111

6. Variables predefinidas 112

6.1 Variables automáticas 112


6.2 Variables de configuración 116

7. Ámbito de las variables 119

7.1 Ámbito global (global:) 121


7.2 Ámbito local (local:) 122
7.3 Ámbito script (script:) 122
7.4 Ámbito privado (private:) 123

www.ediciones-eni.com © Ediciones ENI 4/18


Windows PowerShell
Los fundamentos del lenguaje

7.5 Ámbito using (using:) 123


7.6 Ámbito workflow (workflow:) 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 129


2.2 Comparación sobre arrays 130

3. Operadores de comparación genéricos 131

4. Operador de comparación de expresiones regulares 133

4.1 Operaciones sobre escalares 134


4.2 Operaciones sobre arrays 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 140


7.2 Sustitución aplicada sobre un array 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 149


14.2 Ir más allá con los formatos de cadenas 150

15. Resumen de operadores 151

Arrays

1. Introducción 155

2. Arrays de una dimensión 155


2.1 Inicializar un array vacío 156
2.2 Inicializar un array con valores 157
2.3 Leer un array de una dimensión 158
2.4 Concatenar dos arrays 159
2.5 Añadir un elemento a un array 159
2.6 Modificar el valor de un elemento 159
2.7 Eliminar un elemento 160
2.8 Determinar el número de elementos de un array 161
2.9 Convertir en cadena el contenido de un array 161

3. Arrays de varias dimensiones 161

www.ediciones-eni.com © Ediciones ENI 6/18


Windows PowerShell
Los fundamentos del lenguaje

4. Arrays asociativos 164


4.1 Arrays asociativos estándares 164
4.1.1 Declarar un array asociativo vacío 164
4.1.2 Inicializar un array asociativo con datos 164
4.1.3 Añadir datos a un array asociativo 165
4.1.4 Recorrer un array asociativo 166
4.2 Arrays asociativos ordenados 167

Bucles y condiciones

1. Los bucles 169

1.1 Bucle While 169


1.2 Bucle Do-While 170
1.3 Bucle For 170
1.4 Bucle Foreach 171
1.4.1 Primera técnica 171
1.4.2 Segunda técnica 172

2. Estructura condicional If, Else, ElseIf 174

3. Switch 176

Funciones y scripts

1. Funciones 179

1.1 Estructura de una función 179


1.2 Uso de argumentos 180
1.3 Uso de parámetros 181
1.4 Retorno de valores 183
1.4.1 Devolver un valor escalar 183
1.4.2 Devolver un objeto 183

www.ediciones-eni.com © Ediciones ENI 7/18


Windows PowerShell
Los fundamentos del lenguaje

1.5 Funciones filtros 185


1.6 Introducción a las funciones avanzadas 187

2. Scripts 189
2.1 Estructuración de un script 189
2.2 Comentarios 190
2.3 Ejecución de un script 190
2.4 La directiva #Requires 191
2.5 Toma de contacto del entorno de ejecución (contexto) 192
2.6 Internacionalización 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 206


1.1.1 Archivos de texto con Out-File 207
1.1.2 Redirección del flujo estándar 209
1.1.3 Creación de archivos binarios con Set-Content 211
1.2 Lectura de datos con Get-Content 215
1.3 Búsqueda en el contenido con Select-String 220
1.4 Gestión de archivos CSV 226
1.4.1 Importación/exportación de datos 226
1.4.2 Conversión de datos al formato CSV 230
1.4.3 Conversión de datos a partir del formato CSV 231
1.5 Gestión de archivos XML 233
1.5.1 Carga de un archivo XML 235
1.5.2 Gestión del contenido 235
1.5.3 Serialización/deserialización con los comandos *-CliXML 236
1.6 Exportar datos como página HTML 238
1.7 Exportar datos con Out-GridView 243

www.ediciones-eni.com © Ediciones ENI 8/18


Windows PowerShell
Los fundamentos del lenguaje

2. Fechas 245
2.1 Manipulación de los objetos DateTime 246
2.2 Formateo de fechas 249
2.2.1 Formatos estándares 251
2.2.2 Formatos personalizados 252
2.3 Manipulación de fechas 256
2.3.1 Crear una fecha 256
2.3.2 Modificar una fecha 256
2.3.3 Comparar fechas 257
2.3.4 Calcular un intervalo entre dos fechas 257
2.3.5 Conversión de una fecha expresada en ticks 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 265


5.1.1 Un prompt con mucho color 267
5.1.2 Un prompt siempre en hora 267
5.2 Modificación del tamaño de la ventana 268
5.3 Modificación de los colores 269
5.4 Modificación del título de la ventana 270
5.5 Añadir un mensaje de bienvenida personalizado 271
5.6 Perfil completo 272

www.ediciones-eni.com © Ediciones ENI 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 276
2.2 Importar un snap-in 277
2.3 Enumerar los comandos de un snap-in 278
2.4 Descargar un snap-in 279

3. Los módulos 279

3.1 Instalar un módulo 280


3.2 Enumerar e importar los módulos 281
3.2.1 Prefijar los comandos de un módulo 288
3.3 Enumerar los comandos de un módulo 289
3.4 Seguir el uso de los módulos 289
3.5 Descargar un módulo 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 294


3.2 El parámetro -ErrorAction y los parámetros comunes 296
3.3 Almacenamiento de errores 299
3.4 El tipo ErrorRecord 300

www.ediciones-eni.com © Ediciones ENI 10/18


Windows PowerShell
Los fundamentos del lenguaje

3.5 Redirección de la visualización de los mensajes de error 302


3.5.1 Redirección a un archivo de texto 303
3.5.2 Redirección a una variable 303
3.5.3 Redirección de errores hacia $null 304
3.6 Intercepción de errores no críticos 304
3.6.1 Caso general 304
3.6.2 Caso de ejecutables externos 304

4. Los errores críticos 305


4.1 Intercepción de errores críticos con trap 305
4.2 Intercepción de errores críticos con Try-Catch-Finally 313
4.3 Determinar el tipo de errores críticos 315
4.4 Generación de excepciones personalizadas 316

5. La depuración 316
5.1 Visualización de mensajes en modo verbose 317
5.2 Visualización de mensajes en modo debug 318
5.3 Visualización de mensajes en modo warning 318
5.4 Forzar la declaración de variables 319
5.5 Ejecución paso a paso 321
5.5.1 En la consola PowerShell clásica 321
5.5.2 En la consola PowerShell ISE 326
5.6 Modo traza de Set-PSDebug 327
5.7 Trace-Command 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 338

www.ediciones-eni.com © Ediciones ENI 11/18


Windows PowerShell
Los fundamentos del lenguaje

3.2 Las directivas de ejecución 339


3.2.1 Las diferentes directivas de ejecución 339
3.2.2 Los ámbitos de las directivas de ejecución 342
3.2.3 Identificar la directiva de ejecución actual 342
3.2.4 Aplicar una directiva de ejecución 343
3.3 Scripts descargados de Internet 345
3.4 Los Alternate Data Streams (ADS) 347
3.4.1 Los origines 347
3.4.2 Crear y leer los ADS 348
3.4.3 Observar y comprender los ADS de sus archivos .ps1 349
3.4.4 Modificar el ZoneId o cómo transformar un script remoto en un script local 351
3.5 Cadenas securizadas 351
3.5.1 Securizar una cadena 352
3.5.2 Leer una cadena securizada 356
3.6 Cifrado 357
3.6.1 Cifrar una cadena 360
3.6.2 Descifrar una cadena 362
3.7 Gestión de credenciales 363
3.8 Solicitar la introducción de una contraseña de forma segura 367
3.8.1 Uso del comando Read-Host 367
3.8.2 Uso del comando Get-Credential 367

4. Firma de scripts 368

4.1 Las firmas digitales 368


4.2 Los certificados 369
4.2.1 Comprar un certificado 369
4.2.2 Crear un certificado auto firmado 369
4.3 Firmar su primer script 376
4.4 Ejecutar scripts firmados 378

5. Gestionar las directivas de ejecución de PowerShell mediante las directivas de grupo 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) 390


3.2 Los assemblies 394
3.3 Cargar un assembly 396
3.4 Enumerar los tipos contenidos en los assemblies 397

4. Sacar partido de la potencia de .NET 399


4.1 Wake-on-LAN 399
4.2 Comprimir un archivo 400
4.3 Crear un tooltip con información contextual (Balloon Tip) 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 ? 407


2.2 ¿ Que es CIM ? 407
2.3 CIM vs WMI 408
2.4 Y concretamente ¿ qué podemos hacer ? 408
2.4.1 Configuración de servidores DELL mediante iDRAC 408
2.4.2 Gestión de sistemas operativos Linux desde Windows 409
2.4.3 Gestión de Windows Server 2012/R2 desde Linux 409
2.5 Dificultades que superar 409

3. Arquitectura general y terminología 410

www.ediciones-eni.com © Ediciones ENI 13/18


Windows PowerShell
Los fundamentos del lenguaje

4. Comandos de la familia CIM 412


4.1 Conjunto de comandos 412
4.2 Descubrimiento de clases 413
4.2.1 Enumerar todas las clases 414
4.2.2 Buscar clases con una determinada palabra 414
4.3 Descubrimiento de los miembros de una clase 415
4.3.1 Enumerar los miembros de una clase 416
4.3.2 Buscar miembros de una clase 417
4.4 Recuperar una o varias instancias 418
4.5 Recuperar una o varias instancias con un filtro QL/CQL 419
4.6 Invocar un método 421

5. Comandos de la familia WMI 421

5.1 Búsqueda de clases y miembros 423


5.2 Recuperar una o varias instancias 424

6. Establecer sesiones con equipos remotos 426

6.1 Comando New-CimSession 426


6.2 Comando New-CimSessionOption 427
6.3 Comando Get-CimSession 428
6.4 Comando Remove-CimSession 428

7. Monitoring de los recursos con la gestión de eventos 429

7.1 Vigilar la creación de un proceso local 429


7.2 Vigilar la creación de un proceso en un equipo remoto 431
7.3 Vigilar el espacio ocupado de un disco duro en un servidor remoto 434
7.4 Monitorizar la supresión de archivos 435
7.5 Algunas explicaciones complementarias 435

8. Gestión basada en las URI (Uniform Resource Identifier) 436

8.1 Anatomía de una URI 437


8.2 Conjunto de comandos PowerShell 438
8.2.1 Conjunto de comandos de la familia WSMan 438
8.2.2 Conjunto de comandos de la familia CIM 439

www.ediciones-eni.com © Ediciones ENI 14/18


Windows PowerShell
Los fundamentos del lenguaje

8.3 Prueba de la correcta configuración de un sistema 439


8.4 Envío de consultas CIM/WMI mediante una URI 440
8.4.1 Enumerar los servicios de un equipo remoto 440
8.4.2 Determinar la fecha de instalación de un equipo remoto 441

9. Caja de herramientas gráfica para la exploración de la base CIM/WMI 443


9.1 Tester WMI (Wbemtest.exe) 443
9.2 CIM Studio 444
9.3 SAPIEN WMI Explorer 2015 445

Ejecución remota

1. Introducción 447

2. Comunicaciones remotas del framework .NET 448

2.1 Requisitos 449


2.2 Determinar los comandos remotos del framework .NET 449
2.3 El conjunto de comandos 451
2.4 Envío de comandos remotos 452

3. Comunicaciones remotas de Windows PowerShell 454


3.1 Requisitos 455
3.2 Configuración manual del servicio WinRM en un entorno Active Directory 457
3.2.1 Activación del servicio WinRM 457
3.2.2 Comunicar con HTTPS 461
3.2.3 Cambiar los puertos de escucha 463
3.2.4 Mecanismos de autenticación 465
3.3 Configuración del servicio WinRM en un entorno Active Directory por GPO 466
3.4 Configuración del servicio WinRM en un entorno Workgroup 469
3.4.1 Configuración de la lista de equipos de confianza (trusted hosts list) 469
3.4.2 Desactivación de la UAC 470
3.5 Problemática del "doble salto" (noción de rebote) 471
3.6 Gestión de las configuraciones de sesiones 472
3.6.1 Generalidades 472

www.ediciones-eni.com © Ediciones ENI 15/18


Windows PowerShell
Los fundamentos del lenguaje

3.6.2 Configuraciones de sesión por defecto 475


3.6.3 Modificación de permisos 477
3.6.4 Creación de una configuración de sesión personalizada 478
3.6.5 Creación de una configuración de sesión delegada (RunAs) 486
3.7 Creación de una sesión remota 488
3.8 Ejecución de comandos remotos 490
3.9 Sesiones WinRM en modo desconectado 492
3.10 Ejecución de scripts remotos 493
3.11 Apertura de una sesión remota interactiva PowerShell 498
3.11.1 Enter-PSSession 498
3.11.2 PowerShell ISE (Integrated Scripting Environment) 501
3.12 Importación de comandos remotos 501

Casos de estudio

1. Encontrar las cuentas de equipo caducadas dentro del AD DS 505


1.1 Problemática 505
1.2 Dificultades que superar 506
1.3 Solución 506

2. Enumerar las cuentas de usuario inactivas en el AD DS 508

2.1 Problemática 508


2.2 Solución: ¡hacer limpieza! 508

3. Cambiar la contraseña de Administrador local remotamente 512

3.1 Problemática 512


3.2 Dificultades que superar 513
3.3 Solución 1: DCOM/RPC 513
3.4 Solución 2: WSMan/WinRM 515

4. Vigilar el registro de un evento en el log 516

4.1 Problemática 516


4.2 Solución 516

www.ediciones-eni.com © Ediciones ENI 16/18


Windows PowerShell
Los fundamentos del lenguaje

5. Crear cuentas de usuarios por lote 520


5.1 Problemática 520
5.2 Solución 520

6. Verificar la versión software de una aplicación remota 523


6.1 Problemática 523
6.2 Solución 524

7. Actualizar la configuración de red de un conjunto de equipos 526

7.1 Problemática 526


7.2 Solución 527
7.3 Prueba de la solución 529

8. Encontrar los certificados caducados 533

8.1 Problemática 533


8.2 Solución 1: Tarea planificada local PowerShell 533
8.3 Solución 2: Consulta desde un punto central 537

9. Delegar la gestión de un servidor (solamente algunos comandos) 538

9.1 Problemática 538


9.2 Solución 538

Recursos adicionales

1. Recursos Web 545

1.1 Sitios Web en español 545


1.1.1 IT Pro.es: comunidad de profesionales de Infraestructura 545
1.1.2 Aprende Informática Conmigo 547
1.2 Sitios Web en inglés 548
1.2.1 Windows PowerShell Blog 548
1.2.2 PowerShell Magazine 549
1.2.3 PowerShell.org 550

www.ediciones-eni.com © Ediciones ENI 17/18


Windows PowerShell
Los fundamentos del lenguaje

1.2.4 PowerShell.com 551


1.2.5 Get-Scripting 552
1.2.6 CodePlex/GitHub 553

2. Herramientas de terceros 554


2.1 PowerGUI 554
2.2 PowerShell Plus 555
2.3 PowerShell Studio 2015 556
2.4 PowerGadget 557
2.5 ISE Steroids 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

Anda mungkin juga menyukai