Página 1 de 1

CONSULTA SCRIPT

Publicado: 13 Ago 2012, 10:00
por LookStop
Hola,

He hecho un pequeño script que utilizo en el trabajo para conseguir información de las máquinas. Mi duda es que me gustaría que la ventana donde se introduce el nombre de usuario y contraseña no se cerrase a no ser que yo mismo la cerrase y no se como hacerlo. ¿Alguien tiene alguna idea? También os animo por si alguno tiene alguna idea de como mejorar el script.

Un saludo y gracias.

Código: Seleccionar todo

#include <GUIConstantsEx.au3>
#include <EditConstants.au3>

$strUser = "administrador" ;Declaramos el usuario administrador para la conexión.

;VENTANA GRÁFICA
;===============
$mainwindow = GUICreate("Consulta HW   v.1.1", 400, 400)

;IP NOMBRE DE EQUIPO
GUICtrlCreateLabel("Introduce IP / Nombre Equipo", 10, 30)
$strcomputer = GUICtrlCreateInput("", 200, 30, 150, 20)

;CONTRASEÑA ADMINISTRADOR
GUICtrlCreateLabel("Contraseña Admin Local", 10, 70)
$strPassword = GUICtrlCreateInput("", 200, 70, 150, 20, $ES_PASSWORD)

;BOTÓN CONECTAR
$Conectar = GUICtrlCreateButton("Conectar", 165, 120)

;PIE PROGRAMA

GUICtrlCreateLabel("Dpto. Sistemas HW 2012", 100, 370)

GUISwitch($mainwindow)
GUISetState(@SW_SHOW)

