Capturar datos de regedit

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
Chrono
Mensajes: 2
Registrado: 22 Feb 2011, 19:05

Capturar datos de regedit

Mensaje 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
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2091
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: Capturar datos de regedit

Mensaje 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:)
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Capturar datos de regedit

Mensaje 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:)
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Chrono
Mensajes: 2
Registrado: 22 Feb 2011, 19:05

Re: Capturar datos de regedit

Mensaje 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.
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Capturar datos de regedit

Mensaje 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.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
kemazonico
Aprendiz de Mago
Mensajes: 29
Registrado: 26 May 2007, 19:25

Re: Capturar datos de regedit

Mensaje 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).
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Capturar datos de regedit

Mensaje 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.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2091
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: Capturar datos de regedit

Mensaje 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:)
Responder