Guia Rapida Windows Script Technologies 1
-
Upload
alexander-aranburu-cazalis -
Category
Documents
-
view
233 -
download
0
Transcript of 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.
Windows Script Technologies
2
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.
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
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
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
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.
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.
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 )
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
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
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.
Windows Script Technologies
13
_I. 26. WScript Object__________________________
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
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
Windows Script Technologies
16
_II. 31. WshShell Object___________
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ó.
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)
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
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"
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.
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
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
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
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.
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
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"
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
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.