While 1
  $msg = GUIGetMsg(1)

	Select
	
		Case $msg[0] = $Conectar
		
			If Guictrlread($strcomputer) = "" Or Guictrlread($strPassword) = "" Then
				Msgbox(0, "Error", "Datos incompletos para la consulta")
			
			Else

			;Msgbox(0,"hola",Guictrlread($pass))
			;MsgBox(4096, "Este es el resultado de pulsar Salir", GUICtrlRead($datos))
			;ExitLoop

			$strcomputer = Guictrlread($strcomputer)
			$strPassword = Guictrlread($strPassword)

			$Ping = Ping($strComputer,500)

			If $Ping = "0" Then
				
			Msgbox(0,"Dpto. Sistemas HW", ".............................................................................................................................." & _
			@CRLF & "El equipo " & $strComputer & " está: DESCONECTADO" & _
			@CRLF & ".............................................................................................................................." & _
			@CRLF & "[email protected]")
			Else

			$oMyError = ObjEvent("AutoIt.Error","MyErrFunc") ;Activamos la opción de detectar errores COM - Prueba de contraseña 1/2

			$objSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")
			$objWMIService = $objSWbemLocator.ConnectServer($strComputer, "root\cimv2", $strcomputer &"\" &$strUser, $strPassword)

			;COMENZAMOS A REALIZAR CONSULTAS
			;===============================

			$colItems = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
			For $obj in $colItems
			$Userlog = $obj.UserName ;usuario logado actualmente
			$Sisname = $obj.Name ;nombre del equipo
			$ModEquipo = $obj.Model ;modelo del equipo
			Next

			$colItems = $objWMIService.ExecQuery("Select * from Win32_BIOS") 
			For $obj in $colItems 
			$Numseri = $obj.SerialNumber ;Obtenemos el numero de serie del equipo
			Next

			;CONSULTA EQUIVALENCIAS DE NÚMERO DE SERIE
			Select
			Case $ModEquipo = "0833W7L"
				$ModEquipo = "ThinkCentre M70e - 0833W7L"
			Case $ModEquipo = "0833W84"
				$ModEquipo = "ThinkCentre M70e - 0833W84"
			Case $ModEquipo = "253729G"
				$ModEquipo = "ThinkPad T410 - 253729G"
			Case $ModEquipo = "423663G"
				$ModEquipo = "ThinkPad T420 - 423663G"
			Case $ModEquipo = "4835152"
				$ModEquipo = "Kiosco"
			Case $ModEquipo = "48XXXXX"
				$ModEquipo = "Kiosco"
			Case $ModEquipo = "7360WCV"
				$ModEquipo = "ThinkCentre M58 - 7360WCV"
			Case $ModEquipo = "7627A81"
				$ModEquipo = "ThinkCentre M58 - 7627A81"
			Case $ModEquipo = "7844H9G"
				$ModEquipo = "ThinkCentre A70 - 7844H9G"
			Case $ModEquipo = "7844M5G"
				$ModEquipo = "ThinkCentre A70 - 7844M5G"
			Case $ModEquipo = "3176RT6"
				$ModEquipo = "ThinkCentre M71e - 3176RT6"
			EndSelect

			;CONSULTA DATOS DEL SISTEMA
			$colItems = $objWMIService.ExecQuery("Select * from Win32_OperatingSystem") 
			For $obj in $colItems 
			$SistOp = $obj.Caption ;Obtenemos Sistema Operativo
			$SisVer = $obj.Version ;Obtenemos la Arquitectura del Sistema Operativo
				If $SisVer = "6.1.7600" Then
					For $obj in $colItems
						$SisArq = $obj.OSArchitecture
					Next
				ElseIf $SisVer = "6.1.7601" Then
					For $obj in $colItems
						$SisArq = $obj.OSArchitecture
					Next
				Else
					$SisArq = " 32 bits"
				EndIf
			$SisServ = $obj.CSDVersion ;Obtenemos Service Pack
			Next
			If $SisServ <> "" Then ;Correccion Service Pack
			$SisServ = " - " & $SisServ
			EndIf

			;CONSULTA MEMORIA INSTALADA EN EL EQUIPO
			$i = "1"
			$strMemory = ""
			$colItems = $objWMIService.ExecQuery("Select * from Win32_PhysicalMemory")
			For $obj In $colItems
			$strMemory = $strMemory & "Slot" & $i & " : " & ($obj.Capacity / "1048576") & " Mb" & @CRLF
			$i = $i + "1"
			Next
			$colItems = $objWMIService.ExecQuery("Select * from Win32_PhysicalMemoryArray")
			For $obj in $colItems
			$totalSlots = $obj.MemoryDevices
			Next
			$installedModules = $i - "1"

			;CONSULTA ESPACIO DISCO
			$colItems = $objWMIService.ExecQuery("select * from Win32_LogicalDisk where Name = 'c:'") 
			For $obj in $colItems 
			$tdisco = $obj.Size  
			$freedisco = $obj.FreeSpace 
			Next 
			$tdisco = Round($tdisco / 1048576000)  & " GB" 
			$freedisco = Round($freedisco / 1048576000)  & " GB" 
							
			;PRESENTACIÓN DE LOS DATOS
			Msgbox(0,"Dpto. Sistemas HW 2012", ".................................................................................................." & _ 
			@CRLF & _
			@CRLF & "Nombre del Equipo: " & $Sisname & _
			@CRLF & "Estado de Red: CONECTADO" & _
			@CRLF & "IP del Equipo: " & @IPAddress1 & _
			@CRLF & "Modelo del Equipo: " & $ModEquipo & _
			@CRLF & "Número de Serie: " & $Numseri & _
			@CRLF & "Sistema Operativo: " & $SistOp & $SisArq & $SisServ & _
			@CRLF & "Usuario Logado: " & $UserLog & _
			@CRLF & _
			@CRLF & "Memoria Instalada en la Máquina: " & _
			@CRLF & "Slots Totales: " & $totalSlots & _
			@CRLF & "Slots Libres: " & ($totalSlots - $installedModules) & _
			@CRLF & _
			$strMemory & _
			@CRLF & "Disco Duro:" & _
			@CRLF & "Tamaño Disco Duro Principal: " & $tdisco & _
			@CRLF & "Espacio Libre Disco Duro Principal: " & $freedisco & _
			@CRLF & @CRLF & ".................................................................................................." & _ 
			@CRLF & "por [email protected]")

			EndIf ;Este cierra la consulta del ping

			GUIDelete()

			Func MyErrFunc() ;Devuelve un mensaje de error - Prueba de contraseña 2/2

				MsgBox(0,"Dpto. Sistemas HW 2012","Vuelva a intentarlo introduciendo la contraseña de nuevo, si vuelve a fallar, contacte con el Dpto. de Sistemas.")
				
				Local $err = $oMyError.number
				If $err = 0 Then $err = -1
				
				$g_eventerror = $err  ; to check for after this function returns
				
				Exit
			Endfunc
			
			ExitLoop
			
			EndIf ; Este cierra la comprobación de que haya texto en nombre de usuario y contraseña

		Case $msg[0] = $GUI_EVENT_CLOSE And $msg[1] = $mainwindow 

			ExitLoop
	
	EndSelect
WEnd 

Re: CONSULTA SCRIPT

Publicado: 14 Ago 2012, 02:49
por BasicOs
Puedes usar labels en el form en vez de usar el msgbox() y siempre puedes tenerla abierta,
la Func MyErrFunc() ;Devuelve un mensaje de error - Prueba de contraseña 2/2
mejor al final y separada del código

es el GUIDelete() que te cierra el formulario,

Salu22:)

