Guia Rapida Windows Script Technologies 1

29
Guía Rápida Guía Rápida Guía Rápida Guía Rápida Windows Script Technologies Windows Script Technologies Windows Script Technologies Windows Script Technologies ( Uno ) ( Uno ) ( Uno ) ( Uno ) Autor: José Vicente Martínez (Jovi). Industrializador de Aplicaciones. Versión: 1.0 Última modificación: 15-11-2007 Esta obra está bajo una licencia Reconocimiento-NoComercial- SinObraDerivada-2.5 España de Creative Commons. Para ver una copia de esta licencia, visite http://creativecommons.org/licenses/by-nc-nd/2.5/es o envíe una carta a Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. Usted es libre de: - Copiar, distribuir y comunicar públicamente la obra. Bajo las condiciones siguientes: - Reconocimiento. Debe reconocer los créditos 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, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. - Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos 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 compañías u organizaciones.

Transcript of Guia Rapida Windows Script Technologies 1

Page 1: Guia Rapida Windows Script Technologies 1

Guía RápidaGuía RápidaGuía RápidaGuía Rápida

Windows Script TechnologiesWindows Script TechnologiesWindows Script TechnologiesWindows Script Technologies

( Uno )( Uno )( Uno )( Uno )

Autor : José Vicente Martínez (Jovi) . Industrializador de Aplicaciones. Versión : 1.0 Última modificación : 15-11-2007 Esta obra está bajo una licencia Reconocimiento-NoComercial-SinObraDerivada-2.5 España de Creative Commons . Para ver una copia de esta licencia, visite http://creativecommons.org/licenses/by-nc-nd/2.5/es o envíe una carta a Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. Usted es libre de:

- Copiar, distribuir y comunicar públicamente la obra. Bajo las condiciones siguientes:

- Reconocimiento . Debe reconocer los créditos 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, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. - Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos 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 compañías u organizaciones.

Page 2: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

2

Page 3: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

3

o INTRODUCCIÓN - 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 Conexión Remota) - 6. Espacio libre en todos los discos (Colecciones) - 7. Lista de Unidades de Cinta (Corrección de Fallo por Lista Vacía) - 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 Intrínsecas. - 12. Conversores de Tipos. - 13. Trabajo con Fechas. - 14. Datepart. Porciones de Fecha. - 15. Datepart. Configuración de la semana del principio del año. - 16. Otras funciones para devolver porciones de Fecha. - 17. Porcentajes. - 18. Abrir Fichero y Leer línea a línea. - 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. Métodos 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 atrás. - III. 44. WshNetwork Object. - 45. Mapear Unidades de Red. - 46. Manejo de Impresoras de Red. - 47. Obtener información 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.

Page 4: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

4

Windows Script Technologies Microsoft TechNet

WSH Windows Script Host

WMI Windows Management Instrumentation

ADSI Active Directory Service Interfaces

COM Component Object Model

API 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

Page 5: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

5

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 Instanciación de Objetos: - Set objNombre

o Llamar Métodos: - ObjetoReferencia.Metodo

o Recuperar Propiedades: - ObjetoReferencia.Propiedad

