Página 1 de 1

Capturar datos de regedit

Publicado: 23 Feb 2011, 17:55
por Chrono
Hola a todos, soy nuevo en autoit y quisiera pedirles ayuda:
Necesito capturar el contenido de una cadena en regedit de varios PC y luego guardar este dato junto con el nombre del PC y la IP de cada uno en un mismo archivo txt o lo que sea:
Por ejemplo

Cadena : HKEY_LOCAL_MACHINE\SOFTWARE\Foxit Software\Foxit Reader\PrevDefault
y necesito capturar lo que está dentro de una figura que tiene unas letras "ab", dentro del directorio PrevDefault
además del nombre del PC y la IP e ir grabando estos 3 datos de cada equipo en un mismo archivo.
es posible?

Agradeceré cualquier ayuda.

Saludos a todos

Re: Capturar datos de regedit

Publicado: 23 Feb 2011, 19:16
por BasicOs
Chrono escribió:Hola a todos, soy nuevo en autoit y quisiera pedirles ayuda:
Necesito capturar el contenido de una cadena en regedit de varios PC y luego guardar este dato junto con el nombre del PC y la IP de cada uno en un mismo archivo txt o lo que sea:
Por ejemplo

Cadena : HKEY_LOCAL_MACHINE\SOFTWARE\Foxit Software\Foxit Reader\PrevDefault
y necesito capturar lo que está dentro de una figura que tiene unas letras "ab", dentro del directorio PrevDefault
además del nombre del PC y la IP e ir grabando estos 3 datos de cada equipo en un mismo archivo.
es posible?

Agradeceré cualquier ayuda.

Saludos a todos
HOla, las funciones tienen las primeras letras por temáticas, lsa del registro son:
RegRead() para leer las claves, y las pones en un
Así sin programar solo haciendo un análisis rápido sería así, puedes comentar si te bloqueas en algún punto y cualquiera del fondo te puede responder:
While 1
if not RegRead() then exitloop
Wend
Para capturar Pixels con Pixel, o bien busca cam, o screencapture en el for.
Para grabar por ejemplo INIwrite() o tambien con File()
Busca en la ayuda en Macros y te salen variables como del sistema como @Computername o @ladireccionIpxx

Aquí hay un programa parecido que te graba las IPS y Los nombres de los pc en un fichero txt centralizado, puedes reutilizarlo o modificar lo que necesites, solo muestra los créditos por favor. :smt027

http://www.emesn.com/autoitforum/viewto ... t=IP#p9605

Salu22:)

Re: Capturar datos de regedit

Publicado: 24 Feb 2011, 09:32
por Ximorro
Hombre BasicOS, no sé qué quieres decir con ese While porque si el RegRead funciona se quedará en un bucle infinito.
Así sin programar solo haciendo un análisis rápido sería así, puedes comentar si te bloqueas en algún punto y cualquiera del fondo te puede responder:
Estaba diciendo qu era un análisis ;), no el programa. :smt002 :smt002
Jeje, son las funciones, solo con un análisis por encima, muchas veces cuesta más entender lo que alguien dice, y que la pregunta comunique lo que quiere, por eso me gusta dar algunas ideas para cogerlas al vuelo, y si no las capta, dar otra orientación.

Tu sabes que todo está en la ayuda (hasta en español está), el problema suele ser que al empezar no se conocen las funciones qu hacen tal cosa, o ni se lo imaginan que lo pueden hacer, o también al conjugar funciones con bucles.

Resumiendo son problemas de busqueda en la ayuda, y en ella se pueden pegar los ejemplitos y rellenar/personalizar con los datos de lo que se quiere crear por el creador del programa.

El programa que está hecho hace lo mismo también que el quiere, pero con alguna otra idea (intentando lo que hace un servidor DNS, guardando la lista de nombres de pcs e ips que le corresponden a través de programas en los clientes-pcs). :smt017 :smt017
Salu22:)

Re: Capturar datos de regedit

Publicado: 01 Mar 2011, 04:24
por Chrono
BasicOs escribió:
Chrono escribió:Hola a todos, soy nuevo en autoit y quisiera pedirles ayuda:
Necesito capturar el contenido de una cadena en regedit de varios PC y luego guardar este dato junto con el nombre del PC y la IP de cada uno en un mismo archivo txt o lo que sea:
Por ejemplo