Re: CONSULTA SCRIPT

Publicado: 14 Ago 2012, 09:32
por LookStop
Muchas Gracias por tu ayuda BasicOs.

Ya no se me cierra, se me había colado lo del GUIDelete haciendo pruebas.

Ahora se me queda el formulario abierto pero cuando le vuelvo a dar a consulta me sale lo de "Datos incompletos para la consulta" que es la comprobación que hago para ver que hay escritos un nombre y contraseña. ¿Como podría hacer para que se reiniciase todo para poder realizar otra consulta sin que se cerrase la ventana?

Muchas gracias por vuestra ayuda :)

Re: CONSULTA SCRIPT

Publicado: 17 Ago 2012, 01:49
por arkcrew
Buenas,

Si lo que quieres es restablecer los campos lo que tienes.que hacer es vaciar su contenido.. para ello tienes la funviom GuiCtrlSetData()

Espero que esa sea tu pregunta..

Saludos!

Re: CONSULTA SCRIPT

Publicado: 17 Ago 2012, 08:33
por LookStop
Que buena idea me has dado arkcrew para afinar el programita :)

Al final el problema lo solucione modificando esto:

Código: Seleccionar todo

$objWMIService = $objSWbemLocator.ConnectServer($strComputer, "root\cimv2", $strcomputer &"\" &$strUser, $strPassword)
Yo antes de realizar la conexión declaraba las variables $strcomputer y $strPassword y es ahí donde está el problema. Ahora en la misma conexión le indico que lea las variables con el comando Guictrlread() dejado la declaración de conexión así:

Código: Seleccionar todo

$objWMIService = $objSWbemLocator.ConnectServer(Guictrlread(strcomputer), "root\cimv2", Guictrlread(strcomputer) &"\" &$strUser, Guictrlread(strPassword))
Quiero seguir tunenado el programita y también aprender a hacer más cosas con AutoIT.

Ahora quiero declarar funciones para las distintas consultas y también poner en el GUI para elegir opciones. Una de las cosas que quiero implementar, que ya lo tengo casi visto es que te diga que impresoras tiene la máquina remota.

Ahora donde me he atascado un poco es que no se como coger la ip de un equipo remoto haciendo la consulta por su nombre en el dns. Estoy investigando el coger la ip a través del wmi, no se ¿alguien tiene alguna idea?

Gracias