_5. Espacio libre en Disco (MegaBytes)______ (Ejemplo de Variables, Constantes, Conexión 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

Page 6: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

6

_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 / CONVERS ION_FACTOR Wscript. Echo objLogicalDisk. DeviceID & " " & Int (FreeMegaBytes) Next

_7. Lista de Unidades de Cinta________________ (Ejemplo de Colección con corrección de fallo por Colección Vacia)

Set objWMIService = GetObject ( "winmgmts:" ) Set colTapeDrives = objWMIService. InstancesOf ( "Win32_TapeDrive" ) ’La propiedad Count devuelve el numero de instancia s 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

Page 7: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

7

_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 método .Clear estas siguen manteniendo su valor y puede provocar mal funcionamiento del script.

Page 8: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

8

_11. Constantes Intrinsecas______________ VbYesNo Ventana con botones Sí y No. Int=260

VbDefaultButton2 Botón por defecto activado.

VbCrLf Salto de línea.

VbTab Tabulador

VbNo No, 0, botón NO o Cancelar. Int=7

_12. Conversores de Tipos_____________ CBool 0 a False, los demás números a True

CByte

CCur Valor Común

CDate

CDbl

CInt Si la fracción es .5 redondea hacia el número par.

CLng

CSng

CStr

_13. Trabajo con Fechas_______________ Now Devuelve Fecha y Hora

Date Devuelve Fecha

Time Devuelve Hora Los valores aceptados como fechas válidas se basan en el modo de configuración de fecha y hora del sistema. La función IsDate() se puede utilizar para averiguar cuando un valor es una fecha correcta.

Page 9: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

9

_14. Datepart. Porciones de Fecha_____________ yyyy Año. Formato largo.

q Trimestre. (1,2,3,4)

m Mes.

y Día del año.

d Día del mes.

w Día de la semana. 1 Es Domingo.

ww Semana del año. (Ver configuración de la semana del año)

h Hora. (24h)

n Minuto.

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

_15. Datepart. Configuración de la semana del año_ vbUseSystem Según la configuración horaria del sistema. Int = 0

vbFirstJan1 La semana en la que está el 1 de Enero. Int = 1

vbFirstFourDays La primera semana con almenos 4 dias en Enero. Int = 2

vbFirstFullWeek La primera semana que sea enteramente de Enero. Int = 3 TestDate = "1/6/2003" Wscript. Echo TestDate Wscript. Echo "Week of Year: " & DatePart ( "ww" , TestDate) Wscript. Echo "Week of Year: " & DatePart ( "ww" , TestDate, vbFirstJan1 ) Wscript. Echo "Week of Year: " & DatePart ( "ww" , TestDate, _ vbFirstFourDays ) Wscript. Echo "Week of Year: " & DatePart ( "ww" , TestDate, _ vbFirstFullWeek )

Page 10: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

10

_16. Otras Funciones para devolver porciones de Fec ha__ Day Día de la especificada fecha.

Hour Hora.

Minute Minuto.

Month Día del año.

Second Segundo.

Weekday Día de la semana. 1 es Domingo.

Year Año. 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 línea a línea____ (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

Page 11: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

11

_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='TestPrinte r'" ) 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

Page 12: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

12

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 = 'NombreSe rvicio'" ) For Each objService in colServices errReturnCode = objService. StopService () Next

_25. Enviar Salida a Archivo__________________ cscript service_info.vbs >

c:\scripts\services.txt

Envia la salida al archivo. Borra lo que había en él anteriormente.

cscript service_info.vbs >>

c:\scripts\services.txt Ídem. Pero conserva lo anteriormente escrito.

cscript //nologo service_info.vbs >

c:\scripts\services.txt Evita la copia del logo.

Page 13: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

13

_I. 26. WScript Object__________________________

Page 14: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

14

_27. Métodos y Propiedades de los Objetos TextStrea m___

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

Page 15: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

15

_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 predefinid os___

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 "Script Full Name: " & Wscript. ScriptFullName Wscript. Echo "Script Name: " & Wscript. ScriptName Wscript. Echo "Version: " & WScript. Version Wscript. Echo "Build: " & Wscript. BuildVersion Wscript. Echo "Name: " & Wscript. Name Wscript. Echo "Full Name: " & Wscript. FullName Wscript. Echo "Path: " & Wscript. Path

Page 16: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

16

_II. 31. WshShell Object___________

Page 17: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

17

_32. Run & Exec____________________________ Ejecuta Ping.exe mediante el método 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 método 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: 0 Oculta la ventana y activa otra.

1 Activa y muestra una ventana a su tamaño y posición original.

2 Ventana minimizada.

3 Ventana maximizada.

4 Muestra una ventana copiando eñ último tamaño y posición.

5 Muestra la ventana en su posición y tamaño normal.

6 Minimiza la ventana y hace activa la ventana anterior.

7 Ventana minimizada. La ventana activa se mantiene siéndolo.

8 Muestra la ventana en el estado actual. La ventana activa no varía.

9 Activa y muestra la ventana y deja de estar maximizada o minimizada.

10 Pone la ventana en el mismo estado que el programa que la inició.

Page 18: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

18

_33. %comspec%________________________ (Especificación de Run y Exec)

%compsec% ejecuta comandos de la línea de comandos (como ‘dir’). Set objShell = WScript. CreateObject ( "WScript.Shell" ) objShell. Run( "%comspec% /K dir" ), 1, True

%comspec% /c La ventana de comandos continua abierta al finalizar el script.

%comspec% /k 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 estándar. 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)

Page 19: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

19

_35. Identificadores de Carpetas Especiales________ _

AllUsersDesktop Desktop NetHood StartMenu

AllUsersStartMenu Favorites PrintHood Startup

AllUsersPrograms Fonts Recent Templates

AllUsersStartup MyDocuments SendTo AllUsersDesktop

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 Descripción Localización

User Guarda el usuario logeado manteniendolo sobre reinicios

HKCU\Environment

System Ídem pero con todos los usuarios. HKLM\System\CurrentControlSet\Control\Session Manager\Environment

Volatile Ídem que User pero se borra al reiniciar. 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" )

Set objShell = WScript. CreateObject ( "WScript.Shell" ) strFontDirectoryPath = objShell. SpecialFolders . Item ( "Fonts" ) Wscript. Echo "Font Directory Path: " & strFontDirectoryPath

Page 20: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

20

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 Tipo de Evento

0 SUCCESS

1 ERROR

2 WARNING

4 INFORMATION

8 AUDIT_SUCCESS

16 AUDIT_FAILURE

_38. RegRead_______________________________

Set objShell = WScript. CreateObject ( "WScript.Shell" ) sngVersion = objShell. RegRead _ ( "HKLM\Software\Microsoft\WindowsNT\CurrentVersion\C urrentVersion" ) Wscript. Echo sngVersion

Set objShell = WScript. CreateObject ( "WScript.Shell" ) arrValues = objShell. RegRead _ ( "HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Se curity\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"

Page 21: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

21

_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 aplicac ión. Success = objShell. AppActivate ( "Calculadora" ) Wscript. Sleep 1000 Loop objShell. SendKeys "2"

Tecla Representación

BACKSPACE {BACKSPACE}, {BS}, or {BKSP}

BREAK {BREAK}

CAPS LOCK {CAPSLOCK}

DEL o DELETE {DELETE} o {DEL}

DOWN ARROW {DOWN}

END {END}

ENTER {ENTER} o ~

ESC {ESC}

HELP {HELP}

HOME {HOME}

INS o INSERT {INSERT} or {INS}

LEFT ARROW {LEFT}

NUM LOCK {NUMLOCK}

PAGE DOWN {PGDN}

PAGE UP {PGUP}

PRINT SCREEN {PRTSC}

RIGHT ARROW {RIGHT}

SCROLL LOCK {SCROLLLOCK}

TAB {TAB}

UP ARROW {UP}

SHIFT +

CONTROL ^

ALT %

F1, F2, … {F1}, {F2}, …

{a 10} 10 veces ‘a’. Sólo puede usarse con un único carácter.

Page 22: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

22

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 atrás____ ____

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 Constant Name Constant Value

STOP vbCritical 16

QUESTION MARK vbQuestion 32

EXCLAMATION MARK vbExclamation 48

INFORMATION vbInformation 64

Page 23: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

23

Sets de Botones. Button Set Constant Name Constant Value

OK vbOKOnly 0

OK and CANCEL vbOKCancel 1

ABORT, RETRY and IGNORE vbAbortRetryIgnore 2

YES, NO and CANCEL vbYesNoCancel 3

YES and NO vbYesNo 4

RETRY and CANCEL vbRetryCancel 5

Escoger el botón con presencia. Default Button Constant Name Constant Value

LEFT vbDefaultButton1 0

MIDDLE vbDefaultButton2 256

RIGHT vbDefaultButton3 512

Recoger el Input del usuario. Value Constant Button Clicked

1 VbOK OK

2 VbCancel Cancel

3 VbAbort Abort

4 VbRetry Retry

5 VbIgnore Ignore

6 VbYes Yes

7 VbNo 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

Page 24: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

24

_III. 44. WshNetwork Object___________

MapNetworkDrive

EnumNetworkDrives Trabajo con unidades de red

RemoveNetworkDrive

AddPrinterConnection

AddWindowsPrinterConnection

EnumPrinterConnections

SetDefaultPrinter

Trabajo con impresoras de red

RemovePrinterConnection

ComputerName

UserDomain Obtener información sobre el usuario logueado

UserName

Page 25: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

25

_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 Tipo Requerido

LocalName String RemoteName String UpdateProfile Boolean

UserName String

Password String

Desmapeado. 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 conexión 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 desconexión.

Page 26: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

26

_47. Obtener información 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 ma peada." End If

Page 27: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

27

_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.

Instalación 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"

Page 28: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

28

_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 todavía." Loop

Los scripts remotos se ejecutan en modo silencioso.

_50. Monitorizar estado de Scripts Remotos________ (Status, Start, End, Error (event))

Valores de Status

0 El script remoto no ha comenzado aún.

1 El script está ejecutándose en estos momentos.

2 El script ya ha finalizado.

Eventos llamados en momentos especiales

Start Evento cuando el script comienza.

End Cuando finaliza.

Error Cuando ocurre un error. Se puede acceder a información 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

Page 29: Guia Rapida Windows Script Technologies 1

Windows Script Technologies

29

_51. Examinar Errores ocurridos en scripts Remotos_ ___ (Error (event), Error (property), Character, Description, Line, Number, Source,

SourceText)

Propiedades del objeto WshRemoteError

Character Devuelve la posición del carácter en la línea que generó el error.

Description Descripción del error

Line Posición de la línea en la que se produjo el error.

Number Código del error asociado.

Source Objeto COM donde se produjo el error.

SourceText Contiene la línea 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.