Está en la página 1de 29

Guía Rápida

Windows Script Technologies

( 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.
Windows Script Technologies

2
Windows Script Technologies

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.

3
Windows Script Technologies

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

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

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

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

7
Windows Script Technologies

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

8
Windows Script Technologies

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

9
Windows Script Technologies

_16. Otras Funciones para devolver porciones de Fecha__

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

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 > Envia la salida al archivo. Borra lo que había en


c:\scripts\services.txt él anteriormente.
cscript service_info.vbs >>
Ídem. Pero conserva lo anteriormente escrito.
c:\scripts\services.txt
cscript //nologo service_info.vbs >
Evita la copia del logo.
c:\scripts\services.txt

12
Windows Script Technologies

_I. 26. WScript Object__________________________

13
Windows Script Technologies

_27. Métodos 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 "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

15
Windows Script Technologies

_II. 31. WshShell Object___________

16
Windows Script Technologies

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

17
Windows Script Technologies

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

18
Windows Script Technologies

_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")


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


Guarda el usuario logeado
User HKCU\Environment
manteniendolo sobre reinicios
HKLM\System\CurrentControl
System Ídem pero con todos los usuarios. Set\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")

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 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\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 aplicació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.

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

22
Windows Script Technologies

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

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 información 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 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.

25
Windows Script Technologies

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

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"

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

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

29

También podría gustarte