Cadena : HKEY_LOCAL_MACHINE\SOFTWARE\Foxit Software\Foxit Reader\PrevDefault
y necesito capturar lo que está dentro de una figura que tiene unas letras "ab", dentro del directorio PrevDefault
además del nombre del PC y la IP e ir grabando estos 3 datos de cada equipo en un mismo archivo.
es posible?

Agradeceré cualquier ayuda.

Saludos a todos
HOla, las funciones tienen las primeras letras por temáticas, lsa del registro son:
RegRead() para leer las claves, y las pones en un
Así sin programar solo haciendo un análisis rápido sería así, puedes comentar si te bloqueas en algún punto y cualquiera del fondo te puede responder:
While 1
if not RegRead() then exitloop
Wend
Para capturar Pixels con Pixel, o bien busca cam, o screencapture en el for.
Para grabar por ejemplo INIwrite() o tambien con File()
Busca en la ayuda en Macros y te salen variables como del sistema como @Computername o @ladireccionIpxx

Aquí hay un programa parecido que te graba las IPS y Los nombres de los pc en un fichero txt centralizado, puedes reutilizarlo o modificar lo que necesites, solo muestra los créditos por favor. :smt027

http://www.emesn.com/autoitforum/viewto ... t=IP#p9605

Salu22:)
Muchas gracias por tu respuesta BasicOs, ya he conseguido capturar los datos de mi equipo en un archivo txt con este còdigo
---------------------------------
#NoTrayIcon
Opt("WintitleMatchmode",2)
$titulobloc= "Bloc de notas"
run("notepad.exe")
WinWaitActive($TituloBloc)
Send (RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Nero\Installation\Families\Nero 8", "ProductCode") & ", " &(@ComputerName ) &", "& @IPAddress1 &";"&@cr)
---------------------------------
este còdigo abre el "Block de Notas" de Windows y escribe lo que quiero, donde "HKEY..." es la ruta del Regedit, y "ProductCode" contiene el dato que quiero obtener. Esto me da este resultado:
-----------------------------------
(Product Code),(ComputerName),(IPAddress1)
Nero 8 Micro, Equipo_de_Chrono, 192.168.X.X;
------------------------
al menos ya resulta algo, ahora solo me falta ver la forma de que pueda ejecutarlo en muchos PCs y que valla guardando los datos en la linea siguiente.

Pero tengo una duda, es posible guardar estos datos en una tabla que puedo crear en SQL Server con los 3 campos?

Bueno, saludos a todos.

Re: Capturar datos de regedit

Publicado: 01 Mar 2011, 12:27
por Ximorro
Vaya, creo que ha habido algunos problemas de coordinación y mi anterior comentario se ha perdido (no pasa nada BasicOS). Lo que ves arriba con mi nombre es realmente la respuesta de BasicOS a lo que dije.
Ya no recuerdo qué cosas había, pero como ya accedes al registro sólo queda lo de acceder a otras máquinas.
Bueno, pues sobre esto te decía que RegRead puede acceder a registros de otros ordenadores. ¿Las restricciones? ¡tener permisos! Lógicamente si no hay permisos no es cosa del programa, sino de seguridad de Windows. Desde el programa se puede hacer de la siguiente manera:
RegRead("\\nombre_ordendor\HKLM\SOFTWARE\Nero\Installation\Families\Nero 8", "ProductCode")

Es decir, antes de la clave pones el nombre del PC del que quieres leer el registro.
Fíjate que puedes usar HKLM en vez de HKEY_LOCAL_MACHINE, muy conveniente.

Esto lógicamente no se ejecuta en muchos PCs, sino que así se ejecuta desde uno que mira a los demás (que tendrán que estar encendidos, claro).
Lógicamente primero tendrás que tener los nombres de PC, o los pones a mano en una lista que lees de AutoIt (que supongo puedes sacar del Active Directory) o quizás haya una manera de buscar nombres de PC por la red...
Lo de la IP me temo que tampoco sé cómo se hace, pero no creo que sea muy complicado, a ver algún forero que lo haya hecho...

Y pasarlo a base de datos, bueno, desde AutoIt habría que hacerlo en SQLite, pero teniendo por ejemplo ese TXT separado por comas lo puedes importar en Access, Excel, y seguramente cualquier gestor de base de datos que se precie es capaz de importar un texto plano con esas características. Yo por ejemplo trabajo con un sistema cuyas BD están en dBASE IV (una cosa vieja) y desde luego puedo importar archivos así y me crea una tabla en la base de datos.

Re: Capturar datos de regedit

Publicado: 13 Abr 2011, 23:30
por kemazonico
Espero te pueda servir de algo este codigo.

Captura datos variados del equipo y los inserta en una base de datos en SQL, este archivo lo coloco en todos los equipos para que en cada arranque del sistema me actualizen los datos.

Código: Seleccionar todo

#include <INet.au3>
#NoTrayIcon

$user = @UserName
$equipo = @ComputerName
$dominio = @LogonDomain
$OS = @OSVersion
$OSBuild = @OSBuild
$LocalIP = @IPAddress1
$PublicIP = _GetIP()
$avver = RegRead("HKLM\Software\Eset\Eset Security\CurrentVersion\info", "ProductVersion")
$avsign = RegRead("HKLM\Software\Eset\Eset Security\CurrentVersion\info", "ScannerVersion")
$vncver = FileGetVersion (@ProgramFilesDir & "\RealVNC\VNC4\winvnc4.exe")
$vncHex = RegRead("HKLM\Software\RealVNC\WinVNC4", "Password")
$vncpass = StringRight($vncHex, StringLen($vncHex)-2)
$inicio = @StartupCommonDir
$dateup = @MDAY & "/" & @MON & "/" & @YEAR
$timeup = @HOUR & ":" & @MIN & ":" & @SEC
$usbbloqueado = "bloqueado"
$usbdesbloqueado = "desbloqueado"
$key = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR", "Start")
$regavuser = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\ESET\ESET Security\CurrentVersion\Plugins\01000400\Profiles\@My profile", "Username")
$regavpass = RegRead ("HKEY_LOCAL_MACHINE\SOFTWARE\ESET\ESET Security\CurrentVersion\Plugins\01000400\Profiles\@My profile", "Password")

if FileExists ("c:\lshwd.bat") Then FileDelete ("c:\lshwd.bat")
Sleep (1000)

FileWrite ( "c:\lshwd.bat", "wmic bios get serialnumber >c:\serial.txt" & @CRLF)
FileWrite ( "c:\lshwd.bat", "wmic csproduct get name >c:\modelo.txt")
ShellExecuteWait ("c:\lshwd.bat", "", "", "", @SW_HIDE)
Sleep (1000)
$serial = FileReadLine ( "c:\serial.txt", 2 )
$modelo = FileReadLine ( "c:\modelo.txt", 2 )

$oMyError = ObjEvent("AutoIt.Error","oErrorConnect")

$sqlCon = ObjCreate("ADODB.Connection")
$sqlCon.Open("DRIVER={SQL Server};SERVER=192.168.1.2;DATABASE=BaseInventario;UID=admin;PWD=123;")

If @error Then
        Exit
Else
	;~ MsgBox (0, "Inventario", "la conexion fue realizada", 1)
EndIf

Func oErrorConnect()
	;Funcion no definida
   Endfunc

$rs = ObjCreate("ADODB.RecordSet")
$rs.Open("INSERT INTO SopTec(usuario) VALUES ('"& $user &"') ", $sqlCon)
Sleep (2000)

;;ACTUALIZA LOS VALORES $SERIAL y $MODELO
$rs.Open("UPDATE SopTec SET equipo= '" & $equipo & "' WHERE usuario= '"& $user & "' ", $sqlCon)
$rs.Open("UPDATE SopTec SET dominio= '" & $dominio & "' WHERE usuario= '"& $user & "' ", $sqlCon)
$rs.Open("UPDATE SopTec SET OS= '" & $OS & "' WHERE usuario= '"& $user & "' ", $sqlCon)
$rs.Open("UPDATE SopTec SET OSbuild= '" & $OSBuild & "' WHERE usuario= '"& $user & "' ", $sqlCon)
$rs.Open("UPDATE SopTec SET modelo= '" & $modelo & "' WHERE usuario= '"& $user & "' ", $sqlCon)
$rs.Open("UPDATE SopTec SET serial= '" & $serial & "' WHERE usuario= '"& $user & "' ", $sqlCon)
$rs.Open("UPDATE SopTec SET avver= '" & $avver & "' WHERE usuario= '"& $user & "' ", $sqlCon)
$rs.Open("UPDATE SopTec SET avsign= '" & $avsign & "' WHERE usuario= '"& $user & "' ", $sqlCon)
$rs.Open("UPDATE SopTec SET vncver= '" & $vncver & "' WHERE usuario= '"& $user & "' ", $sqlCon)
$rs.Open("UPDATE SopTec SET vncpass= '" & $vncpass & "' WHERE usuario= '"& $user & "' ", $sqlCon)
$rs.Open("UPDATE SopTec SET iplocal= '" & $LocalIP & "' WHERE usuario= '"& $user & "' ", $sqlCon)
$rs.Open("UPDATE SopTec SET ippublica= '" & $PublicIP & "' WHERE usuario= '"& $user & "' ", $sqlCon)
$rs.Open("UPDATE SopTec SET inicio= '" & $inicio & "' WHERE usuario= '"& $user & "' ", $sqlCon)
$rs.Open("UPDATE SopTec SET dateup= '" & $dateup & "' WHERE usuario= '"& $user & "' ", $sqlCon)
$rs.Open("UPDATE SopTec SET timeup= '" & $timeup & "' WHERE usuario= '"& $user & "' ", $sqlCon)
$rs.Open("UPDATE SopTec SET avuser= '" & $regavuser & "' WHERE usuario= '"& $user & "' ", $sqlCon)

IF $key = "" Then
		$rs.Open("UPDATE SopTec SET statusbusb= '" & $usbbloqueado & "' WHERE usuario= '"& $user & "' ", $sqlCon)
Elseif $key <> "" Then
		$rs.Open("UPDATE SopTec SET statusbusb= '" & $usbdesbloqueado & "' WHERE usuario= '"& $user & "' ", $sqlCon)
	EndIf

if $regavpass = "0x22F6CFA9AFF196F2386440AE81C82A75DB3153BC" Then
$rs.Open("UPDATE SopTec SET avpass= 'passwordantivirus' WHERE usuario= '"& $user & "' ", $sqlCon)
ElseIf $regavpass = "0x42D6AEE3EAF08EF33B6457ADC1F86C85D43153BC" Then
$rs.Open("UPDATE SopTec SET avpass= 'passwordantivirus2' WHERE usuario= '"& $user & "' ", $sqlCon)
EndIf
Si tienes alguna duda podria tratar de ayudarte con mucho gusto (yo no soy programador).

Re: Capturar datos de regedit

Publicado: 13 Abr 2011, 23:43
por Chefito
Gracias por postear el código. Seguro que a alguien le sirve. Siempre viene bien códigos que trabajen con bbdd :smt002 .

Por cierto, no creo que hayamos muchos programadores por aquí. Yo tampoco me considero programador, ya que esto para mí es un hobby. No trabajo en esto y nunca he trabajado ni ganado dinero programando. Y mis estudios son limitado. Pero como me gusta este mundillo, practico y me autodidacto :smt002 .

Saludos.

Re: Capturar datos de regedit

Publicado: 16 Abr 2011, 14:36
por BasicOs
Si en Autoit está el no usar "programadores" y usar "Scripters" pero creo que al nivel tan alto que ha llegado Autoit y al poder hacer cualquier programa que hace Visual Basic o incluso .Net, y mejorar en muchos aspectos el sistema de Microsoft, como el tamaño del ejecutable, y mil cosas más podemos llamarlos "programadores" ya que no es solo un Script que se hace para "administrar sistemas" como el Kix Script Y otros.
Otra cosa es "programador comercial" o en el mercado, aunque todos nos vendemos al existir mismos en la vida o en la red, aunque sea por otras razones más altruistas.

Si lo deseas puedes publicarlo en el Subforo de esScripts - Programas para tenerlo individualizado y si alguien desea aportar o comentar algo a tu hilo,
Salu22:)