Administración de Sistemas Windows 2003 Server Windows Script Administración de Sistemas Windows 2003 Server Santiago González Tortosa
¿Por qué Windows Script? Automatizar backups o RI del sistema. Apagar o Reiniciar Windows o cualquier tarea con un click de ratón Relacionar documentos, aplicaciones y automatizar operaciones. Controlar y automatizar tareas administrativas Generar conexiones de red de forma automática …
Contenidos Conceptos Introducción a VBScript Windows Script Host Conclusiones Ejercicio Práctico común con Directivas de grupo
Windows Script Conceptos
Conceptos Básicos Computador Von Neuman Almacenamiento (Mem. Secund) Memoria Principal UC ALU entrada Unidad de Control de Procesos (CPU) salida
Lenguaje de Programación Técnica estándar de comunicación que permite expresar las instrucciones que han de ser ejecutadas en un computador. Conjunto de reglas sintácticas y semánticas que definen un programa informático. Permite a un programador especificar: datos a operar, Almacenamiento y transmisión Acciones a realizar según circunstancias
Clasificación de Lenguajes Lenguajes Compilados Pascal, Ada, COBOL, Fortran, C/C++, C#, … Lenguajes Interpretados PHP, ASP, VBScript, Python,… Lenguajes Compilados e Interpretados Haskell, Prolog, …
Compilación CPU solo entiende binario, también llamado código máquina (110010110) Proceso ejecutándose en binario Programa en binario ¿Se programa en binario? NO compilador
Programa VS Proceso Programa Proceso “conjunto de instrucciones que llevan a cabo una operación en un computador” Texto en un fichero Proceso Programa en ejecución Se almacena en Memoria (prim. o sec.) programa proceso
Paradigmas de Programación Forma de representar y manipular el conocimiento. Filosofía para la construcción del software. Cada uno tiene ventajas y desventajas. Situaciones donde un paradigma resulta más apropiado que otro. Tipos: Imperativo Sentencias que cambian el estado del programa Declarativo o Funcional Uso de funciones matemáticas y predicados formales
Esquema de un Programa ALGORITMO ENTRADA SALIDA ALGORITMO: Conjunto de operaciones que, secuencialmente, conducen a la respuesta de una pregunta, en un numero finito de pasos.
Metodología de Programación Pasos en la resolución Análisis del problema Realización de la estrategia ideada para su solución Verificación y análisis del rendimiento del procedimiento.
Análisis del Problema Comprensión del problema Especificación de los datos de entrada Estudio de los resultados que se desean obtener Estudio del tipo de problema
Estrategia ideada Estudio del algoritmo a utilizar Casos básicos Casos generales Casos extremos Lectura de datos de entrada Uso de estructuras de datos Presentación de resultados
Verificación y validación Prueba con casos sencillos Prueba con casos complejos Prueba con casos extremos Estudio del rendimiento Tiempo Uso de memoria Refinamiento del algoritmo
Posibles ejemplos Mínimo entre dos números Suma entre dos números Saber si un numero es cuadrado perfecto Calcular soluciones de una ecuacion de 2º orden Calcular si una fecha (N,N,N) es correcta o no Devolver el valor máximo de una secuencia Calcular el numero de cifras de un numero natural Indicar si una secuencia esta ordenada de mayor a menor Devolver el numero de elementos de una secuencia.
Problema de Josefo Un grupo de personas prefieren el suicidio a la esclavitud y deciden colocarse en círculo eligiendo siempre al siguiente como ejecutor y asesinando al situado después del ejecutor. Así sucesivamente hasta que quede un sólo ciudadano que debería suicidarse. El problema de Josefo es conocer en qué lugar ha de colocarse en el corro para quedar el último y reflexionar libremente sobre la decisión colectiva.
Introducción a VBScript Windows Script Introducción a VBScript
VBScript ¿Qué es? ¿Qué formato tiene? ¿Qué extensión tiene? Fichero de texto ¿Qué extensión tiene? fichero.vbs ¿Cómo editarlo? Con cualquier editor de texto Microsoft Visual Studio ¿Cómo ejecutarlo? Con el comando WScript (“WScript fichero.vbs”) Doble click al fichero
Estructura de VBScript Estructura general de un programa Sentencias, líneas continuas, comentarios Constantes y variables Operadores Estructuras de control Bucles Funciones y Procedimientos Clases
Estructura de un Programa ‘ ***************************************** ‘ Programa de prueba ‘ Creado: 10/01/2006 ‘ declaro variable Dim mensaje ‘ inicializo la variable mensaje = “hola, que tal? Estoy aprendiendo a programar en VBScript” ‘ imprimo el mensaje Wscript.Echo mensaje ‘ **** Fin del programa
Constantes y Variables Const pi = 3.14159, beta = 0.3 Variables pr = 200 precio = precio + 10 nombre = “Santi” Declaración explicita (con valor) Dim precio, iva, precio_total
Constantes y Variables Array Dim secuencia(10) secuencia(0) = 11 Dim matriz(2, 2) Objetos Set obj = Wscript.Arguments
Constantes y Variables Ejemplo 1: Calcular el precio real de dos ordenadores, que cuestan: 1123 euros 1326 euros Ambos sin iva. El programa debe devolver un mensaje personalizado. Santi, el precio total del ordenador 1 es: XXX euros Santi, el precio total del ordenador 2 es: YYY euros
Operadores Aritméticos Lógicos Comparación Precedencia de operador +, -, *, /, \ (entera), Mod, ^ Lógicos And, Or, Xor, Imp, Not Comparación <, >, =, <=, >=, <> Precedencia de operador
Estructuras de Control Condición IF if condición then sentencias elseif condición2 then sentencias2 else sentencias3 end if Condición Case select case variable case valor sentencias case valor2 sentencias2 case else sentencias3 end select
Estructuras de Control Ejemplo 2: Ejecutar un programa que escriba una frase distinta cuando se cumpla una determinada condición, según el siguiente valor: Valor 1 Valor 2 Otro valor
Bucles Do while/until Do...loop while/until For…Next For Each…Next Exit Do Exit For
Do while/until Do While Ejemplo Do Until Ejemplo do while condición sentencias loop Ejemplo do while a <= 10 a = a + 1 Do Until do until condición sentencias loop Ejemplo do until a > 10 a = a + 1
Do…loop while/until Do…loop While Ejemplo Do…loop Until Ejemplo do sentencias loop while condición Ejemplo a = a + 1 loop while a <= 10 Do…loop Until do sentencias loop until condición Ejemplo a = a + 1 loop until a > 10
For (each)…Next For…Next Ejemplo For each…Next Ejemplo For variable = inicio to fin sentencias Next Ejemplo For i = 1 to 10 a = a + 1 For each…Next For each variable in seq sentencias Next Ejemplo For each persona in cola contador = contador + 1
While For each…Next Ejemplo While condición sentencias Wend Dim value While value < 10 value = value + 1
Funciones y Procedimientos Función function nombre (parametros) … ‘ nombre es variable resultado end function Ejemplo 3a: Realizar la suma de los 100 primeros números (número triangular)
Funciones y Procedimientos sub nombre (parametros) … ‘ No se retorna valor end sub Ejemplo 3b: Realizar la suma de los 100 primeros números (número triangular)
Clases Formato: class nombre declaraciones funciones o procedimientos end class Ejemplo 4: Almacenar los siguientes datos de un comprador: Nombre Calle Código postal Teléfono
Clases Atributos publicos y privados Propiedad get: el usuario me pide atributo “virtual”, que le devuelvo? Propiedad let: el usuario da valor a un atributo “virtual”, que hago con el? property get var_virtual property let var_virtual acciones acciones end property end property Ejemplo 5: Se desea tener los siguientes datos de cada unos de los usuarios: Nombre completo Correo electrónico Login Password
Windows Script Windows Script Host
Windows Script Host Método ECHO Cuadros de Mensaje Objeto WScript Variables de Entorno Ejecución de programas Interacción de entrada con el usuario Creación de accesos directos Uso de Sistemas de Fichero y Entrada/Salida Control de Red Control de Windows y otras aplicaciones
Método ECHO Wscript.Echo “Hola, Mundo” Wscript.Echo “Hola, ”, “Mundo” Wscript.Echo “El precio es ”, precio, _ “ pero se puede rebajar a ”, rebaja
Cuadros de Mensaje Formato: Ejemplo: Posibilidades: MsgBox texto, botones, titulo Ejemplo: MsgBox “esto es una prueba”, 0, “prueba” Posibilidades: Botones 0: Boton OK 1: Ok y Cancel 2: Abort, Retry y Ignore 3: Yes, No y Cancel 4: Yes y No 5: Retry y Cancel
Cuadros de Mensaje Iconos Foco 0: Sin icono 16: Parada 32: Pregunta 48: Exclamación 64: Información Foco 0: Primer botón 256: Segundo botón 512: Tercer botón
Cuadros de Mensaje Resultado del Cuadro (res = función MsgBox): 1: OK 2: Cancel 3: Abort 4: Retry 5: Ignore 6: Yes 7: No Ejemplo 6: Hacer un cuadro de mensaje que pregunte si deseamos un viaje al Caribe. El programa debe contestar a cada posibilidad.
Objeto WScript Permite acceder a argumentos For each arg in Wscript.Arguments ,,, Next Permite control de variables de Entorno Set sh = CreateObject(“Wscript.Shell”) Set env = sh.Enviroment(“Process”) … texto = env(“PATH”) env(“PATH”) = “c:/windows” env.remove(“PATH”)
Objeto WScript Permite ejecutar otros programas sh.Run mandato [, estilo] [, espera] Estilo Ventana 0: Oculta 1: Normal 2: Minimizada 3: Maximizada 4: Normal pero sin foco 6: Minimizada pero sin foco Espera: True o False Ejemplo 7: Ejecutar el programa Notepad maximizado.
Interacción de entrada Caja de entrada res = InputBox (prompt, [titulo], [defecto], [x], [y]) Si resultado es “”, cancelación de inserción Ejemplo 8: Ejecutar un acceso a un programa en el que el usuario tenga que indicar su username. Por cada usuario, debe contestar algo distinto. Hay tres usuarios registrados: “Luis”, “Juan” y “Maria”
Creación de accesos directos set sh = WScript.CreateObject("WScript.Shell") set lnk = sh.CreateShortcut(nombre) … lnk.save Path del Escritorio: path = sh.SpecialFolders("Desktop") Ejemplo 9: Creación de un acceso directo del Script en el escritorio.
Uso de Sistemas de Fichero y E/S set fs = WScript.CreateObject(“Scripting.FileSystemObject”) Acceso a todas las unidades de discos (Ejemplo 10) set discos = fs.Drives for each d in discos … next Propiedades de una unidad if (NOT fs.DriveExists(“H”)) then Wscript.Quit else set drive = fs.GetDrive(“H”) if (drive.IsReady) then drive.DriveLetter drive.DriveType ‘ (Desconocido, Borrable, Duro, Remoto, CD, RAM) drive.VolumeName (ShareName) drive.TotalSize drive.FreeSpace end if
Uso de Sistemas de Fichero y E/S Acceso a carpetas set carpeta = fs.GetFolder (path) set carpetas = carpeta.SubFolders for each c in carpetas … c.Name Next Crear nueva carpeta Set nc = fs.CreateFolder(path) Renombrar c.Rename(nombre) Copiar carpeta fs.CopyFolder path1 path2 Mover carpeta fs.MoveFolder path1 path2< Borrar carpeta fs.DeleteFolder(path) Existencia Carpeta fs.FolderExists(path)
Uso de Sistemas de Fichero y E/S Acceso a ficheros set ficheros = carpeta.Files for each f in ficheros … f.Name f.Size f.DateCreated f.DateLastModified Next Ejemplo 11: Mostrar el contenido de la carpeta System Existencia de fichero fs.FileExists(fichero) Copiar ficheros fs.CopyFile path1 path2 Borrar ficheros fs.DeleteFile(fichero) Ejemplo 12: Sistema Backup
Uso de Sistemas de Fichero y E/S Acceso a un fichero de texto OpenTextFile(nombre [, modo[, crear[, formato]]] ) Modo: (1) ForReading, (2) ForWriting, (3) ForAppending Crear: True si se va a crear nuevo. False en caso contrario Formato: TristateTrue si es Unicode, TristateFalse si es ASCII Lectura de fichero de texto set entrada = fs.OpenTextFile(“fichero.txt”) Do While Not (entrada.atEndOfStream) Texto = Texto & entrada.ReadLine & vbCrLf Loop Escritura (con/sin reemplazo) en fichero set salida = fs.OpenTextFile(“fichero.txt”, 2, True) texto = entrada.ReadLine salida.WriteLine texto Ejemplo 13: Copiar el contenido de un fichero en otro
Control de Red Objeto “Wscript.Network” Propiedades: ComputerName: nombre maquina UserName: usuario logeado UserDomain: dominio conectado Ejercicio 14: Mostrar la informacion del sistema por pantalla.
Control de Red Añadir Impresora de Red Nw.AddPrinterConnection [port], LPpath Eliminar Impresora de Red Nw.RemovePrinterConnection Name Listado Impresoras set impresoras = Nw.EnumPrinterConnections Name for i = 0 to impresoras.Count – 1 Step 2 puerto = impresoras(i) nombre = impresoras(i+1) next Indicar Impresora Predeterminada Nw.SetDefaultPrinter Name
Control de Red Añadir unidades de red Nw.MapNetWorkDrive unidad path Listado de unidades de red set unidades = Nw.EnumNetWorkDrives for i = 0 to unidades.Count -1 step 2 unidad = unidades(i) path = unidades(i+1) next Ejemplo 15: Crear una unidad de red con una carpeta compartida de tu propia maquina
Control de Windows y otras aplicaciones Dormir proceso Manejo de aplicaciones con teclas
Dormir Proceso Dormir script Espera de datos, uso de CPU Wscript.Sleep milisegundos Espera de datos, uso de CPU Para selección de procesos set sh = Wscript.CreateObject(“Wscript.Shell”) sh.Run “Calc.exe”, 1 Wscript.Sleep 500 sh.Run “NotePad.exe”, 1 Wcript.Sleep 500
Manejo de aplicaciones con teclas Uso de teclas set sh = Wscript.CreateObject (“Wscript.Shell”) sh.sendKeys(“teclas”) Teclas especiales Retroceso {BS} Caps Lock {CAPSLOCK} DELETE {DEL} ↓ ↑ → ← {DOWN UP LEFT RIGHT} Enter {ENTER} ESC {ESC} Print {PRTSC} Tab {TAB} Num Lock {NUMLOCK} F1 {F1} F2 {F2} … F16 {F16} Shift + Ctrl ^ Alt %
Manejo de aplicaciones con teclas Ejemplo 16: Crear un script que ejecute la calculadora, calcule el producto entre 1564 y 54028 y luego se cierre automaticamente (Alt+F4)
Manejo de aplicaciones con teclas Paso de un proceso a otro sh.AppActivate titulo Titulo: Titulo actual de la aplicación Titulo: “Documento - WordPad”
Manejo de aplicaciones con teclas Ejemplo 17: Crear un Script que ejecute el notepad y el wordpad, escriba una frase en notepad, la copie y pegue en wordpad
Windows Script Conclusiones
Conclusiones Muy sencillo de programar Muy sencillo de ejecutar Muy útil Muy cómodo Puede llegar a ser complejo Es muy parecido al resto de lenguajes de programación
Referencias Microsoft Windows Script Host 2.0 Developers’s Guide – Günter Born http://www.microsft.com/
Información Mail: sgonzalez@fi.upm.es Páginas web: http://laurel.datsi.fi.upm.es/~sgonzalez/ http://laurel.datsi.fi.upm.es/