1 antonio j. emperador sau [email protected] programador de sistemas noviembre 2011 módulo 4....

65
1 Antonio J. Emperador Sau [email protected] Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

Upload: odalis-lina

Post on 22-Jan-2016

248 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

1

Antonio J. Emperador [email protected]

Programador de Sistemas

Noviembre 2011

Módulo 4. Programación en PowerShell

Page 2: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

2

1. Generalidades

Page 3: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

3

Microsoft PowerShell: ¿Qué es?

Shell de línea de comandos y lenguaje de script Basado en .NET Framework Usado para la administración y automatización de tareas en Windows

¿Dónde? Sitio del producto: http://technet.microsoft.com/es-ES/scriptcenter/dd742419.aspx Sitio de descarga ver. 2: http://support.microsoft.com/kb/968929

Ayudas Ayuda de PowerShell:

En línea: get-help comando Desde el archivo de ayuda del ISE

Manuales, temas de ayuda, comandos, etc. en http://technet.microsoft.com/es-es/library/bb978525.aspx

Repositorios de scripts: http://gallery.technet.microsoft.com/scriptcenter/es-es Arranque

Desde Inicio – Programas – Accesorios Escribiendo en el interfaz de comandos powershell Si hay que ejecutar determinados scripts o preferencias, arrancar en modo administrador

Si hay problemas, modificar Executionpolicy (con Set-ExecutionPolicy -ExecutionPolicy Unrestricted)

1. Generalidades de PowerShell

Page 4: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

4

Microsoft PowerShell: ¿Cómo usarlo?

Como interfaz de comandos, al igual que cmd Incluye muchos comandos cmd conodidos (dir, copy, move, ipconfig…)

Como interfaz de programación Creando scripts (extensión .ps1) con cualquier editor y ejecutándolos Mediante el entorno de programación PowerShell ISE

Manejo del entorno Se escriben los comandos, pudiendo usar autocompletion con el [Tab] Mantiene un amplio historial de comandos:

Mediante el uso de flechas de cursor (arriba/abajo) Con [F7] Comando Get-History

Cmdlets Son los comandos ampliados de PowerShell Constan de verbo-nombre parámetros

Ejemplos: get-help dir, get-process w*

Canalizaciones Muy importantes: redirigen la salida a otro comando

Ejemplos: get-process |format-list, get-process |Out-GridView

1. Generalidades de PowerShell

Page 5: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

5

Lenguaje: Comentarios con # Si queremos un mismo comando en dos líneas, acabar la primera con ` (acento

grave francés) Varios comandos en una línea separados por ; (punto y coma) Para escribir una respuesta, basta con escribir el comando o variable Para pedir datos:

Mediante parámetros del script que hagamos (directiva param) Mediante ventana interactiva (cmdlet Read-host)

Variables: Empiezan por el símbolo $ y contienen letras, números o subrayado (_) Su declaración y tipo no es necesaria, pero pueden almacenar cualquier tipo de

información, incluidos objetos Constantes:

No hay una expresión fija, debe utilizarseSet-Variable –name nom_const –option readonly –value valor

Hay variables predefinidas ($true, $false, $home, $pshome, $host, $error…) Ver las variables: Get-Variable La última variable utilizada puede invocarse por $_

1. Generalidades de PowerShell

Page 6: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

6

Variables Tipos Tipo Descripción

[int] Entero 32 bit con signo

[long] Entero 64 bit con signo

[string] Cadena de tamaño fijo de caracteres Unicode

[char] Un carácter Unicode de 16 bits

[byte] Un carácter de 8 bits sin signo

[bool] Valor lógico (Booleano) True/False

[decimal] Valor decimal de 128 bits

[single] Número de coma flotante de 32 bits (precisión simple)

[double] Número de coma flotante de 64 bits (doble precisión)

[xml] Un objeto XML

[array] Una matriz de valores

[hashtable] Objeto hashtable

1. Generalidades de PowerShell

Page 7: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

7

Instrucciones: Operadores:

Aritméticos: +, -, *, /, % De asignación; =, +=, -=, *=, /=, %= De comparación: -eq, -ne, -gt, -lt, -le, -ge

También coincidencia (-match, -nomatch), sustitución (-replace) y de patrones (-like, -nolike) Lógicos: -and, -or, -xor, -not, ! De redirección: >, >> De división y combinación: -split, -join De tipo: -is, -isnot, -as… … Operador de comparación Significado Ejemplo (devuelve el valor True)

-eq Es igual a 1 -eq 1-ne Es distinto de 1 -ne 2-lt Es menor que 1 -lt 2-le Es menor o igual que 1 -le 2-gt Es mayor que 2 -gt 1-ge Es mayor o igual que 2 -ge 1-like Es como (comparación de caracteres

comodín para texto)"file.doc" -like "f*.do?"

-notlike No es como (comparación de caracteres comodín para texto)

"file.doc" -notlike "p*.doc"

-contains Contiene 1,2,3 -contains 1-notcontains No contiene 1,2,3 -notcontains 4

1. Generalidades de PowerShell

Page 8: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

8

Estructuras: Condicionales:

Condicional if: if… then… elseif… else… Ejemplo: $a = 1; if ($a –eq 1){“Es 1”}else{“No es 1”}

Múltiple switch Ejemplo: $b="c"; switch($b){"a"{"Es a"} "b"{"Es b"} "c"{"Es c"}}

Iteración: bucles Bucle while: while (<condición>){<lista de instrucciones>} Bucle do:

do {<lista de instrucciones>} while (<condición>) do {<lista de instrucciones>} until (<condición>}

Bucle for: for (<inicial>; <condición>; <repetir>) {<lista de instrucciones>}

Ejemplo: for ($i = 1; $i -le 10; $i++) {$i} Bucle foreach: foreach ($<elemento> in $<colección>){<lista de instrucciones>}

Ejemplo: $letras=“a”,”b”,”c”,”d”; foreach($letra in $letras){$letra}

1. Generalidades de PowerShell

Page 9: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

9

Práctica 1: 1.1. Calcular la media de 3 números a introducir (como parámetros o por

petición) 1.2. Intercambiar 2 variables 1.3. Sumar los 20 primeros números naturales 1.4. Leer dos números y escribir el mayor 1.5. Calcular el factorial de un número 1.6. Escribir la tabla de multiplicar de un número que se pida 1.7. Calcular los divisores de un número

