Página 1 de 1

Mantenimiento de Hard o Software de PCS en LAN centralizado

Publicado: 30 Nov 2010, 12:50
por BasicOs
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 :smt043 :smt043 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)
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, :smt002
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
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.

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
Salu22:)