You are on page 1of 29

Gua Rpida Windows Script Technologies ( Uno )

Autor: Jos Vicente Martnez (Jovi). Industrializador de Aplicaciones. Versin: 1.0 ltima modificacin: 15-11-2007 Esta obra est bajo una licencia Reconocimiento-NoComercialSinObraDerivada-2.5 Espaa de Creative Commons. Para ver una copia de esta licencia, visite http://creativecommons.org/licenses/by-nc-nd/2.5/es o enve una carta a Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. Usted es libre de: - Copiar, distribuir y comunicar pblicamente la obra. Bajo las condiciones siguientes: - Reconocimiento. Debe reconocer los crditos de la obra de la manera especificada por el autor o el licenciador. - No comercial. No puede utilizar esta obra para fines comerciales. - Compartir bajo la misma licencia. Si altera o transforma esta obra, o genera una obra derivada, slo puede distribuir la obra generada bajo una licencia idntica a sta. - Al reutilizar o distribuir la obra, tiene que dejar bien claro los trminos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Referencias Todos los nombres propios de programas, sistemas operativos, equipos hardware,etc., que aparecen en este documento son marcas registradas de sus respectivas compaas u organizaciones.

Windows Script Technologies

Windows Script Technologies o INTRODUCCIN


Siglas 1. Mapear Unidad 2. BackUp & Borrado de Logs 3. Todos los servicios instalados

o VBSCRIPT
4. Espacio Libre en Disco (Objetos) 5. Espacio Libre en Disco en MB (Variables, Constantes y Conexin Remota) 6. Espacio libre en todos los discos (Colecciones) 7. Lista de Unidades de Cinta (Correccin de Fallo por Lista Vaca) 8. Espacio Libre en Discos cada Hora (For Next y Sleep) 9. Espacio Libre en Grupo de Equipos (Arrays) 10. Espacio Libre en Equipos por paso de Argumentos (Argumentos y Errores) 11. Constantes Intrnsecas. 12. Conversores de Tipos. 13. Trabajo con Fechas. 14. Datepart. Porciones de Fecha. 15. Datepart. Configuracin de la semana del principio del ao. 16. Otras funciones para devolver porciones de Fecha. 17. Porcentajes. 18. Abrir Fichero y Leer lnea a lnea. 19. Ver Impresoras (Select Case) 20. Listar Subcarpetas (Recursividad)

o WSH
21. Crear Cuenta de Usuario. 22. Borrar Archivo. 23. Conectar Unidad de Red Condicional. 24. Detener Servicio. 25. Enviar Salida a Archivo. I. 26. WScript Object. 27. Mtodos y Propiedades de los Objetos TextStream. 28. Argumentos. Argumentos sin nombre. 29. Argumentos. Argumentos con nombre y predefinidos. 30. Funciones en Entorno WHS. II. 31. WshShell Object. 32. Run & Exec. 33. %compsec% 34. Accesos Directos. 35. Identificadores de Carpetas Especiales. 36. Variables de Entorno. 37. LogEvent. Logear Eventos. 38. RegRead. 39. RegWrite. 40. RegDelete. 41. SendKeys. Enviar pulsaciones de teclas. 42. Cambiar y Mostrar el Directorio Actual (CurrentDirectory). 43. Popup. Mostrar MessageBox con cuenta atrs. III. 44. WshNetwork Object. 45. Mapear Unidades de Red. 46. Manejo de Impresoras de Red. 47. Obtener informacin del Usuario y del Equipo. IV. 48. WshController Object. 49. Ejecutar scripts en Ordenadores Remotos. 50. Monitorizar estado de Scripts Remotos. 51. Examinar Errores ocurridos en scripts Remotos. 52. Limitaciones de WSH Remoto.

Windows Script Technologies

Windows Script Technologies


Microsoft TechNet

WSH WMI ADSI COM API

Windows Script Host Windows Management Instrumentation Active Directory Service Interfaces Component Object Model Application Programming Interfaces

_1. Mapear Unidad_______________________


Set objNetwork = CreateObject("WScript.Network") objNetwork.MapNetworkDrive "X:", "\\atl-fs-01\public"

_2. BackUp & Borrado de Logs____________