Práctica 2: 2.1. Calcular las raíces de una ecuación de 2º grado 2.2. Calcular el área de un círculo 2.3. Indicar el número de horas y responder semanas, días y horas 2.4. Solicitar una letra e informar si es vocal 2.5. Decir si un número es o no primo

1. Generalidades de PowerShell

Page 10: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

10

2. Command Lets (cmdlets)

Page 11: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

11

Comandos de PowerShell = cmdlets Convención de nomenclatura:

verbo-sustantivo param1 arg1 param2 arg2 Verbo = acción Sustantivo = objeto sobre el que recae la acción Opcionalmente, se especifican parámetros con argumentos Ejemplos:

Get-Help Get-Help –detailed Get-Command Get-Command –Verb Get Get-Command –Noun Service Get-Service

Acciones: Get: obtener información o listado Set: escribir un valor Stop/Start/Suspend/Restart New, Resume…

2. cmdlets

Page 12: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

12

Parámetros comunes -WhatIf (qué pasaría si…) -Confirm (pregunta antes de ejecutar) -Detailed (más detalles) -Debug (información sobre depuración) -ErrorAction (realiza una acción cuando se producen errores) -ErrorVariable (usa una variable para mantener información de error =

$Error) -OutVariable (variable que almacena la información de salida -OutBuffer (mantener nº de objetos antes de llamar al cmdlet siguiente) Ejemplos:

Set-ExecutionPolicy Unrestricted –WhatIf Set-ExecutionPolicy Unrestricted –Confirm

2. cmdlets

Page 13: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

13

Get-Command Da información básica de los cmdlets y otros comandos u objetos Sintaxis:

Get-Command –param1 arg1… Parámetros:

-Verb: cmdlets con el verbo indicado -Noun: cmdlets con el sustantivo indicado

Get-ChildItem Muestra los elementos (principales y secundarios) de una o varias

ubicaciones Se utiliza para sistema de archivos (alias dir, registro, certificados, AD…) Sintaxis:

Get-ChildItem –param1 arg1… Parámetros:

-Path “string” (con comodines) -Include “string” / -Exclude “String” -Name (solo el nombre) -Recurse (recursivo)

Alias: gci, ls, dir

2. cmdlets

Page 14: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

14

Get-Member Da información acerca de los miembros de objetos Por ejemplo métodos y propiedades Ejemplo: Get-ChildItem |Get-Member Parámetro importante: -MemberType

Valores posibles: Aliasproperty, Codeproperty, Property, Noteproperty, Scriptproperty, Properties, PropertySet, Method, Codemethod, Scriptmethod, Methods, Parametrizedproperty, Memberset y All

Get-Executionpolicy Indica la directiva de seguridad de ejecución de PowerShell Puede tener los valores:

Restricted, allsigned, remotesigned o unrestricted

Set-ExecutionPolicy Cambia la directiva de ejecución El parámetro –executionpolicy define la directiva con su argumento

2. cmdlets

Page 15: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

15

Práctica 3: 3.1. Obtener un listado de los comandos cuyo verbo sea new 3.2. Obtener un listado de comandos de Process 3.3. Listado de comandos cuyo verbo sea Set y el nombre empiece por L 3.4. Mostrar los servicios, detener el servicio “Audio de Windows”

confirmando la acción, mostrar los servicios (tanto en PowerShell como en Services de Windows) y arrancar de nuevo el servicio en modo Debug

Práctica 4: 4.1. Listar el directorio c:\windows\system32\drivers\etc 4.2. Mostrar los archivos de c:\windows que empiecen por a 4.3. Listar los archivos de texto (.txt) que se encuentren en c:\windows y

sus subdirectorios 4.4. Crear un fichero “listado.txt” en el que se incluyan todos los ficheros

ejecutables (.exe) que haya en el disco duro y en otra unidad (CD, por ejemplo)

4.5. Mostrar los objetos del registro “hkcu:\HKEY_CURRENT_USER\Software\Macromedia"

2. cmdlets

Page 16: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

16

3. Formatear la salida

Page 17: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

17

Trabajar con tuberías (sin ser fontanero) Ejemplo: Get-Command -verb "Set"|Format-List

Dar formato a la salida: Format-Table (ft):

Presenta la salida en filas y columnas Opción por defecto si lo puede presentar Ejemplo: Get-ChildItem C:\Windows |Format-Table Parámetro –Autosize

Format-List (fl) Presentación en lista con más información y sin contar (si queremos todos agregamos * Por defecto los elementos : Name, CreationTime, LastWriteTime y LastAccessTime Personalizable mediante el parámetro –property para añadir otra información (por

ejemplo, FullName, CreationTime, LastWriteTime, …) Ejemplo: Get-ChildItem C:\Windows -Recurse | Format-List -Property

FullName,CreationTime,LastWriteTime Format-Wide (fw)

Lista comprimida a varias columnas Parámetros:

Autosize, Column, Groupby…

Format-Custom (personalizada)

3. Formatear la salida

Page 18: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

18

Filtrando y ordenando Group-Object

Permite formatear la salida agrupando por alguna propiedad Muestra el nombre, el número y el grupo Ejemplos:

Get-Process |Group-Object Company Get-EventLog System |Group-Object EventId

Sort-Object Ordena la salida por la columna o propiedad indicada Pueden indicarse varias separadas por comas Parámetros:

-property, -casesensitive, descending… Ejemplos

Get-Command |Sort-Object –descending Get-EventLog System | Group-Object eventid | Sort-Object Count –descending get-childitem | sort-object -property LastWriteTime > ordenado.txt

Where-Object Filtra la salida con los elementos que cumplen la condición Sintaxis: cmd-let | where-objetc {$_.propiedad –comparador “expresión*”} Ejemplos

get-command | where-object {$_.Name -like “get-*”} get-childitem | where-object {$_.Length -ge 10000}

3. Formatear la salida

Page 19: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

19

Salida ConvertTo-HTML

La salida se genera en HTML Se puede reenviar a un archivo, bien con el redireccionador > o con | out-file

“name.html” Puedes abrir el archivo con Invoke-Item “name.html” Ejemplos:

Get-Process | ConvertTo-html | out-file “Processes.html”

Export-CSV La salida del comando se exporta a un archivo de texto separado por comas (CSV) Ejemplos

Get-Process | Export-CSV Processes.csv

Out-GridView La salida se obtiene en un objeto gráfico de tipo “rejilla” (gridview) Ejemplos

get-Process | Out-GridView

Out-Printer La salida se envía a una impresora que debe especificarse como argumento Ejemplos

get-Process | Out-Printer “PDFCreator”

3. Formatear la salida

Page 20: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

20

Práctica 5: 5.1. Obtener un listado de los archivos de c:\archivos de programa que

empiecen por A en todos los subdirectorios y presentarlo en forma de tabla autoajustada

5.2. Obtener un listado de los archivos *.txt que haya en c:\windows en forma tabular autoajustada, incluyendo el nombre, tamaño, fecha de creación, extensión y su nombre completo

5.3. Presentar en forma de lista los archivos de c:\windows\system32 que sean ejecutables (exe, com, bat, …) mostrando el nombre, tamaño, extensión y si es de solo lectura

5.4. Mostrar en forma de lista los archivos de c:\archivos de programa y todos sus subdirectorios que tengan extensión .exe, .dll o .ini, agrupándolos por su extensión

5.5. Presentar en 4 columnas el nombre de los archivos de c:\Windows que empiecen por A o por E, incluyendo sus subdirectorios

3. Formatear la salida

Page 21: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

21

Práctica 6: 6.1. Mostrar el número de eventos de aplicación agrupados por el tipo de

entrada Pista: Get-EventLog

6.2. Listar en forma de tabla el número de archivos de cada tipo de extensión que hay en el directorio c:\windows\system32, ordenados por la extensión

6.3. Listar los archivos que hay en el directorio c:\windows\log y sus subdirectorios que tengan un tamaño mayor de 100 kB, en forma de lista con las propiedades nombre, tamaño, extensión y fecha de creación

6.4. Obtener un listado a 3 columnas de los archivos de c:\windows y sus subdirectorios que tengan tamaño mayor de 2 MB y la fecha de último acceso esté entre los últimos 7 días

6.5. Mostrar agrupados por la categoría del evento, los eventos de seguridad de nuestra máquina que han sucedido en los últimos 3 días, ordenados de mayor a menor por el número que se haya producido (prueba también a agrupar por el mensaje)

3. Formatear la salida

Page 22: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

22

Práctica 7: 7.1. Obtener un listado de los archivos de c:\windows\ con extensión .ini

o .log y generarlo en HTML para lanzarlo en un navegador 7.2. Sacar un listado en formato CSV de los procesos que se están

corriendo en la máquina ordenados de forma descendente por el uso de procesador. Abrirlo en Excel.

7.3. Sacar la lista de los servicios que estén detenidos ordenados por el site y mostrados en un objeto GridView

7.4. Imprimir en un PDF el listado en forma de tabla de los programas que aparecen en Agregar/Quitar programas de Windows, quitando las actualizaciones.

Pistas: esta opción está en la clave de registro HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\

Las actualizaciones tienen la clave comanzando por { 7.5. Listar las unidades de disco (reales) que tenga tu equipo y generar

con ellas una página web Pista (Get-PSDrive da las unidades)

3. Formatear la salida

Page 23: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

23

4. Proveedores PowerShell

Page 24: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

24

¿Qué es esto? Son programas que nos permiten trabajar con almacenes de datos como

si fueran unidades montadas. Sistema de archivos, registro, certificados…

¿Con qué?

4. Proveedores de PowerShell4

Cmdlet Alias Cmd Commands Descritption

Get-Location gl pwd Directorio actual

Set-Location sl cd, chdir Cambiar el directorio actual

Copy-Item cpi copy Copiar archivos

Remove-Item ri del Elimina un archivo o directorio

Move-Item mi moveMueve (o cambia el nombre) de un arch. o dir.

Rename-Item rni rn Cambia el nombre de un archivo

New-Item ni n/a Crea un nuevo archivo o una carpeta vacía

Clear-Item cli n/a Borra el contenido de un archivo

Set-Item si n/a Establece el contenido de un archivo

Mkdir n/a md Crea un nuevo directorio

Get-Content gc type Envía el contenido de un archivo a la salida

Set-Content sc n/a Establece el contenido de un archivo

Page 25: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

25

Get-PSProvider Obtiene una lista de los proveedores

Get-PSDrive: Unidades PSDrive Para unidades de disco Get-PSDrive

Muestra las unidades disponibles Ejemplo: Get-PSDrive –Provider FileSystem

Alias Lo podemos tratar como otro proveedor (ya lo veremos) Ejemplos:

Set-Localtion Alias: Get-ChildItem Get-ChildItem | Get-Member

Variables de entorno (Proveedor env) Accede a las variables de entorno del sistema (propiedades de Mi PC)

Ejemplo: Set-Location Env: ; Get-ChildItem Obtener una variable: Get-ChildItem OS Crear una variable: New-Item -Path . –Name Variable1 – Value “Texto de la

variable”

4. Proveedores de PowerShell

Page 26: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

26

Proveedor Sistema de Archivos De forma predeterminada Permite trabajar con el sistema de archivos (crear, modificar, eliminar

archivos y carpetas) Get-ChildItem, 1ª columna:

d = directorio a = archivo r = sólo lectura h = oculto s = de sistema

Get-ChildItem –force: muestra los ocultos también Creando:

Directorios: New-Item –Path C:\Nuevo – Type Directory Archivo: New-Item –Path C:\Nuevo\Archivo.txt –Type File Si no indicas el tipo te lo pregunta

Moviendo: Move-Item –Path C:\Nuevo\Archivo.txt C:\ Move-Item –Path C:\Nuevo C:\NuevoDir

4. Proveedores de PowerShell

Page 27: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

27

Proveedor Sistema de Archivos Renombrando (también con Move)

Rename-Item –Path C:\Archivo.txt C:\NuevoFile.txt Rename-Item –Path C:\NuevoDir C:\Direc

Borrando archivos y directorios Remove-Item –Path C:\NuevoFile.txt –Confirm Remove-Item –Path C:\Direc

Contenido de un archivo Obtener el contenido: Get-content C:\Windows\System32\drivers\etc\services Obtener el contenido línea a línea: Get-content C:\Windows\System32\drivers\etc\

services |ForEach-Object {write-host $i "" $_; $i++} Escribir en un archivo: Set-Content –Path C:\Archivo.txt –Value “Hola, caracola” Añadir a un archivo: Add-Content –Path C:\Archivo.txt –Value “Adios”

4. Proveedores de PowerShell

Page 28: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

28

Proveedor Funciones Accede a las funciones de PowerShell

Set-Location Function: Get-ChildItem

Viendo el código de una función Get-Content Path

El proveedor de Registro de Windows Podemos conectar con dos ramas:

HKCU: HKEY_CURRENT_USER HKLM: HKEY_LOCAL_MACHINE

Para: navegar, buscar, crear claves, eliminar claves, añadir valores, modificar valores y administrar ACL (Access Control Lists)

Navegar Set-Location HKLM: Get-ChildItem Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion

Obtener entradas Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion

4. Proveedores de PowerShell

Page 29: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

29

El proveedor de Registro de Windows Podemos conectar con dos ramas:

HKCU: HKEY_CURRENT_USER HKLM: HKEY_LOCAL_MACHINE

Para: navegar, buscar, crear claves, eliminar claves, añadir valores, modificar valores y administrar ACL (Access Control Lists)

Navegar Set-Location HKLM: Get-ChildItem Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion

Obtener entradas Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion

Crear una entrada: New-Item –path HKLM:\SOFTWARE\Test –Value “Hola caracola” Verificar su existencia: Get-ChildItem HKLM:\SOFTWARE\T* Verla: Get-ItemProperty –Path HKLM:\SOFTWARE\Test

Borrar una entrada: Remove-Item HKLM:\SOFTWARE\Test

4. Proveedores de PowerShell

Page 30: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

30

Proveedor Variables Conectar:

Set-Location Variable: Get-ChildItem

Listar información de una variable: Poner su nombre: $PSHome

Crear una variable definida por el usuario New-Item Variable –Value “Valor” Equivalente a Set-Variable Variable2 –value “Valor 2” O $Variable3 = “Valor 3”

Borrar variables Remove-Item Variable,Variable2,Variable3

Proveedor Certificados Accede al almacén de certificados

Set-Location Cert: Get-ChildItem Get-ChildItem –Recurse |Export-CSV “C:\Certificados.csv” ; Invoke-Item “C:\

Certificados.csv”

4. Proveedores de PowerShell

Page 31: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

31

Práctica 8: 8.1. Mostrar todos los proveedores y todas las unidades accesibles 8.2. Mostrar todos los alias que trabajen con Object e Item, ordenados

por su nombre 8.3. Indicar el nombre de la máquina, el sistema operativo, el

identificador de procesador, número de procesadores y nombre de usuario

8.4. Crear una variable de entorno llamada HoraAct que contenga la hora de ese momento. Mostrarla, borrarla y volver a mostrar todas las variables de entorno.

Práctica 9: 9.1. Bajo C:\ crear la estructura

de directorios siguiente:

C:\

PRACTICAS

ENERO

SISTEMAS

DESARROLLO

TEMA1

TEMA2

FEBRERO

PROGRAMACION

PRACTICA1 PRACTICA2

SISTEMAS

TEMA8

TEMA9 TEMA10

4. Proveedores de PowerShell

Page 32: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

32

Práctica 10: 10.1. Crear un archivo de texto llamado Ejemplo1.txt en el directorio

PRACTICA1 10.2. Renombrar el archivo creado a Ej_1_1.txt y moverlo al directorio

FEBRERO 10.3. Crear otro archivo de texto llamado Ej_2_1.txt que tenga el texto

“Hola, caracola” en el directorio TEMA9 10.4. Mover el directorio PROGRAMACION de FEBRERO a ENERO,

incluyendo sus subdirectorios, claro 10.5. Copiar el archivo Ej_2_1.txt al directorio SISTEMAS de ENERO, con

el nombre Ej_3.1.txt 10.6. Añadir el texto “Adios, caraculo” al Ej_3.1.txt 10.7. Borrar el archivo Ej_2.1.txt confirmando el borrado 10.8. Renombrar los directorios PRACTICA1 y PRACTICA2 por LABORES1 y

LABORES2 10.9. Borrar el directorio SISTEMAS con todos los subdirectorios y

archivos que contenga

4. Proveedores de PowerShell

Page 33: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

33

Práctica 11: 11.1. Indicar cuantos servicios aparecen listados en el fichero C:\

Windows\System32\drivers\etc\services 11.2. Contar la cantidad de servicios TCP y UDP hay en el fichero

indicado anteriormente 11.3. Trabajo con un fichero de log:

11.3.1. Descargar el fichero access_log de http://cursos.integra-gestion.com/PdeS/access_log.gz

11.3.2. Indicar los días que comprende el fichero, mostrando el primer y último acceso

11.3.3. Decir cuántas petición GET hay y cuántas POST 11.3.4. Indicar cuántas visitas hay por sistema operativo (Windows, Linux u

otros) 11.3.5. Mostrar cuáles son las 10 páginas más visitadas 11.3.6. Indicar el número de entradas según el código de respuesta del

servidor 11.3.7. Calcular la suma de bytes transferidos por día 11.3.8. Con todos los puntos anteriores, hacer un informe en HTML que se

mostrará en el navegador.

4. Proveedores de PowerShell

Page 34: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

34

Práctica 12: 12.1. Indicar las ramas que tiene el registro en HKEY_CURRENT_USER\

Software\Microsoft\Windows\CurrentVersion 12.2. Mostrar los programas que se inician cuando arranca tu ordenador

(valores de la rama HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run)

12.3. Crear una entrada en el registro llamada Clave en la rama HKLM:\SOFTWARE\Microsoft con el valor “Hola, caracola”

12.4. Mostrar las variables actualmente en uso, crear una nueva MiVariable con el valor 4 y después borrarla. Comprobar que ya no aparece.

12.5. Mostrar un listado en página web de todos los objetos que se encuentren en el almacén de certificados.

4. Proveedores de PowerShell

Page 35: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

35

5. El objeto WMI

Page 36: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

36

WMI = Windows Management Instrumentation (Instrumental de administración de Windows Tecnología de administración en Windows Base de datos de información del sistema Espacio de nombres para scripting, por defecto, root/cimv2 Para ver las clases, propiedades y métodos: WMI Administrative Tool (

http://www.microsoft.com/downloads/details.aspx?FamilyID=6430f853-1120-48db-8cc5-f2abdc3ed314&DisplayLang=en)

5. WMI

Page 37: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

37

Buscar Clases, Propiedades y Métodos Get-WmiObject –List –Namespace “root\cimv2” También para máquina remota

Get-WmiObject –List –Namespace “root\cimv2” –ComputerName WIN2008

Mostrar propiedades y métodos de una clase Get-WmiObject -Class “Win32_Processor” -Namespace “root\CIMV2″

| Get-Member Ejemplo de uso (Práctica 13)

Me piden los datos de fabricante, modelo y número de serie de una máquina, la información de la BIOS, el tipo de Sistema Operativo, la información de la CPU (fabricante, tipo, velocidad,…), cantidad de memoria, información de disco, red…

Sintaxis: Get-WmiObject -Class [classname] -NameSpace [namespace] -ComputerName [ComputerName]

Clases: Win32_ComputerSystem, Win32_BIOS, Win32_OperatingSystem, Win32_Processor, Win32_DiskDrive,

Win32_NetworkAdapterConfiguration Ver Ej_13.ps1

5. WMI

Page 38: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

38

Trabajar con métodos Realizan acciones Práctica 14.1

Modificar el adaptador de red para que obtenga la dirección IP automáticamente por DHCP Métodos de la clase Win32_NetworkAdapterConfiguration:

DisableIPSec, EnableDHCP, EnableIPSec , EnableStatic, ReleaseDHCPLease, RenewDHCPLease, SetDNSDomain, SetDNSServerSearchOrder, SetDynamicDNSRegistration, SetGateways, SetIPConnectionMetric, SetIPXFrameTypeNetworkPairs, SetTcpipNetbios, SetWINSServer, ConvertFromDateTime, ConvertToDateTime, Delete, GetType, Put

Ver Ej_14.1.ps1 Práctica 14.2

Modificar el adaptador de red para incluirle todos los datos IP (dirección, máscara, gateway, DNS, …)

Recordar ver métodos y propiedades: Get-WmiObject Win32_NetworkAdapterConfiguration|Get-Member

Realizar informes con los datos Recordar el reenvío a archivos (Práctica 15.1)

Realizar un informe completo de los adaptadores de red y crear con él un fichero de texto Informes a Excel (Práctica 15.2)

Realizar un informe de los discos en celdas de una hoja de cálculo

5. WMI

Page 39: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

39

6. Trabajar con Cuentas Locales

Page 40: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

40

Objeto Active Directory: La forma de acceso más sencilla es con el ADSI (Active Directory

Service Interfaces) Conectamos con ADSI a través de proveedores:

WinNT (locales) LDAP (Servidores, Exchange o AD)

6. Trabajar con Cuentas Locales

Page 41: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

41

Cuentas locales: Conectaremos con el proveedor WinNT: Datos de conexión: $conexion = [ADSI]”WinNT://MAQUINA”

Trabajo con grupos locales Listar los grupos locales

$conexion = [ADSI]”WinNT://.”$conexion.PSBase.Children | Where {$_.PSBase.SchemaClassName –eq ‘group’} | foreach{$_.Name}

Listar miembros de un grupo $conexion = [ADSI]”WinNT://./Administradores,group”

$conexion.PSBase.Invoke(‘Members’) | foreach{$_.GetType().InvokeMember(‘Name’,’GetProperty’,$null,$_,$null)} (o ‘AdsPath’)

Añadir un miembro a un grupo $conexion = [ADSI]”WinNT://./Administradores,group”

$conexion.Add(“WinNT://UsuarioX”)

Eliminar un miembro de un grupo $conexion = [ADSI]”WinNT://./Administradores,group”

$conexion.Remove(“WinNT://UsuarioX”)

6. Trabajar con Cuentas Locales

Page 42: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

42

Trabajo con grupos locales (continuación) Crear un grupo local

$conexion = [ADSI]”WinNT://.”$objGrupo = $conexion.Create(‘group’, ‘Nombre_Grupo’)$objGrupo.Put(‘Description’, “Descripción que quieras”)$objGrupo.SetInfo()

Eliminar un grupo $conexion = [ADSI]”WinNT://.”

$conexion.Delete(‘group’, ‘Nombre_Grupo’)

Modificar un grupo: Renombrar: $conexion = [ADSI]”WinNT://./GrupoViejo,group”

$conexion.psbase.Rename(GrupoNuevo)$conexion.SetInfo()

Otras propiedades: $conexion = [ADSI]”WinNT://./NombreGrupo,group”

$conexion.Put(‘Description’,’Texto de la descripción’)$conexion.SetInfo()

6. Trabajar con Cuentas Locales

Page 43: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

43

Trabajo con usuarios locales Listado de usuarios

$conexion = [ADSI]”WinNT://.”$conexion.PSBase.Children | Where ($_.PsBase.SchemaClassName –eq ‘user’} | ForEach{$_.Name}

Crear un usario local $conexion = [ADSI]”WinNT://.”

$objUser = $conexion.Create(‘user’, ‘Nombre_Usuario’)$objUser.SetPassword(‘contraseña’)$objUser.PSBase.InvokeSet(‘Description’, ‘Descripción a rellenar’)$objUser.SetInfo()

Modificar un usuario local Algunas propiedades: $conexion = [ADSI]”WinNT://./Usuario,user”

$conexion.PSBase.InvokeSet(‘Propiedad’,’Valor’)$conexion.SetInfo()

Propiedades: Description, FullName, UserFlags, HomeDirectory, HomeDirDrive, Profile, LoginScript, PasswordAge, PasswordExpired, …

Hay más propiedades, podemos intentar ver sus nombres con: $conexion = [ADSI]”WinNT://./Usuario,user”

Sconexion.PSAdapted

6. Trabajar con Cuentas Locales

Page 44: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

44

Trabajo con usuarios locales (continuación) Activar/Desactivar una cuenta

$user = [ADSI]”WinNT://./NombreUsuario,user”$user.PSBase.InvokeSet(‘AccountDisabled’, $True)$user.PSBase.CommitChanges()

Eliminar un usario local $conexion = [ADSI]”WinNT://.”

$conexion.Delete(‘user’,‘NombreUsuario’)

6. Trabajar con Cuentas Locales

Page 45: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

45

Práctica 16. Grupos locales 16.1. Listar todos los grupos locales 16.2. Mostrar los miembros del grupo “Administradores” local 16.3. Crear el grupo local “Contabilidad” 16.4. Modificar la descripción del grupo “Contabilidad” poniendo “Grupo

de usuarios del programa de Contabilidad” 16.5. Renombrar el grupo “Contabilidad” por “Finanzas”

Práctica 17. Cuentas locales 17.1. Mostrar todos los usuarios locales 17.2. Crear el usuario local “aperez”, con nombre completo “Antonio

Pérez” y contraseña “Pa$$w0rd” 17.3. Añadir el usuario “aperez” al grupo “Finanzas” 17.4. Mostrar todas las propiedades del usuario “aperez” 17.5. Cambiar el directorio de usuario a “C:\Users\aperez” e indicar que su

script de inicio de sesión es “C:\Users\scripts\aperez.cmd” 17.6. Añadir a “aperez” al grupo “Administradores” y quitarlo de

“Finanzas”

6. Trabajar con Cuentas Locales

Page 46: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

46

Práctica 18. Usuarios y grupos locales 18.1. Crear los grupos, con su descripción, que se presentan en el fichero

http://cursos.integra-gestion.com/AdeR/material/Grupos_KKFU_SA.txt 18.2. Crear los usuarios locales indicados en el fichero

http://cursos.integra-gestion.com/AdeR/material/Usuarios_KKFU_SA.txt, teniendo en cuenta que el fichero presenta la separación de campos por el carácter | y que los campos están delimitados por “

18.3. Asignar a cada usuario un script de inicio de sesión con el nombre “usuario.cmd” en el directorio C:\Users\scripts

18.4. Asignar a cada usuario los grupos a los que pertenece (fichero http://cursos.integra-gestion.com/AdeR/material/Asig_KKFU_SA.txt, delimitado por ;)

18.5. Crear los scripts de inicio de sesión de cada uno, teniendo en cuenta que tendrán que conectarse a un recurso compartido denominado con el nombre del grupo al que pertenecen

6. Trabajar con Cuentas Locales

Page 47: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

47

Práctica 18. Usuarios y grupos locales (continuación) 18.6. Desactivar las cuentas de los usuarios que pertenecen al grupo

“Logística” 18.7. Eliminar las cuentas de los usuarios del grupo “Servicios” 18.8. Desasignar los usuarios del grupo “Ingeniería” y luego renombrar el

grupo por “Ingeniería e Imasdé” 18.9. Cambiar el nombre de inicio de sesión de los siguientes usuarios:

Cristóbal Carbajal (ccarbajal) cristobal Manuel Rodríguez (mrodriguez) manolo Remedios Iglesias (riglesias) queremedio

18.10. Realizar los siguientes listados: Usuarios de los grupos Administración y Contabilidad Grupos a los que pertenece Berta Asensio Todos los usuarios en un fichero de texto separado por ; Todos los grupos en un fichero de texto separado por tabulador Cada usuario con sus grupos en un fichero de texto separado por | y delimitado por “

18.11. Eliminar a los usuarios cuyo nombre empieza por “M” 18.12. Eliminar el grupo “Servicios”

6. Trabajar con Cuentas Locales

Page 48: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

48

7. Trabajar con Active Directory

Page 49: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

49

Cuentas en Active Directory Domain Services (AD DS) Acceso al servicio y a sus objetos

Usaremos LDAP: en vez de WinNT: Podemos acceder a UO, grupos y usuarios Debemos conocer el DN (Distinguished Name) de los objetos

Tipos de acceso: Local: $conexion = [ADSI]”LDAP://dominio_IP/…” Remoto:

$conexion = New-Object System.DirectoryServices.DirectoryEntry(‘LDAP://dominio_IP/…’,’usuario’,’contraseña’)

Espacio de nombres de AD Nombres en la estructura jerárquica LDAP

Nombre completo (DN): CN= Pepe Pérez,OU=Dirección,DC:nombredominio,DC=com Nombre relativo (RDN): Pepe Pérez Nombre común (CN): Pepe Pérez Nombre en versión canónica (DC): DC=com/DC=nombredominio/OU=Dirección/CN=Pepe

Pérez Nombre en versión canónica 2: nombredominio.com/Dirección/Pepe Pérez Nombre de usuario principal (UPN): [email protected] Nombre de bajo nivel (Cuenta SAM): Nombredominio\pperez o pperez

7. Trabajar con Active Directory

Page 50: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

50

Cuentas en Active Directory Domain Services (AD DS) Acceso a usuarios:

$objUser = [ADSI]”LDAP://CN=Usuario,CN=Users,DC=dominio,DC=com” $objUser = [ADSI]”LDAP://CN=User,OU=Bilbao,OU=Admon,DC=dominio,DC=com” $objUser = New-Object System.DirectoryServices.DirectoryEntry

('LDAP://IP_Dom/CN=Usuario,CN=Users,DC=ps,DC=dom','Administrador','Pa$$w0rd') Acceso al raíz del dominio:

$objDom = [ADSI]”LDAP://DC=dominio,DC=com” Si es local: $objDom = [ADSI]”” $objDom = New-Object System.DirectoryServices.DirectoryEntry

('LDAP://IP_Dom','Administrador','Pa$$w0rd') Acceso al catálogo global:

$objCat = [ADSI]”GC://DC=dominio,DC=com” $objCat = New-Object System.DirectoryServices.DirectoryEntry

(GC://IP_Dom','Administrador','Pa$$w0rd')

7. Trabajar con Active Directory

Page 51: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

51

Cuentas en Active Directory Domain Services (AD DS) El acceso se efectúa fundamentalmente buscando objetos con la

clase .NET ‘DirectorySearcher’ $objDom = [ADSI]”LDAP://dom_IP”

$objBusqueda = New-Object System.DirectoryServices.DirectorySearcher($objDom) DirectorySearcher:

Propiedades: CacheResults, ServerTimeLimit, Filter, SearchScope, PageSize, PropertiesToLoad Métodos: FindOne, FindAll Ejemplo: Mostrar todos los objetos del Directorio:

$objDom = [ADSI]”LDAP://dom_IP”$objBusqueda = New-Object System.DirectoryServices.DirectorySearcher($objDom)$objBusqueda.FindAll()

Lista de Unidades Organizativas: $objDom = [ADSI]”LDAP://dom_IP”

$objBusqueda = New-Object System.DirectoryServices.DirectorySearcher($objDom)$objBusqueda.Filter=‘(objectCategory=OrganizationalUnit)’$objBusqueda.FindAll() |Format-List

¿Sintaxis de los filtros? http://msdn.microsoft.com/en-us/library/aa746475.aspx

7. Trabajar con Active Directory

Page 52: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

52

Cuentas en Active Directory Domain Services (AD DS) Lista de Usuarios:

$objDom = [ADSI]”LDAP://dom_IP”$objBusqueda = New-Object System.DirectoryServices.DirectorySearcher($objDom)$objBusqueda.Filter=‘(&(objectCategory=Person)(objectClass=user))’$objBusqueda.FindAll() |Format-List

Lista de Grupos: $objDom = [ADSI]”LDAP://dom_IP”

$objBusqueda = New-Object System.DirectoryServices.DirectorySearcher($objDom)$objBusqueda.Filter=‘(objectCategory=group)’$objBusqueda.FindAll() |Format-List

Tipos de grupo: 2 Grupo Global 4 Grupo Local 8 Grupo Universal 2147483648 Grupo de Seguridad

$objBusqueda.Filter=‘(&(objectCategory=group)(GroupType=2147483650))’

7. Trabajar con Active Directory

Page 53: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

53

Cuentas en Active Directory Domain Services (AD DS) Administración de Unidades Organizativas (OU) Crear Unidades Organizativas

$objDom = [ADSI]”LDAP://dom_IP”$objOU = $objDom.Create(‘organizationalUnit’,’OU=Aragón’)$objOU.Put(‘description’,’Comunidad Aragonesa’)$objOU.SetInfo()

Renombrar Unidades Organizativas: $objDom = [ADSI]”LDAP://dom_IP”

$objDom.MoveHere(‘LDAP://OU=Aragón,DC=ps,DC=dom’,’OU=Comunidad Aragón’) Mover un grupo a una Unidad Organizativa

$objOU = [ADSI]”LDAP://dom_IP/OU=Comunidad Aragón,DC=ps,DC=dom” $objOU.MoveHere('LDAP://CN=Grupo,OU=Zaragoza,DC=ps,DC=dom','CN=Gropusculo')

Mover un usuario a una Unidad Organizativa $objOU = [ADSI]”LDAP://dom_IP/OU=Comunidad Aragón,DC=ps,DC=dom”

$objOU.MoveHere('LDAP://CN=Usuario,OU=Zaragoza,DC=ps,DC=dom','CN=User') Mover una Unidad Organizativa a otra

$objOU = [ADSI]”LDAP://dom_IP/OU=Comunidad Aragón,DC=ps,DC=dom” $objOU.MoveHere('LDAP://OU=Zaragoza,DC=ps,DC=dom',‘OU=Zaragoza')

Eliminar una Unidad Organizativa $objOU = [ADSI]”LDAP://dom_IP” $objOU.Delete(‘organizationalUnit’,'LDAP://OU=Comunidad Aragón,DC=ps,DC=dom')

7. Trabajar con Active Directory

Page 54: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

54

Cuentas en Active Directory Domain Services (AD DS) Administración de Grupos Sobre grupos:

Clasificación en cuanto a finalidad: Grupos de distribución: sólo para listas de correo Grupos de seguridad: además de distribución, permisos de acceso y derechos

Clasificación en cuanto a ámbito de visibilidad (en W2003 o posterior): Grupos locales: se refiere a locales de una máquina y no pueden pasar de ahí Grupos locales de dominio: visibles en su propio dominio; pueden tener como miembros a usuarios y

equipos, y grupos globales y universales u otros grupos locales de dominio. No pueden tener de otros dominios. Se ven en todos los equipos del dominio (no en W2000 o anterior)

Grupos globales: miembros de su propio dominio (usuarios, equipos y grupos globales); pueden pertenecer a grupos locales (de equipo y de dominio) y se les puede asignar derechos y permisos en recursos de otros dominios.

Grupos universales: miembros de cualquier dominio del bosque (usuarios, equipos, grupos universales y globales). Se puede dar permisos y derechos en recursos de cualquier dominio. Pueden pertenecer a grupos locales o universales de cualquier dominio del bosque.

Uso: Hacer pertenecer a usuarios y equipos a grupos globales Incluir los grupos globales en locales Asignar permisos a los grupos locales

7. Trabajar con Active Directory

Page 55: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

55

Cuentas en Active Directory Domain Services (AD DS) Administración de Grupos Crear un Grupo Global

$objOU = [ADSI]”LDAP://dom_IP/OU=Comunidad Aragón,DC=ps,DC=dom”$objGrupo = $objOU.Create(‘group’,’CN=Teruel’)$objGrupo.Put(‘SAMaccountname’,’Teruel’)$objGrupo.Put(‘description’,’Provincia de Teruel’)$objGrupo.SetInfo()

Crear un Grupo Local de dominio $objOU = [ADSI]”LDAP://dom_IP/OU=Comunidad Aragón,DC=ps,DC=dom”

$objGrupo = $objOU.Create(‘group’,’CN=Huesca’)$objGrupo.Put(‘SAMaccountname’,’Huesca’)$objGrupo.Put(‘groupType’,’2147483652’)$objGrupo.Put(‘description’,’Provincia de Huesca’)$objGrupo.SetInfo()

Crear un Grupo Universal Igual con groupType 2147483656

7. Trabajar con Active Directory

Page 56: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

56

Cuentas en Active Directory Domain Services (AD DS) Administración de Grupos Añadir un miembro a un grupo

$objGrupo = [ADSI]”LDAP://CN=Zaragoza,OU=Comunidad Aragón,DC=ps,DC=dom”$objGrupo.Add(‘LDAP://CN=Manolito,CN=Users,DC=ps,DC=dom’)$objGrupo.SetInfo()

Añadir varios miembros a un grupo $objGrupo = [ADSI]”LDAP://CN=Zaragoza,OU=Comunidad Aragón,DC=ps,DC=dom”

$objGrupo.Add(‘LDAP://CN=Manolito,CN=Users,DC=ps,DC=dom’)$objGrupo.Add(‘LDAP://CN=Mafalda,CN=Users,DC=ps,DC=dom’)$objGrupo.SetInfo()

Renombrar un grupo $objGrupo = [ADSI]”LDAP://OU=Comunidad Aragón,DC=ps,DC=dom”

$objGrupo.MoveHere(‘LDAP://CN=Teruel,OU=Comunidad Aragón,DC=ps,DC=dom’,’CN=Teruel’) Eliminar un grupo

$objGrupo = [ADSI]”LDAP://OU=Comunidad Aragón,DC=ps,DC=dom”$objGrupo.Delete(‘group’,’CN=Teruel’)

7. Trabajar con Active Directory

Page 57: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

57

Cuentas en Active Directory Domain Services (AD DS) Administración de Usuarios

Algunas propiedades importantes (General)

7. Trabajar con Active Directory

Page 58: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

58

Cuentas en Active Directory Domain Services (AD DS) Administración de Usuarios

Algunas propiedades importantes (Cuenta)

7. Trabajar con Active Directory

Page 59: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

59

Cuentas en Active Directory Domain Services (AD DS) Administración de Usuarios

Algunas propiedades importantes (Perfil)

7. Trabajar con Active Directory

Page 60: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

60

Cuentas en Active Directory Domain Services (AD DS) Administración de Usuarios Crear un usuario

$objOU = [ADSI]”LDAP://OU=Comunidad Aragón,DC=ps,DC=dom”$objUser=$objOU.Create(‘user’,’CN=Pepe Pérez’)$objUser.Put(‘SAMAccountName’,’Pperez’)$objUser.Put(‘UserPrincipalName’,’[email protected]’)$objUser.SetInfo()

Asignar una contraseña $objUser = [ADSI]”LDAP://CN=Pepe Pérez,OU=Comunidad Aragón,DC=ps,DC=dom”

$objUser.SetPassword(‘Pa$$w0rd’)$objUser.SetInfo()

Activación de una cuenta $objUser = [ADSI]”LDAP://CN=Pepe Pérez,OU=Comunidad Aragón,DC=ps,DC=dom”

$objUser.PSBase.InvokeSet(‘AccountDisabled’,$False)$objUser.SetInfo

Lectura y cambio de atributos de cuenta $objUser = [ADSI]”LDAP://CN=Pepe Pérez,OU=Comunidad Aragón,DC=ps,DC=dom”

$objUser.Put(‘Description’,’José María Pérez Pérez’)$objUser.SetInfo

$objUser.Get(‘Description’)$objUser.Description

7. Trabajar con Active Directory

Page 61: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

61

Cuentas en Active Directory Domain Services (AD DS) Administración de Usuarios Eliminar atributos o escribir atributos multivalor

Se hace con PutEx, con los siguientes argumentos: 1º) Acción: 1=eliminar, 2=reemplaza el o los valores especificados, 3=añadir, 4=borra el valor especificado 2º) Nombre del atributo 3º) Valor o valores a definir

$objUser = [ADSI]”LDAP://CN=Pepe Pérez,OU=Comunidad Aragón,DC=ps,DC=dom”$objUser.PutEx(1,’Description’,$null)$objUser.SetInfo()

$objUser = [ADSI]”LDAP://CN=Pepe Pérez,OU=Comunidad Aragón,DC=ps,DC=dom”$objUser.PutEx(2,’otherTelephone’, @(‘976111111’,’976222222’,’666111111’))$objUser.SetInfo()

Eliminar un usuario $objOU = [ADSI]”LDAP://OU=Comunidad Aragón,DC=ps,DC=dom”

$objOU.Delete(‘user’,’CN=Pepe Pérez’) $usuario = “Pepe Pérez”

$objDom = [ADSI]”LDAP://dom_IP”$objBus = New-Object System.DirectoryServices.DirectorySearcher($objDom)$objBus.Filter = ”(&(objectCategory=user)(cn=$usuario))”$resultado = $objBus.FindOne()$OU = $($($resultado.path) – replace ‘CN=$usuario,’,’’)$objOU = [ADSI]”LDAP://$OU”$objOU.Delete(‘user’,’CN=$usuario’)

7. Trabajar con Active Directory

Page 62: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

62

Partimos de trabajar contra un equipo Windows Server 2008 con Directorio Activo ubicado en determinada dirección IP y la administración con PS la haremos de forma remota

Práctica 19. Enumeración 19.1. Conectar con el AD del servidor 19.2. Mostrar las distintas Unidades Organizativas 19.3. Listar los grupos de seguridad existentes 19.4. Listar los grupos globales existentes 19.5. Mostrar todos los usuarios

Práctica 20. Trabajo con Unidades Organizativas Crear las Unidades Organizativas incluidas en el fichero Ej_20_OU.txt.

Dicho fichero tiene dos posibles valores por fila, separados por punto y coma (;): el primero presenta el nombre de la OU a crear y el segundo, si existe, la OU en la que debe incluirse (si no está es que cuelga del dominio principal raíz)

7. Trabajar con Active Directory

Page 63: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

63

Práctica 21. Trabajo con Grupos Crear los Grupos de Seguridad Globales enumerados en el fichero

Ej_21_Grupos.txt, que dispone de tres datos en cada fila: nombre del grupo, descripción y OU a la que pertenece. Estos datos están separados por pipeline (|)

Práctica 22. Usuarios de AD Crear los Usuarios enumerados en el fichero Ej_22_Usuarios.txt. El fichero

contiene un usuario por fila y en cada una de ellas los siguientes datos separados por tabulador:

Nombre completo Nombre Apellidos Nombre de usuario Contraseña OU a la que pertenece

7. Trabajar con Active Directory

Page 64: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

64

Práctica 23. Asignación de usuarios a grupos Asignar los grupos a los usuarios indicados en el fichero Ej_23_Asig.txt. El

fichero está compuesto por filas en las que aparece cada usuario con los grupos a los que pertenece (separados por * y entrecomillados).

Práctica 24. Trabajo combinado con OU, usuarios y grupos 24.1. Renombrar la OU “Alicante” como “Zuera” y moverla a la OU

“Zaragoza” 24.2. Mover el grupo “Ingeniería” del “País Vasco” a “Navarra” 24.3. Mover los usuarios de la OU “Calanda” a la de “Teruel” 24.4. Eliminar la OU “Calanda” 24.5. Renombrar el grupo “Ingeniería” por “Ingeniería e ImasDmasi” y

mover el grupo a la OU “Huesca” Práctica 25. Propiedades de los usuarios

25.1. Indicar como correo electrónico de cada usuario, su nombre de usuario y la OU seguida de kkfu.com (es decir, del tipo [email protected])

25.2. Asignar una contraseña aleatoria de 10 caracteres a los de la OU “Navarra”

25.3. Poner como teléfonos de “Administración”, 976222222, 976333333 y 976444444

7. Trabajar con Active Directory

Page 65: 1 Antonio J. Emperador Sau aemperador@efor.es Programador de Sistemas Noviembre 2011 Módulo 4. Programación en PowerShell

65

Práctica 26. Trabajo con usuarios 26.1. Poner en la descripción de los usuarios del Grupo de Contabilidad

una indicación que señale esa pertenencia y la página web http://conta.kkfu.com

26.2. Desactivar las cuentas de los usuarios de la OU “Huesca” y las que cuelgan de ella

26.3. Indicar como script de inicio de sesión de los usuarios de la OU “Aragón” (y sus dependientes) un archivo con su nombre de inicio de sesión acabado en .cmd (del tipo usuario.cmd)

26.4. Crear un grupo llamado “Comercial” que estará en la OU “Zaragoza” y cuyos miembros sean los de “Utebo”

26.5. Eliminar el grupo “Producción” y los usuarios que pertenezcan a él

7. Trabajar con Active Directory