Mantenimiento de Hard o Software de PCS en LAN centralizado
Publicado: 30 Nov 2010, 12:50
Esto incluye una serie de 3 programas para llevar el mantenimiento de un parque de ordenadores, controlando el hard y soft que tienen, y recuperando su información, y también accediendo por control remoto con el UltraVnc.
Se pueden incluir en el arranque de los pcs con la función facil esta: http://www.emesn.com/autoitforum/viewto ... f=4&t=2381
Mantenimiento de equipos remotos, en este caso del Soft primero y luego del Hard.Identificando las versiones de los programas instalados que nos interesen y del Hard que queremos recopilar en un fichero ini de una carpeta compartida.
Hay versiones más avanzadas, pero no personalizadas de otro soft, de pago, pero este está hecho para recopilar información concreta que nos interese no toda la que dan, si no una específica.
Hace la función de gestión de DNSs (Nombres+IPs), para redes con SERVIDOR DNS defectuoso que duplican los nombres de los pcs y así guardamos centralizado en una carpeta compartida un USUARIOS.INI Y otro fichero equipos.ini, donde tenemos la relación de estos para consultarlo con otro programa leedor de inis o con el notepad y ctrl+b.
PROGRAMA GRABADOR DE LA INFORMACIÓN DEL SOFTWARE Y USUARIO
Atención tenemos que tener el fichero winword.exe en el raiz del ejecutable si deseamos comparar la versión del usuario donde se arranca el Script, y la versión deseada (la que tenemos en el winword.exe)
Esto se suele hacer cuando, desgraciadamente, los ficheros de word no son compatibles entre diferentes ordenadores, y para identificar versiones erroneas de word en los usuarios.
Tambien identifica la versión del Internet Explorer, por ejemplo para identificar usuarios con version 6 del IE, o 7, que se necesiten actualizar a la actual,
PROGRAMA IDENTIFICADOR DE HARDWARE e IMPRESORAS
Identificamos, datos seleccionados de la lista de Jarvis como el fabricante del pc(placa), el número de serie, tamaño de discos duros, Monitores enchufados, datos de los monitores,Impresoras, Procesadores, memoria,
Usamos la librería CompInfo.au3 de JSThePatriot, y elegimos del fichero de ejemplo de la librería CompInfoExamples.au3 un subconjunto de los cientos de funciones de identificación de hardware.
Crea un fichero en el temp, para solo arrancarse una sola vez(supuestamente el hard no va a cambiar).
La libería CompInfo.au3 es una pequeña joya por la facilidad de uso, este programa es una modificación de CompInfoExamples.au3, se ha hecho simplemente borrando las lineas de los items de información que no necesitaba y añadiendo una grabación a fichero ini (La parte de Software Info se ha eliminado centradonos en parte del hardware)
Si necesitas la lista original de hardware soportado para la INFO, está en CompInfoExamples.au3 http://www.autoitscript.com/forum/topic ... info-udfs/ Créditos para BasicOs y JsPatriot de este CompInfoExamples.au3 modificado
PROGRAMA BUSCADOR DE USUARIOS Y PCS EN INI y LLAMADOR al VNC
busca en el fichero Usuarios.ini (Soft) o en Equipos.ini (Hard), para buscar usuario del pc (o ip), escribir en el box que lo pide, para usar en Equipos hay que escribir un asterisco delante para identificar el nombre del pc como *PCJUAN
También es un ejemplo de como se pueden crear bases de datos sencillitas en ficheros ini y recuperarlos, usando los separadores y marcas del ini.
La función PorVnc($vncIp) arranca el Vnc, e introduce una contraseña para gestionar el PC.
Salu22:)
Se pueden incluir en el arranque de los pcs con la función facil esta: http://www.emesn.com/autoitforum/viewto ... f=4&t=2381
Mantenimiento de equipos remotos, en este caso del Soft primero y luego del Hard.Identificando las versiones de los programas instalados que nos interesen y del Hard que queremos recopilar en un fichero ini de una carpeta compartida.
Hay versiones más avanzadas, pero no personalizadas de otro soft, de pago, pero este está hecho para recopilar información concreta que nos interese no toda la que dan, si no una específica.
Hace la función de gestión de DNSs (Nombres+IPs), para redes con SERVIDOR DNS defectuoso que duplican los nombres de los pcs y así guardamos centralizado en una carpeta compartida un USUARIOS.INI Y otro fichero equipos.ini, donde tenemos la relación de estos para consultarlo con otro programa leedor de inis o con el notepad y ctrl+b.
PROGRAMA GRABADOR DE LA INFORMACIÓN DEL SOFTWARE Y USUARIO
Código: Seleccionar todo
;Author : BasicOs de Autoit.es
#include <file.au3>
#include <Inet.au3>
;IniWrite("ipsguarda.ini","Config","DirectorioIni",@ScriptDir)
;IniWrite("ipsguarda.ini","Config","FicheroIni","Usuarios.ini")
;FileInstall("ipsguarda.ini","ipsguarda.ini")
;IniRead("ipsguarda.ini","Config","DirectorioIni",@ScriptDir)
#include <Misc.au3>
$miDirectorio = "\\servidorabierto\logs"
$UsuariosIni = "Usuarios.ini"
$EquiposIni = "Equipos.ini"
;IniRead("ipsguarda.ini","Config","FicheroIni","Usuarios.ini")
;If Not FileExists($miDirectorio & "\borrayarranca.txt") Then
; $usuario = IniRead($miDirectorio & "\ipsguarda.ini", "Config", "usuario")
; $dominio = IniRead($miDirectorio & "\ipsguarda.ini", "Config", "dominio")
; $pass = IniRead($miDirectorio & "\ipsguarda.ini", "Config", "pass")
; $programa = IniRead($miDirectorio & "\ipsguarda.ini", "Config", "programa")
; RunAs($usuario, $dominio, $pass, 0, $programa)
;EndIf
TrayTip("Unidad de Informática ", "Proceso de soporte Técnico:" & @CRLF & " Actualización del DNS ", 5) ; & $miDirectorio & "\" & $UsuariosIni para hacer debug
;;;;;;;;;; USUARIOS INI
For $I = 1 To 2
If $I = 1 Then
$IniActual = $UsuariosIni
$IniCabeza = @UserName
Else
$IniActual = $EquiposIni
$IniCabeza = @ComputerName
EndIf
$ListaIps = " Ip2: " & @IPAddress2 & " Ip3: " & @IPAddress3 & ", Ip4: " & @IPAddress4 & ",Publica: " & _GetIP()
$ListaDirs= @AppDataDir & "," & @DesktopDir & "," & @MyDocumentsDir & "," & @FavoritesDir & "," & @ProgramsDir & "," & @StartMenuDir & "," & @StartupDir & "," & @UserProfileDir & "," & @HomePath & "," & @HomeShare & "," & @TempDir & "," & @ComSpec
$datosDelSistema = @OSType & "," & @OSVersion & "," & @OSServicePack & "," & @OSBuild & ",Lengua " & @OSLang & ","& @CPUArch & "," & @DesktopHeight & "x" & @DesktopWidth & ":" & @DesktopDepth & "-" &@DesktopRefresh
$ListadeLogons = "User Profile " & @UserProfileDir & ",Usuario " & @UserName & ",@LogonDNSDomain " & @LogonDNSDomain & ",LogonDomain" & @LogonDomain & ",Log On Server" & @LogonServer
$Pword = _Iif(FileExists("C:\Archivos de programa\Microsoft Office\OFFICE11\winword.exe"), "C:\Archivos de programa\Microsoft Office\OFFICE11\winword.exe", "C:\Archivos de programa\Microsoft Office\OFFICE10\winword.exe")
IniWrite($miDirectorio & "\" & $IniActual, $IniCabeza, "Usuario", @UserName)
IniWrite($miDirectorio & "\" & $IniActual, $IniCabeza, "Equipo", @ComputerName)
IniWrite($miDirectorio & "\" & $IniActual, $IniCabeza, "Ip1", @IPAddress1)
IniWrite($miDirectorio & "\" & $IniActual, $IniCabeza, "Ips", $ListaIps)
IniWrite($miDirectorio & "\" & $IniActual, $IniCabeza, "Directorioss", $ListaDirs)
IniWrite($miDirectorio & "\" & $IniActual, $IniCabeza, "DatosdeSistema", $datosDelSistema)
IniWrite($miDirectorio & "\" & $IniActual, $IniCabeza, "ListadeLogons", $ListadeLogons)
If Not FileExists($Pword) Then
IniWrite($miDirectorio & "\" & $IniActual, $IniCabeza, "VersiónWord", "No se encuentra " & $Pword)
Else
If FileExists("winword.exe") Then
$comparaVersion = _Iif(_VersionCompare($Pword, "winword.exe") = 0, "Actualizado OK SP3", _Iif(_VersionCompare($Pword, "winword.exe") = -1, "Actualizar", "Superior a la estandar") & "( -1 winword.exe más grande:" & _VersionCompare($Pword, "winword.exe") & ")")
IniWrite($miDirectorio & "\" & $IniActual, $IniCabeza, "ComparadorVersión", _Iif(StringLeft(FileGetVersion($Pword), 2) = "10", $comparaVersion, " No compara - Version usuario: " & StringLeft(FileGetVersion($Pword), 2)))
IniWrite($miDirectorio & "\" & $IniActual, $IniCabeza, "WordVerSP3 v10", FileGetVersion("winword.exe") & " " & FileGetSize("winword.exe") & " Mb " & StringLeft(FileGetTime("winword.exe", 0, 1),6))
EndIf
$WordFileVer=FileGetVersion($Pword) & "," & FileGetSize($Pword) & " Mb, " & StringLeft(FileGetTime($Pword, 0, 1),6) & " (Ie: " &FileGetVersion("C:\Archivos de programa\Internet Explorer\iexplore.exe") &")"
IniWrite($miDirectorio & "\" & $IniActual, $IniCabeza, "Word Version de " & @UserName,$WordFileVer )
EndIf
IniWrite($miDirectorio & "\" & $IniActual, $IniCabeza, "Conectado", @HOUR & ":" & @MIN & " el dia " & @MDAY & "-" & @MON & "-" & @YEAR)
Next
;;;;;;;;;;; EQUIPOS INI
$diarioCsv="," & @ComputerName & "," & @UserName & "," & @IPAddress1 & "," & $ListaIps & ",Lista de Logons ," & $ListadeLogons & ",Sistema, " & $datosDelSistema &","& $ListaDirs
$diarioCsv=$diarioCsv & ", " & $WordFileVer
_FileWriteLog($miDirectorio & "\diario.csv", $diarioCsv)
Esto se suele hacer cuando, desgraciadamente, los ficheros de word no son compatibles entre diferentes ordenadores, y para identificar versiones erroneas de word en los usuarios.
Tambien identifica la versión del Internet Explorer, por ejemplo para identificar usuarios con version 6 del IE, o 7, que se necesiten actualizar a la actual,
PROGRAMA IDENTIFICADOR DE HARDWARE e IMPRESORAS
Identificamos, datos seleccionados de la lista de Jarvis como el fabricante del pc(placa), el número de serie, tamaño de discos duros, Monitores enchufados, datos de los monitores,Impresoras, Procesadores, memoria,
Usamos la librería CompInfo.au3 de JSThePatriot, y elegimos del fichero de ejemplo de la librería CompInfoExamples.au3 un subconjunto de los cientos de funciones de identificación de hardware.
Crea un fichero en el temp, para solo arrancarse una sola vez(supuestamente el hard no va a cambiar).
Código: Seleccionar todo
#include "CompInfo.au3" ;If you are wanting to pull WMI data from different computers then Declare $cI_CompName as the computer name before the include.
#region Header
#comments-start
Title: Computer Information Automation UDF Library for AutoIt3 - EXAMPLES
Filename: CompInfoExamples.au3
Description: Examples using the UDF's from CompInfo.au3
Author: Jarvis J. Stubblefield (JSThePatriot) http://www.vortexrevolutions.com/
Author Modified Version: BasicOs de Autoit.es
Version: 00.03.08
Last Update: 11.09.06
Requirements: AutoIt v3.2 +, Developed/Tested on WindowsXP Pro Service Pack 2
Notes: Errors associated with incorrect objects will be common user errors. AutoIt beta 3.1.1.63 has added an ObjName()
function that will be used to trap and report most of these errors.
Special thanks to Firestorm (Testing, Use), Koala (Testing, Bug Fix), and everyone else that has helped in the creation of this Example File.
#comments-end
#endregion Header
$RutadeIni="\\servidor\mislogs\logs\equipos.ini"
#include "CompInfo.au3" ;If you are wanting to pull WMI data from different computers then Declare $cI_CompName as the computer name before the include.
$hardRegistro=""
if FileExists("c:\Windows\Temp\PCregistrado.inf") then Exit
filewrite("c:\Windows\Temp\PCregistrado.inf","Registrado")
#region ---- Hardware Functions
#region -- BIOS
Dim $BIOS
_ComputerGetBIOS($BIOS)
If @error Then
$error = @error
$extended = @extended
Switch $extended
Case 1
_ErrorMsg($ERR_NO_INFO)
Case 2
_ErrorMsg($ERR_NOT_OBJ)
EndSwitch
EndIf
For $i = 1 To $BIOS[0][0] Step 1
$hardRegistro=$hardRegistro & "EQUIPO: " & @CRLF & "Manufacturer: " & $BIOS[$i][12] & @CRLF & _
"Serial Number: " & $BIOS[$i][16] & @CRLF
Next
#endregion BIOS
#region -- Drives
Dim $Drives
_ComputerGetDrives($Drives) ;Defaults to "FIXED"
If @error Then
$error = @error
$extended = @extended
Switch $extended
Case 1
_ErrorMsg("DriveGetDrive Error!")
Case 2
_ErrorMsg("DriveGetFileSystem Error!")
Case 3
_ErrorMsg("DriveGetLabel Error!")
Case 4
_ErrorMsg("DriveGetSerial Error!")
Case 5
_ErrorMsg("DriveSpaceFree Error!")
Case 6
_ErrorMsg("DriveSpaceTotal Error!")
EndSwitch
EndIf
For $i = 1 To $Drives[0][0] Step 1
$hardRegistro=$hardRegistro &"Total Space: " & Round($Drives[$i][5] / 1024, 2) & "GB" & @CRLF
Next
#endregion Drives
#region -- Monitors
Dim $Monitor
_ComputerGetMonitors($Monitor)
If @error Then
$error = @error
$extended = @extended
Switch $extended
Case 1
_ErrorMsg($ERR_NO_INFO)
Case 2
_ErrorMsg($ERR_NOT_OBJ)
EndSwitch
EndIf
For $i = 1 To $Monitor[0][0] Step 1
$hardRegistro=$hardRegistro &"Name: " & $Monitor[$i][0] & @CRLF & _
"Description: " & $Monitor[$i][4] & @CRLF & _
"MonitorManufacturer: " & $Monitor[$i][13] & @CRLF & _
"DeviceID: " & $Monitor[$i][7] & @CRLF & _
"DisplayType: " & $Monitor[$i][8] & @CRLF & _
"SystemCreationClassName: " & $Monitor[$i][24] & @CRLF
Next
#endregion Monitors
#region -- Printers
;NOTE: Printers contains alot of information, and may require a different output format.
Dim $Print
_ComputerGetPrinters($Print)
If @error Then
$error = @error
$extended = @extended
Switch $extended
Case 1
_ErrorMsg($ERR_NO_INFO)
Case 2
_ErrorMsg($ERR_NOT_OBJ)
EndSwitch
EndIf
$hardRegistro=$hardRegistro & "===== IMPRESORAS ======"
For $i = 1 To $Print[0][0] Step 1
$hardRegistro=$hardRegistro & @CRLF &"Name: " & $Print[$i][0] & @CRLF & _
"PortName: " & $Print[$i][59] & @CRLF
Next
#endregion Printers
#region -- Processors
Dim $Processors
_ComputerGetProcessors($Processors)
If @error Then
$error = @error
$extended = @extended
Switch $extended
Case 1
_ErrorMsg($ERR_NO_INFO)
Case 2
_ErrorMsg($ERR_NOT_OBJ)
EndSwitch
EndIf
For $i = 1 To $Processors[0][0] Step 1
$hardRegistro=$hardRegistro & @CRLF &"PROCESADOR " & @CRLF&"Name: " & $Processors[$i][0] & @CRLF & _
"Current Clock Speed: " & $Processors[$i][9] & @CRLF & _
"Ext Clock: " & $Processors[$i][15] & @CRLF & _
"Family: " & $Processors[$i][16] & @CRLF & _
"L2 Cache Size: " & $Processors[$i][17] & @CRLF & _
"L2 Cache Speed: " & $Processors[$i][18] & @CRLF & _
"Manufacturer: " & $Processors[$i][22] & @CRLF & _
"Max Clock Speed: " & $Processors[$i][23] & @CRLF & _
"Other Family Description: " & $Processors[$i][24] & @CRLF & _
"PNP Device ID: " & $Processors[$i][25] & @CRLF & _
"Power Management Capabilities: " & $Processors[$i][26] & @CRLF & _
"Power Management Supported: " & $Processors[$i][27] & @CRLF & _
"Processor ID: " & $Processors[$i][28] & @CRLF & _
"Processor Type: " & $Processors[$i][29] & @CRLF
Next
#endregion Processors
#region -- System
Dim $System
_ComputerGetSystem($System)
If @error Then
$error = @error
$extended = @extended
Switch $extended
Case 1
_ErrorMsg("Array contains no information.")
Case 2
_ErrorMsg("$colItems isnt an object.")
EndSwitch
EndIf
For $i = 1 To $System[0][0] Step 1
$hardRegistro=$hardRegistro & "Manufacturer: " & $System[$i][21] & @CRLF & _
"Model: " & $System[$i][22] & @CRLF & _
"Total Physical Memory: " & $System[$i][48] & @CRLF & _
"User Name: " & $System[$i][49] & @CRLF & _
"Workgroup: " & $System[$i][51]
Next
#endregion System
$hardRegistro=$hardRegistro&@CRLF&@UserName&" "&@OSType & "," & @OSVersion & "," & @OSServicePack & "," & @OSBuild & ",Lengua " & @OSLang & ","& @CPUArch
IniWrite($RutadeIni,@ComputerName,"HardWare",$hardRegistro)
;Clipput($hardRegistro)
if @UserName="Administrador" then MsgBox(0,"Hard Registro",$hardRegistro)
#region ---- Internal Functions
Func _ErrorMsg($message, $time = 0)
MsgBox(48 + 262144, "Error!", $message, $time)
EndFunc
#endregion Internal Functions
Si necesitas la lista original de hardware soportado para la INFO, está en CompInfoExamples.au3 http://www.autoitscript.com/forum/topic ... info-udfs/ Créditos para BasicOs y JsPatriot de este CompInfoExamples.au3 modificado
PROGRAMA BUSCADOR DE USUARIOS Y PCS EN INI y LLAMADOR al VNC
busca en el fichero Usuarios.ini (Soft) o en Equipos.ini (Hard), para buscar usuario del pc (o ip), escribir en el box que lo pide, para usar en Equipos hay que escribir un asterisco delante para identificar el nombre del pc como *PCJUAN
También es un ejemplo de como se pueden crear bases de datos sencillitas en ficheros ini y recuperarlos, usando los separadores y marcas del ini.
La función PorVnc($vncIp) arranca el Vnc, e introduce una contraseña para gestionar el PC.
Código: Seleccionar todo
;Author : BasicOs de Autoit.es
#include <Misc.au3>
#include <File.au3>
$UsuDefecto = "Miusuario"
If $CmdLine[0] > 0 Then $UsuDefecto = $CmdLine[1]
;Introducir la busqueda
$buscame = InputBox("Buscar Usuario", "Introduzca usuario, con [ para afinar busqueda secuencial ", $UsuDefecto)
$usu_ini = "\\servidor\logs\Usuarios.ini"
If StringLeft($buscame, 1) = "*" Then
$buscame=StringMid($buscame,2)
$usu_ini = "\\servidor\logs\Equipos.ini"
EndIf
;lee todo el ini
$lee_texto = FileRead($usu_ini)
$lee_texto = StringMid($lee_texto, StringInStr($lee_texto, $buscame))
$lee_texto = StringLeft($lee_texto, StringInStr($lee_texto, "Conectado") + 40)
$lee_texto = _Iif(StringLen(StringStripWS($lee_texto, 8)) = 0, "Cadena no encontrada", $lee_texto)
$trozoTexto = _Iif(StringLen($buscame) = 7, "Busqueda directa usuario Ip :" & IniRead($usu_ini, $buscame, "Ip1", ""), "") & @CRLF & @CRLF & "Busqueda libre del texto: " & $buscame & @CRLF & " " & $lee_texto
$trozoTexto = StringStripWS($trozoTexto, 3)
MsgBox(0, "Nombre Usuario de " & "\\servidor\logs", $trozoTexto)
If IniRead($usu_ini, $buscame, "Ip1", "") Then
porVnc(IniRead($usu_ini, $buscame, "Ip1", ""))
Else
If StringInStr($lee_texto, "]") = 8 Then
$lee_texto = StringMid($lee_texto, StringInStr($lee_texto, "=") + 1)
$lee_texto = StringLeft($lee_texto, StringInStr($lee_texto, "Ips") - 1)
porVnc($lee_texto)
EndIf
EndIf
Func PorVnc($vncIp)
TrayTip("Arranque de Vnc", "Localizando " & $vncIp, 5)
$rutaVnc = "no hay"
If FileExists("C:\Archivos de programa\RealVNC\VNC4\vncviewer.exe") Then $rutaVnc = "C:\Archivos de programa\RealVNC\VNC4\vncviewer.exe" ; ruta estandar de todos
If FileExists("C:\Archivos de programa\RealVNC\vncviewer.exe") Then $rutaVnc = "C:\Archivos de programa\RealVNC\vncviewer.exe"
If FileExists("C:\Archivos de programa\UltraVNC\vncviewer.exe") Then $rutaVnc = "C:\Archivos de programa\UltraVNC\vncviewer.exe"
ShellExecute($rutaVnc, $vncIp)
WinWait("VNC A", "")
WinActivate("VNC A", "")
If WinWaitActive("VNC A", "", 5) <> 0 Then
Send("contraVnc")
Else
MsgBox(0, "Fallo del Vnc", "Su IP : " & $vncIp & @CR)
EndIf
EndFunc ;==>PorVnc