strComputer = "." Set objWMIService = GetObject("winmgmts:" & _ "{impersonationLevel=impersonate, (Backup, Security)}!\\" _ & strComputer & "\root\cimv2") Set colLogFiles = objWMIService.ExecQuery _ ("Select * from Win32_NTEventLogFile") For Each objLogfile in colLogFiles strBackupLog = objLogFile.BackupEventLog("c:\scripts\" & _ objLogFile.LogFileName & ".evt") objLogFile.ClearEventLog() Next

_3. Todos los servicios instalados______


strComputer = "." Set objWMIService = GetObject("winmgmts:" & _ "{impersonationLevel=Impersonate}!\\" & _ strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_Service") For Each objItem in colItems Wscript.Echo objItem.Name Next

Windows Script Technologies

VBSCRIPT
_4. Espacio libre en Disco_____________
(Ejemplo de trabajo con Objetos)
Set objWMIService = GetObject("winmgmts:") Set objLogicalDisk = objWMIService.Get("Win32_LogicalDisk.DeviceID='c:'") Instanciacion Wscript.Echo objLogicalDisk.FreeSpace

Trabajar con Objetos: o Conectando a Objetos: - GetObject - CreateObject o Instanciacin de Objetos: - Set objNombre o Llamar Mtodos: - ObjetoReferencia.Metodo o Recuperar Propiedades: - ObjetoReferencia.Propiedad

_5. Espacio libre en Disco (MegaBytes)______


(Ejemplo de Variables, Constantes, Conexin Remota y Formato de Salida (Int())
Const B_EN_MB = 104876 sComputer = "10.70.64.19" Set objWMIService = GetObject("winmgmts://" & sComputer) Set objLogicalDisk = objWMIService.Get("Win32_LogicalDisk.DeviceID='c:'") FreeMegaBytes = objLogicalDisk.FreeSpace / B_EN_MB Cambio B a MB Wscript.Echo Int(FreeMegaBytes) Quita la parte decimal

Windows Script Technologies

_6. Espacio libre en todos los Discos__________


(Ejemplo de Colecciones)
Const CONVERSION_FACTOR = 1048576 Computer = "127.0.0.1" Set objWMIService = GetObject("winmgmts://" & Computer) Set colLogicalDisk = objWMIService.InstancesOf("Win32_LogicalDisk") For Each objLogicalDisk In colLogicalDisk FreeMegaBytes = objLogicalDisk.FreeSpace / CONVERSION_FACTOR Wscript.Echo objLogicalDisk.DeviceID & " " & Int(FreeMegaBytes) Next

_7. Lista de Unidades de Cinta________________


(Ejemplo de Coleccin con correccin de fallo por Coleccin Vacia)
Set objWMIService = GetObject("winmgmts:") Set colTapeDrives = objWMIService.InstancesOf("Win32_TapeDrive") La propiedad Count devuelve el numero de instancias en la colecc. If colTapeDrives.Count = 0 Then Wscript.Echo "No hay unidades de Cinta en este ordenador." Else For Each objTapeDrive In colTapeDrives Wscript.Echo objTapeDrive.Name Next End If

_8. Espacio libre en Discos cada Hora___________


(Ejemplo de For Next y Sleep)
Const CONVERSION_FACTOR = 1048576 Const ONE_HOUR = 3600000 Valor para Sleep en milisegundos Computer = "atl-dc-01" Set objWMIService = GetObject("winmgmts://" & Computer) For i = 1 to 12 Set colLogicalDisk = objWMIService.InstancesOf("Win32_LogicalDisk") For Each objLogicalDisk In colLogicalDisk FreeMegaBytes = objLogicalDisk.FreeSpace / CONVERSION_FACTOR Wscript.Echo objLogicalDisk.DeviceID & " " & Int(FreeMegaBytes) Next Wscript.Sleep ONE_HOUR Next

Windows Script Technologies

_9. Espacio libre en Grupo de Equipos__________


(Ejemplo de Arrays)
Const CONVERSION_FACTOR = 1048576 Const WARNING_THRESHOLD = 100 Equipos = Array("b579480", "b596711", "b596706") For Each Equipo In Equipos Set objWMIService = GetObject("winmgmts://" & Equipo) Set colLogicalDisk = objWMIService.InstancesOf("Win32_LogicalDisk") For Each objLogicalDisk In colLogicalDisk FreeMegaBytes = objLogicalDisk.FreeSpace / CONVERSION_FACTOR If FreeMegaBytes < WARNING_THRESHOLD Then Wscript.Echo Computer & " " & objLogicalDisk.DeviceID & _ " is low on disk space." End If Next Next

_10. Espacio libre en Disco por Argumento________


(Ejemplo de Paso de Argumentos y Captura de Errores)
On Error Resume Next Const CONVERSION_FACTOR = 1048576 Const WARNING_THRESHOLD = 100 If WScript.Arguments.Count = 0 Then Wscript.Echo "Use: NombreScript.vbs server1 server2 server3 ..." WScript.Quit End If For Each Computer In WScript.Arguments Set objWMIService = GetObject("winmgmts://" & Computer) If Err.Number <> 0 Then Wscript.Echo Computer & " " Err.Description Err.Clear Else Set colLogicalDisk = objWMIService.InstancesOf("Win32_LogicalDisk") For Each objLogicalDisk In colLogicalDisk FreeMegaBytes = objLogicalDisk.FreeSpace / CONVERSION_FACTOR If FreeMegaBytes < WARNING_THRESHOLD Then Wscript.Echo Computer & " " & objLogicalDisk.DeviceID & _ " Bajo espacio en disco." End If Next Next

Propiedades del Objeto Err: .Description .Number .Source

Si las propiedades no se borran con el mtodo .Clear estas siguen manteniendo su valor y puede provocar mal funcionamiento del script.

Windows Script Technologies

_11. Constantes Intrinsecas______________


VbYesNo VbDefaultButton2 VbCrLf VbTab VbNo Ventana con botones S y No. Int=260 Botn por defecto activado. Salto de lnea. Tabulador No, 0, botn NO o Cancelar. Int=7

_12. Conversores de Tipos_____________


CBool CByte CCur CDate CDbl CInt CLng CSng CStr 0 a False, los dems nmeros a True Valor Comn

Si la fraccin es .5 redondea hacia el nmero par.

_13. Trabajo con Fechas_______________


Now Date Time Devuelve Fecha y Hora Devuelve Fecha Devuelve Hora

Los valores aceptados como fechas vlidas se basan en el modo de configuracin de fecha y hora del sistema. La funcin IsDate() se puede utilizar para averiguar cuando un valor es una fecha correcta.

Windows Script Technologies

_14. Datepart. Porciones de Fecha_____________


yyyy q m y d w ww h n s Ao. Formato largo. Trimestre. (1,2,3,4) Mes. Da del ao. Da del mes. Da de la semana. 1 Es Domingo. Semana del ao. (Ver configuracin de la semana del ao) Hora. (24h) Minuto. Segundo.

Wscript.Echo Wscript.Echo Wscript.Echo Wscript.Echo Wscript.Echo Wscript.Echo Wscript.Echo Wscript.Echo Wscript.Echo Wscript.Echo Wscript.Echo

Now "Year: " & DatePart("yyyy", Now) "Quarter: " & DatePart("q", Now) "Month: " & DatePart("m", Now) "Day of Year: " & DatePart("y", Now) "Day: " & DatePart("d", Now) "Weekday: " & DatePart("w", Now) "Week of Year: " & DatePart("ww", Now) "Hour: " & DatePart("h", Now) "Minute: " & DatePart("n", Now) "Seconds: " & DatePart("s", Now)

_15. Datepart. Configuracin de la semana del ao_


vbUseSystem vbFirstJan1 vbFirstFourDays vbFirstFullWeek Segn la configuracin horaria del sistema. La semana en la que est el 1 de Enero. La primera semana con almenos 4 dias en Enero. La primera semana que sea enteramente de Enero. Int = 0 Int = 1 Int = 2 Int = 3

TestDate = "1/6/2003" Wscript.Echo TestDate Wscript.Echo "Week of Wscript.Echo "Week of Wscript.Echo "Week of vbFirstFourDays) Wscript.Echo "Week of vbFirstFullWeek)

Year: " & DatePart("ww", TestDate) Year: " & DatePart("ww", TestDate, vbFirstJan1) Year: " & DatePart("ww", TestDate, _ Year: " & DatePart("ww", TestDate, _

Windows Script Technologies

_16. Otras Funciones para devolver porciones de Fecha__


Day Hour Minute Month Second Weekday Year Da de la especificada fecha. Hora. Minuto. Da del ao. Segundo. Da de la semana. 1 es Domingo. Ao.

CurrentDate = Now Wscript.Echo "Year: " & VbTab & VbTab & Year(CurrentDate) Wscript.Echo "Month: " & VbTab & VbTab & Month(CurrentDate) Wscript.Echo "Day: " & VbTab & VbTab & Day(CurrentDate) Wscript.Echo "Weekday: " & VbTab & Weekday(CurrentDate) Wscript.Echo "Hour: " & VbTab & VbTab & Hour(CurrentDate) Wscript.Echo "Minute: " & VbTab & Minute(CurrentDate) Wscript.Echo "Second: " & VbTab & Second(CurrentDate)

_17. Porcentajes_____________________
Const NoDecimals = 0 NumberToFormat = 1 / 7 Wscript.Echo NumberToFormat Wscript.Echo FormatPercent(NumberToFormat, NoDecimals)

_18. Abrir Fichero y leer lnea a lnea____


(Ejemplo de Do Until)
Const ForReading = 1 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTextFile = objFSO.OpenTextFile("c:\test.txt", ForReading) Do Until objTextFile.AtEndOfStream strNextLine = objTextFile.Readline Wscript.Echo strNextLine Loop

(Ejemplo de Do While)
Const ForReading = 1 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTextFile = objFSO.OpenTextFile("c:\test.txt", ForReading) Do While Not objTextFile.AtEndOfStream strNextLine = objTextFile.Readline Wscript.Echo strNextLine Loop

10

Windows Script Technologies

_19. Ver Impresoras______________________


(Ejemplo Select Case)
On Error Resume Next Set objWMIService = GetObject("Winmgmts:root\cimv2") If Err <> 0 Then ErrorHandler End If Set colPrinters = objWMIService.ExecQuery _ ("SELECT * FROM Win32_Printer WHERE Name='TestPrinter'") If Err <> 0 Then ErrorHandler End If For Each objPrinter in colPrinters Wscript.Echo objPrinter.Name Next Sub ErrorHandler Select Case Hex(Err.Number) Case "80041001" Wscript.Echo "The call failed." Case "80041002" Wscript.Echo "The object could not be found." Case "80041010" Wscript.Echo "The specified class is not valid." Case "8004103A" Wscript.Echo "The specified object path was invalid." Case "80041048" Wscript.Echo "The specified class is not supported." Case Else Wscript.Echo "An unknown error occurred." End Select Err.Clear End Sub

_20. Listar Subcarpetas____________________


(Ejemplo Recursividad)
Set FSO = CreateObject("Scripting.FileSystemObject") ShowSubfolders FSO.GetFolder("C:\Scripts") Sub ShowSubFolders(Folder) For Each Subfolder in Folder.SubFolders Wscript.Echo Subfolder.Path ShowSubFolders Subfolder Next End Sub

11

Windows Script Technologies

WSH
_21. Crear Cuenta de Usuario_________
Set objOU = script.GetObject _ ("LDAP://OU=management,dc=fabrikam,dc=com") Set objUser = objOU.Create("User", "cn=MyerKen") objUser.Put "sAMAccountName", "myerken" objUser.SetInfo

_22. Borrar Archivo________


Set objFSO = Wscript.CreateObject("Scripting.FileSystemObject") strFolder = Wscript.Arguments.Item(0) objFSO.DeleteFolder(strFolder)

_23. Conectar Unidad de Red Condicional______


Set objNetwork = Wscript.CreateObject("Wscript.Network") Set objShell = WScript.CreateObject("WScript.Shell") strDomain = objNetwork.UserDomain If strDomain = "fabrikam" Then objShell.Run "net use X: \\atl-fs-01" End If

_24. Detener Servicio_______________________


strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & _ "\root\cimv2") Set colServices = objWMIService.ExecQuery _ ("SELECT * FROM Win32_Service WHERE Name = 'NombreServicio'") For Each objService in colServices errReturnCode = objService.StopService() Next

_25. Enviar Salida a Archivo__________________


cscript service_info.vbs > c:\scripts\services.txt cscript service_info.vbs >> c:\scripts\services.txt cscript //nologo service_info.vbs > c:\scripts\services.txt Envia la salida al archivo. Borra lo que haba en l anteriormente. dem. Pero conserva lo anteriormente escrito. Evita la copia del logo.

12

Windows Script Technologies

_I. 26. WScript Object__________________________

13

Windows Script Technologies

_27. Mtodos y Propiedades de los Objetos TextStream___

Wscript.StdOut.Write "Enter a Decimal Number: " strDecimal = Wscript.StdIn.ReadLine Wscript.StdOut.WriteLine strDecimal & " is equal to " & _ Hex(strDecimal) & " in hex." Set objNetwork = Wscript.CreateObject("Wscript.Network") Set objStdOut = WScript.StdOut objStdOut.Write "User: " objStdOut.Write objNetwork.UserDomain objStdOut.Write "\" objStdOut.Write objNetwork.UserName objStdOut.WriteBlankLines(1) objStdOut.WriteLine objNetwork.ComputerName objStdOut.Write "Information retrieved." objStdOut.Close

14

Windows Script Technologies

_28. Argumentos. Argumentos sin nombre____


strServer = WScript.Arguments.Item(0) strPacketSize = WScript.Arguments.Item(1) strTimeout = WScript.Arguments.Item(2) Wscript.Echo "Pinging Server: " & strServer Wscript.Echo "Packet Size: " & strPacketSize Wscript.Echo "Timeout: " & strTimeout

_29. Argumentos. Argumentos con nombre y predefinidos___


Const DEFAULT_PACKET_SIZE = 100 Set colNamedArguments = WScript.Arguments.Named strServer = colNamedArguments.Item("Server") If colNamedArguments.Exists("PacketSize") Then strPacketSize = colNamedArguments.Item("PacketSize") Else strPacketSize = DEFAULT_PACKET_SIZE End If strTimeout = colNamedArguments.Item("Timeout") Wscript.Echo "Server Name: " & strServer If colNamedArguments.Exists("PacketSize") Then Wscript.Echo "Packet Size :" & strPacketSize Else Wscript.Echo "Packet Size [default]: " & strPacketSize End If Wscript.Echo "Timeout (ms): " & strTimeout

NombrePrograma.vbs /Argum1:Valor1 /Argum2:Valor2 /Argum3:Valor3

_30. Funciones de Entorno WHS______


Wscript.Echo Wscript.Echo Wscript.Echo Wscript.Echo Wscript.Echo Wscript.Echo Wscript.Echo "Script Full Name: " & Wscript.ScriptFullName "Script Name: " & Wscript.ScriptName "Version: " & WScript.Version "Build: " & Wscript.BuildVersion "Name: " & Wscript.Name "Full Name: " & Wscript.FullName "Path: " & Wscript.Path

15

Windows Script Technologies

_II. 31. WshShell Object___________

16

Windows Script Technologies

_32. Run & Exec____________________________


Ejecuta Ping.exe mediante el mtodo Run.
Set objFSO = Wscript.CreateObject("Scripting.FileSystemObject") Set objShell = Wscript.CreateObject("Wscript.Shell") objName = objFSO.GetTempName objTempFile = objName objShell.Run "cmd /c ping -n 3 -w 1000 157.59.0.1 >" & _ objTempFile, 0, True Set objTextFile = objFSO.OpenTextFile(objTempFile, 1) Do While objTextFile.AtEndOfStream <> True strText = objTextFile.ReadLine If Instr(strText, "Respuesta") > 0 Then Wscript.Echo "Respuesta recibida." Exit Do End If Loop objTextFile.Close objFSO.DeleteFile(objTempFile)

dem con el mtodo Exec


Set objShell = WScript.CreateObject("WScript.Shell") Set objExecObject = objShell.Exec _ ("cmd /c ping -n 3 -w 1000 157.59.0.1") Do While Not objExecObject.StdOut.AtEndOfStream strText = objExecObject.StdOut.ReadLine() If Instr(strText, "Respuesta") > 0 Then Wscript.Echo "Respuesta recibida." Exit Do End If Loop

Estados de Run: Oculta la ventana y activa otra. 0 Activa y muestra una ventana a su tamao y posicin original. 1 Ventana minimizada. 2 Ventana maximizada. 3 Muestra una ventana copiando e ltimo tamao y posicin. 4 Muestra la ventana en su posicin y tamao normal. 5 Minimiza la ventana y hace activa la ventana anterior. 6 Ventana minimizada. La ventana activa se mantiene sindolo. 7 Muestra la ventana en el estado actual. La ventana activa no vara. 8 Activa y muestra la ventana y deja de estar maximizada o minimizada. 9 Pone la ventana en el mismo estado que el programa que la inici. 10

17

Windows Script Technologies

_33. %comspec%________________________
(Especificacin de Run y Exec) %compsec% ejecuta comandos de la lnea de comandos (como dir).
Set objShell = WScript.CreateObject("WScript.Shell") objShell.Run("%comspec% /K dir"), 1, True

%comspec% /c %comspec% /k

La ventana de comandos continua abierta al finalizar el script. La ventana de comandos se cierra al terminar el script.

Set objShell = WScript.CreateObject("WScript.Shell") Set objExecObject = objShell.Exec("%comspec% /c ipconfig.exe") Do Until objExecObject.StdOut.AtEndOfStream strLine = objExecObject.StdOut.ReadLine() strIP = Instr(strLine,"Address") If strIP <> 0 Then Wscript.Echo strLine End If Loop

_34. Accesos Directos___________________


Acceso directo estndar.
Set objShell = WScript.CreateObject("WScript.Shell") strDesktopFolder = objShell.SpecialFolders("AllUsersDesktop") Set objShortCut = objShell.CreateShortcut(strDesktopFolder & _ "\IIS Manager.lnk") objShortCut.TargetPath = "%SystemRoot%\System32\Inetsrv\iis.msc" objShortCut.Description = "Run the Internet Information Services Manager." objShortCut.HotKey = "Ctrl+Shift+I" objShortCut.Save Sin .Save el acceso directo no se crea.

URL.
Set objShell = WScript.CreateObject("WScript.Shell") strDesktopFld = objShell.SpecialFolders("Desktop") Set objURLShortcut = objShell.CreateShortcut(strDesktopFld & _ "\MSDN.url") objURLShortcut.TargetPath = "http://msdn.microsoft.com" objURLShortcut.Save

Borrar Acceso directo.


Set objShell = WScript.CreateObject("WScript.Shell") Set colEnvironmentVariables = objShell.Environment("Volatile") Set objFSO = CreateObject("Scripting.FileSystemObject") strQLFolder = colEnvironmentVariables.Item("APPDATA") & _ "\Microsoft\Internet Explorer\Quick Launch\TechNet.URL" objFSO.DeleteFile(strQLFolder)

18

Windows Script Technologies

_35. Identificadores de Carpetas Especiales_________


AllUsersDesktop AllUsersStartMenu AllUsersPrograms AllUsersStartup Desktop Favorites Fonts MyDocuments NetHood PrintHood Recent SendTo StartMenu Startup Templates AllUsersDesktop

Set objShell = WScript.CreateObject("WScript.Shell") strFontDirectoryPath = objShell.SpecialFolders.Item("Fonts") Wscript.Echo "Font Directory Path: " & strFontDirectoryPath Set objShell = WScript.CreateObject("WScript.Shell") strSendToFolder = objShell.SpecialFolders("SendTo") strPathToNotepad = objShell.ExpandEnvironmentStrings _ ("%SystemRoot%/system32/notepad.exe") Set objShortcut = objShell.CreateShortcut(strSendToFolder & _ "\notepad.lnk") objShortcut.TargetPath = strPathToNotepad objShortcut.Save

_36. Variables de Entorno_____________________


Tipo User System Volatile Descripcin Guarda el usuario logeado manteniendolo sobre reinicios dem pero con todos los usuarios. dem que User pero se borra al reiniciar. Localizacin HKCU\Environment HKLM\System\CurrentControl Set\Control\Session Manager\Environment HKCU\VolatileEnvironment

Set objShell = WScript.CreateObject("WScript.Shell") Set colSystemEnvVars = objShell.Environment("System") Set colUserEnvVars = objShell.Environment("User") Wscript.Echo "Computer-specific PATH Environment Variable" Wscript.Echo colSystemEnvVars("PATH") Wscript.Echo "User-specific PATH Environment Variable" Wscript.Echo colUserEnvVars("PATH")

Crear una Variable.


Set objShell = WScript.CreateObject("WScript.Shell") Set colUsrEnvVars = objShell.Environment("USER") colUsrEnvVars("APP_VARIABLE") = "Installed" Nombre y valor Wscript.Echo colUsrEnvVars("APP_VARIABLE")

Modificar una variable.


Set objShell = WScript.CreateObject("WScript.Shell") Set colUsrEnvVars = objShell.Environment("USER") strCurrentValue = colUsrEnvVars("APP_VARIABLE") colUsrEnvVars("APP_VARIABLE") = "Upgraded" Wscript.Echo colUsrEnvVars("APP_VARIABLE")

19

Windows Script Technologies Expandir una variable.


Set objShell = WScript.CreateObject("WScript.Shell") Set colEnvVars = objShell.Environment("User") Wscript.Echo "Carpeta Temporal (Sin expandir):" Devuelve la direccion relativa. Wscript.Echo colEnvVars("TEMP") & vbCrLf Wscript.Echo "Carpeta Temporal (Expandida)" Devuelve la direccion absoluta. Wscript.Echo objShell.ExpandEnvironmentStrings("%TEMP%")

_37. LogEvent. Logear Eventos_________________


Set objShell = WScript.CreateObject("Wscript.Shell") objShell.LogEvent 0,"Test Success Event" objShell.LogEvent 1,"Test Error Event" objShell.LogEvent 2,"Test Warning Event" objShell.LogEvent 4, "Test Information Event" objShell.LogEvent 8, "Test Success Audit Event" objShell.LogEvent 16, "Test Failure Audit Event"

Valor 0 1 2 4 8 16

Tipo de Evento SUCCESS ERROR WARNING INFORMATION AUDIT_SUCCESS AUDIT_FAILURE

_38. RegRead_______________________________
Set objShell = WScript.CreateObject("WScript.Shell") sngVersion = objShell.RegRead _ ("HKLM\Software\Microsoft\WindowsNT\CurrentVersion\CurrentVersion") Wscript.Echo sngVersion Set objShell = WScript.CreateObject("WScript.Shell") arrValues = objShell.RegRead _ ("HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Security\Sources") For Each strValue In arrValues Wscript.Echo strValue Next

_39. RegWrite_________________________
Set objShell = WScript.CreateObject("WScript.Shell") objShell.RegWrite "HKCU\TestKey\Version", 56, "REG_DWORD"

20

Windows Script Technologies

_40. RegDelete_________________________
Set objShell = WScript.CreateObject("WScript.Shell") objShell.RegDelete "HKCU\TestKey\Version"

_41. SendKeys. Enviar pulsaciones de Teclas_________


Set objShell = WScript.CreateObject("WScript.Shell") objShell.Run "Calc.exe" Do Until Success = True AppActivate return Successs=False si no est abierta la aplicacin. Success = objShell.AppActivate("Calculadora") Wscript.Sleep 1000 Loop objShell.SendKeys "2"

Tecla BACKSPACE BREAK CAPS LOCK DEL o DELETE DOWN ARROW END ENTER ESC HELP HOME INS o INSERT LEFT ARROW NUM LOCK PAGE DOWN PAGE UP PRINT SCREEN RIGHT ARROW SCROLL LOCK TAB UP ARROW SHIFT CONTROL ALT F1, F2, {a 10}

Representacin {BACKSPACE}, {BS}, or {BKSP} {BREAK} {CAPSLOCK} {DELETE} o {DEL} {DOWN} {END} {ENTER} o ~ {ESC} {HELP} {HOME} {INSERT} or {INS} {LEFT} {NUMLOCK} {PGDN} {PGUP} {PRTSC} {RIGHT} {SCROLLLOCK} {TAB} {UP} + ^ % {F1}, {F2}, 10 veces a. Slo puede usarse con un nico carcter.

21

Windows Script Technologies

Const iNormalFocus = 1 Set objShell = WScript.CreateObject("WScript.Shell") objShell.Run "mmc.exe",iNormalFocus Wscript.Sleep 300 objShell.AppActivate "Console1" Wscript.Sleep 100 objShell.SendKeys "^m" Wscript.Sleep 100 objShell.SendKeys "{TAB}" Wscript.Sleep 100 objShell.SendKeys "{TAB}" Wscript.Sleep 100 objShell.SendKeys "{ENTER}"

_42. Cambiar y Mostrar el Directorio Actual______________


(Ejemplo de CurrentDirectory)
Set objShell = WScript.CreateObject("WScript.Shell") Wscript.Echo "Initial Working Directory:" Wscript.Echo objShell.CurrentDirectory Muestra el directorio. objShell.CurrentDirectory = "C:\" Cambia el directorio.

Wscript.Echo "Working Directory After Change:" Wscript.Echo objShell.CurrentDirectory

_43. Popup. Mostrar MessageBox con cuenta atrs________


Const TIMEOUT = 5 Set objShell = WScript.CreateObject("WScript.Shell") objShell.Popup "Disk Report Complete", TIMEOUT objShell.Popup "Memory Report Complete", TIMEOUT objShell.Popup "CPU Report Complete", TIMEOUT

Iconos. Icon STOP QUESTION MARK EXCLAMATION MARK INFORMATION

Constant Name vbCritical vbQuestion vbExclamation vbInformation

Constant Value 16 32 48 64

22

Windows Script Technologies Sets de Botones. Button Set OK OK and CANCEL ABORT, RETRY and IGNORE YES, NO and CANCEL YES and NO RETRY and CANCEL Escoger el botn con presencia. Default Button LEFT MIDDLE RIGHT Recoger el Input del usuario. Value 1 2 3 4 5 6 7

Constant Name vbOKOnly vbOKCancel vbAbortRetryIgnore vbYesNoCancel vbYesNo vbRetryCancel

Constant Value 0 1 2 3 4 5

Constant Name vbDefaultButton1 vbDefaultButton2 vbDefaultButton3

Constant Value 0 256 512

Constant VbOK VbCancel VbAbort VbRetry VbIgnore VbYes VbNo

Button Clicked OK Cancel Abort Retry Ignore Yes No

Const TIMEOUT = 7 Set objShell = WScript.CreateObject("WScript.Shell") Set objFS = WScript.CreateObject("Scripting.FileSystemObject") strPath = Wscript.FullName strFileVersion = objFS.GetFileVersion(strPath) iRetVal = objShell.Popup(Wscript.FullName & vbCrLf & _ "Version: " & strFileVersion & vbCrLf & _ "Mas detalles?" _ ,TIMEOUT,"Mas informacion?",vbYesNo + vbQuestion) Select Case iRetVal Case vbYes Set objFile = objFS.GetFile(strPath) objShell.Popup WScript.FullName & vbCrLf & vbCrLf & _ "Version: " & strFileVersion & vbCrLf & _ "Tamanyo: " & Round((objFile.Size/1024),2) & " KB" & _ vbCrLf & "Fecha de creacion: " & objFile.DateCreated & vbCrLf & _ "Ultima modificacion: " & objFile.DateLastModified & vbCrLf,TIMEOUT Wscript.Quit Case vbNo Wscript.Quit Case -1 WScript.StdOut.WriteLine "Popup tiempo de espera agotado." Wscript.Quit End Select

23

Windows Script Technologies

_III. 44. WshNetwork Object___________

MapNetworkDrive Trabajo con unidades de red EnumNetworkDrives RemoveNetworkDrive AddPrinterConnection AddWindowsPrinterConnection Trabajo con impresoras de red EnumPrinterConnections SetDefaultPrinter RemovePrinterConnection ComputerName Obtener informacin sobre el usuario logueado UserDomain UserName

24

Windows Script Technologies

_45. Mapear Unidades de Red____________


Mapeado.
Set objNetwork = Wscript.CreateObject("WScript.Network") objNetwork.MapNetworkDrive "G:", "\\atl-fs-01\Sales" objNetwork.MapNetworkDrive "H:", "\\atl-fs-01\Users$\lewjudy"

Argumentos. Argumento LocalName RemoteName UpdateProfile UserName Password Desmapeado.

Tipo String String Boolean String String

Requerido

Set objNetwork = WScript.CreateObject("Wscript.Network") objNetwork.RemoveNetworkDrive "G:"

Lista de unidades mapeadas.


Set objNetwork = WScript.CreateObject("WScript.Network") Set colDrives = objNetwork.EnumNetworkDrives For i = 0 to colDrives.Count-1 Step 2 Wscript.Echo colDrives.Item(i) & vbTab & colDrives.Item (i + 1) Next

_46. Manejo de Impresoras de Red___________


Set objNetwork = Wscript.CreateObject("WScript.Network") Anyade una impresora (modo windows). Para hacerlo en modo DOS -> AddPrinterConnection. objNetwork.AddWindowsPrinterConnection "\\HRServer01\Printer1" Convertir la impresora en la impresora por defecto. objNetwork.SetDefaultPrinter("\\atl-ps-01\colorprinter") Listar impresoras. Set colPrinters = objNetwork.EnumPrinterConnections For i = 0 to colPrinters.Count -1 Step 2 Wscript.Echo colPrinters.Item(i) & vbTab & colPrinters.Item (i + 1) Next Quitar conexin a impresora. objNetwork.RemovePrinterConnection "\\HRServer01\Printer1"

Argumentos de RemovePrinterConnection(PrinterName, [forced], [updProfile]) PrinterName Ruta y nombre de la impresora. [forced] Desconecta la impresora aunque est en uso. [updProdile] El usuario debe ser actualizado para reflejar la desconexin.

25

Windows Script Technologies

_47. Obtener informacin del Usuario y del Equipo_______


Set objNetwork = WScript.CreateObject("WScript.Network") strUserDomain = objNetwork.UserDomain If strUserDomain = "CONTABILIDAD" Then objNetwork.MapNetworkDrive "N:", "\\fileserver01\contabilidad", True ElseIf strUserDomain = "DESARROLLO" Then objNetwork.MapNetworkDrive "N:", "\\fileserver01\desarrollo", True Else Wscript.Echo "Usuario " & objNetwork.UserName & _ "no esta en CONTABILIDAD ni en DESARROLLO. N: no mapeada." End If

26

Windows Script Technologies

_IV. 48. WshController Object____________

Requisitos: Los ordenadores objetivo y el ordenador local cuentan con WHS 5.6 Todos los ordenadores remotos deben contar con una variable Remote(REG_SZ) en HKEY_LOCAL_ MACHINE\SOFTWARE\ Microsoft\Windows Script Host\Settings con valor 1.

Instalacin de la variable en el registro.


Const HKEY_LOCAL_MACHINE = &H80000002 strComputer = "RemoteComputerName" Set objRegProv = GetObject("winmgmts:" & _ "{impersonationLevel=Impersonate}!\\" & strComputer & _ "\root\default:StdRegProv") strKeyPath = "SOFTWARE\Microsoft\Windows Script Host\Settings" objRegProv.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,"Remote","1"

27

Windows Script Technologies

_49. Ejecutar scripts en Ordenadores Remotos______


(CreateScript, Execute, Terminate)
strRemoteComputer = "RASServer01" strWorkerScript = "MapNetworkDrive.vbs" Set objWshController = WScript.CreateObject("WshController") Set objRemoteScript = _ objWshController.CreateScript(strWorkerScript, strRemoteComputer) objRemoteScript.Execute Do While Not objRemoteScript.Status = 2 Wscript.Sleep(100) Wscript.Echo "El script remoto no fue completado todava." Loop

Los scripts remotos se ejecutan en modo silencioso.

_50. Monitorizar estado de Scripts Remotos________


(Status, Start, End, Error (event)) Valores de Status El script remoto no ha comenzado an. 0 El script est ejecutndose en estos momentos. 1 2 El script ya ha finalizado.

Eventos llamados en momentos especiales Evento cuando el script comienza. Start Cuando finaliza. End Error Cuando ocurre un error. Se puede acceder a informacin con WshRemoteError.

strRemoteComputer = "RASServer01" strWorkerScript = "CreateTextFilMapNetworkDrive.vbs" Set objWshController = WScript.CreateObject("WshController") Set objRemoteScript =_ objWshController.CreateScript(strWorkerScript, strRemoteComputer) Wscript.ConnectObject objRemoteScript, "Remote_" objRemoteScript.Execute Do While Not objRemoteScript.Status = 2 Wscript.Sleep(100) Loop Sub Remote_Start Wscript.Echo "Se comienza a ejecutar el script remoto." End Sub Sub Remote_Error Wscript.Echo "Error al ejecutarse el script remoto." objRemoteScript.Terminate Wscript.Quit End Sub Sub Remote_End Wscript.Echo "Termina de ejecutarse el script remoto." End Sub

28

Windows Script Technologies

_51. Examinar Errores ocurridos en scripts Remotos____


(Error (event), Error (property), Character, Description, Line, Number, Source, SourceText) Propiedades del objeto WshRemoteError Character Devuelve la posicin del carcter en la lnea que gener el error. Description Descripcin del error Line Number Source SourceText Posicin de la lnea en la que se produjo el error. Cdigo del error asociado. Objeto COM donde se produjo el error. Contiene la lnea que produjo el error. No siempre puede mostrarse.

strRemoteComputer = "RASServer01" strWorkerScript = "CreateTestFile.vbs" Set objWshController = WScript.CreateObject("WshController") Set objRemoteScript = _ objWshController.CreateScript(strWorkerScript, strRemoteComputer) Wscript.ConnectObject objRemoteScript, "Remote_" objRemoteScript.Execute Do While Not objRemoteScript.Status = 2 Wscript.Sleep(100) Loop Sub Remote_Error Wscript.Echo "Error durante la ejecucion del script." Set objError = objRemoteScript.Error Wscript.Echo "Caracter :" & objError.Character Wscript.Echo "Descripcion :" & objError.Description Wscript.Echo "Linea :" & objError.Line Wscript.Echo "Numero :" & objError.Number Wscript.Echo "Fuente :" & objError.Source Wscript.Echo "Texto fuente :" & objError.SourceText objRemoteScript.Terminate Wscript.Quit End Sub

_52. Limitaciones de WSH Remoto______


1. No hay una forma sencilla de recibir el output del script remoto. 2. Los scripts remotos no pueden acceder a ficheros compartidos con derechos del usuario que controla el script. Para solucionar el primer problema se puede volcar el output del script a un archivo de texto.

29

You might also like