Error Consulta WMI
Error Consulta WMI
Hola,
Tengo una consulta WMI y me gustaría que si se introduce el password de administrador de la máquina remota mal, diese algún mensaje como que ha fallado la consulta. ¿Alguien sabe como hacer para que cuando se realice la consulta y falle, de un mensaje de error indicando que ha fallado la conexión o algo al usuario?
Gracias
$strComputer = "unequipo"
$strUser = "administrador"
$strPassword = InputBox("Dpto. Sistemas", "Introduce el pass del administrador local")
$objSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")
$objWMIService = $objSWbemLocator.ConnectServer($strComputer, "root\cimv2", $strcomputer &"\" &$strUser, $strPassword)
$colItems = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For $obj in $colItems
$ModEquipo = $obj.Model ;modelo del equipo
Next
Msgbox (0,"hola","El modelo del equipo es " & $ModEquipo)
Tengo una consulta WMI y me gustaría que si se introduce el password de administrador de la máquina remota mal, diese algún mensaje como que ha fallado la consulta. ¿Alguien sabe como hacer para que cuando se realice la consulta y falle, de un mensaje de error indicando que ha fallado la conexión o algo al usuario?
Gracias
$strComputer = "unequipo"
$strUser = "administrador"
$strPassword = InputBox("Dpto. Sistemas", "Introduce el pass del administrador local")
$objSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")
$objWMIService = $objSWbemLocator.ConnectServer($strComputer, "root\cimv2", $strcomputer &"\" &$strUser, $strPassword)
$colItems = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For $obj in $colItems
$ModEquipo = $obj.Model ;modelo del equipo
Next
Msgbox (0,"hola","El modelo del equipo es " & $ModEquipo)
- chekok
- Hacker del Foro
- Mensajes: 111
- Registrado: 16 Sep 2011, 11:50
- Ubicación: Valencia / España
- Contactar:
Re: Error Consulta WMI
Prueba controlando lo que devuelve @error así:
No se si funcionará, porque no sé si el fallo de conexión devuelve 1 u otro valor, pero 1 sería lo más lógico. Tu mismo, prueba y coméntanos cual ha sido el resultado. Un saludo.
Código: Seleccionar todo
$strComputer = "unequipo"
$strUser = "administrador"
$strPassword = InputBox("Dpto. Sistemas", "Introduce el pass del administrador local")
$objSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")
$objWMIService = $objSWbemLocator.ConnectServer($strComputer, "root\cimv2", $strcomputer &"\" &$strUser, $strPassword)
If @error = 1 Then
MsgBox(0,"ERROR","Ha habido un error en la conexión")
Exit
Else
$colItems = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For $obj in $colItems
$ModEquipo = $obj.Model ;modelo del equipo
Next
Msgbox (0,"hola","El modelo del equipo es " & $ModEquipo)
EndIf
La vida es larga y dura.
Re: Error Consulta WMI
Parece como que si devuelve el valor "1", pero no muestra el mensaje.
En el Output me aparece esto:
$objWMIService = $objSWbemLocator.ConnectServer($strComputer, "root\cimv2", $strcomputer &"\" &$strUser, $strPassword)
$objWMIService = $objSWbemLocator.ConnectServer($strComputer, "root\cimv2", $strcomputer &"\" &$strUser, $strPassword)^ ERROR
>Exit code: 1 Time: 0.233
En el Output me aparece esto:
$objWMIService = $objSWbemLocator.ConnectServer($strComputer, "root\cimv2", $strcomputer &"\" &$strUser, $strPassword)
$objWMIService = $objSWbemLocator.ConnectServer($strComputer, "root\cimv2", $strcomputer &"\" &$strUser, $strPassword)^ ERROR
>Exit code: 1 Time: 0.233
- chekok
- Hacker del Foro
- Mensajes: 111
- Registrado: 16 Sep 2011, 11:50
- Ubicación: Valencia / España
- Contactar:
Re: Error Consulta WMI
Ese error es de otro tipo, tienes algún error en el código que estás utilizando en esa línea concretamente que te muestra la salida de consola.
Verifica si le estás pasando los parámetros correctamente o si los valores de las variables que usas son los correctos.
O si el parámetro espera una cadena en lugar de un número (ya sabes, si el valor va entre comillado o no).
Intercala MsgBox con la salida del valor de la variables a modo de depuración, etc. puedes probar varias cosas para encontrar donde está el fallo.
Revisa estos puntos, seguro que encuentras donde está el problema.
Verifica si le estás pasando los parámetros correctamente o si los valores de las variables que usas son los correctos.
O si el parámetro espera una cadena en lugar de un número (ya sabes, si el valor va entre comillado o no).
Intercala MsgBox con la salida del valor de la variables a modo de depuración, etc. puedes probar varias cosas para encontrar donde está el fallo.
Revisa estos puntos, seguro que encuentras donde está el problema.
La vida es larga y dura.
Re: Error Consulta WMI
A mi lo que me gustaría controlar es que cuando se introduzca mal la contraseña del administrador local y no se pueda hacer la conexión, que el programita lo notifique, que ha fallado la conexión o que la contraseña está mal introducida.
- Ximorro
- Profesional del Autoit
- Mensajes: 1500
- Registrado: 10 Jul 2009, 12:35
- Ubicación: Castellón, España
Re: Error Consulta WMI
Yo de WMI no sé prácticamente nada pero quizás sea un problema por cómo se usa el objeto.
Por ejemplo, en otros sitios cuando se pone una dirección empezando por el nombre de la máquina se empieza con "\\"
¿No será aquí igual?
Cuando pones el usuario intenta:
"\\" & $strcomputer & "\" &$strUser
Por otro lado otros ejemplos que he visto crean el objeto WMIService de esta manera:
Y luego ya se hacen directamente los ExecQuery. Naturalmente la diferencia es que aquí no se pone el password y no sé cómo se hará, pero si conoces este método de hacerlo quizás puedas modificarlo y a lo mejor es la manera de entrar a WMI desde AutoIt.
Por ejemplo, en otros sitios cuando se pone una dirección empezando por el nombre de la máquina se empieza con "\\"
¿No será aquí igual?
Cuando pones el usuario intenta:
"\\" & $strcomputer & "\" &$strUser
Por otro lado otros ejemplos que he visto crean el objeto WMIService de esta manera:
Código: Seleccionar todo
$strComputer = "."
$objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2")
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Re: Error Consulta WMI
Cuando realizas la conexión como dices es para usar las credenciales que tengas actualmente validadas en tu máquina. Para usar unas credenciales distintas, la conexión hay que hacerla de la forma que pongo. No he encontrado una forma mejor
Si el password está bien puesto, la conexión se hace correctamente a cualquier equipo dentro de una red, pero ¿que ocurre si el password que quieres usar para validarte en la máquina que quieres hacer la consulta esta mal puesto? Pues que el AutoIt da un error. Me gustaría poder presentar este error a quien este usando el programa y darle la oportunidad de volver a introducir el password para volver a intentarlo.
Muchas gracias por tu interés chekok
Si el password está bien puesto, la conexión se hace correctamente a cualquier equipo dentro de una red, pero ¿que ocurre si el password que quieres usar para validarte en la máquina que quieres hacer la consulta esta mal puesto? Pues que el AutoIt da un error. Me gustaría poder presentar este error a quien este usando el programa y darle la oportunidad de volver a introducir el password para volver a intentarlo.
Muchas gracias por tu interés chekok
- Chefito
- Profesional del Autoit
- Mensajes: 2035
- Registrado: 21 Feb 2008, 18:42
- Ubicación: Albacete/Cuenca (España)
Re: Error Consulta WMI
Utiliza ObjEvent ( "AutoIt.Error" [, "function name"] ) para tratar los errores que produce autoit a causa de los errores que pueden generar los objetos COM. Con esto puedes utilizar una función para tratar el error. Tienes varias propiedades que te indicas cosas del error (descripción, número, etc) para poder hilar mas fino y tratarlos aun mejor. Mira esta función y sus ejemplos en la ayuda y comprenderás como funciona.
Así a lo chapucerillo, te pongo un pequeño ejemplo adaptado a tu código:
He puesto demasiados msgbox . Pero quería que vieses que propiedades te devolvía ese error. Si analizas éstos, puedes mostrar un mensaje adecuado en cualquier otro tipo de error.
Otro apunte, te recomiendo que en un futuro cercano trates todos los errores que te pueda devolver autoit en algunas situaciones, como por ejemplo, en el caso de tu código, la creacción del objeto (objcreate). Mira las funciones en la ayuda. Ahí te lo pone (casi siempre @error=1 o un valor específico).
Saludos.
Así a lo chapucerillo, te pongo un pequeño ejemplo adaptado a tu código:
Código: Seleccionar todo
$strComputer = "unequipo"
$strUser = "administrador"
Global $salir=True, $seguirConObj=True
$oMyError = ObjEvent("AutoIt.Error","MyErrFunc")
$objSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")
$strPassword = InputBox("Dpto. Sistemas", "Introduce el pass del administrador local")
While $salir
$objWMIService = $objSWbemLocator.ConnectServer($strComputer, "root\cimv2", $strcomputer &"\" &$strUser, $strPassword)
If $seguirConObj Then
$colItems = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For $obj in $colItems
$ModEquipo = $obj.Model ;modelo del equipo
Next
Msgbox (0,"hola","El modelo del equipo es " & $ModEquipo)
ExitLoop
Else
$seguirConObj=True
MsgBox(0,"Error","Debe introducir el pass de nuevo")
$strPassword = InputBox("Dpto. Sistemas", "Introduce el pass del administrador local")
EndIf
WEnd
Func MyErrFunc($oError)
$seguirConObj=False
MsgBox(0,"","err.number is: " & @TAB & $oError.number & @CRLF & _
"err.windescription:" & @TAB & $oError.windescription & @CRLF & _
"err.description is: " & @TAB & $oError.description & @CRLF & _
"err.source is: " & @TAB & $oError.source & @CRLF & _
"err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
"err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
"err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
"err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
"err.retcode is: " & @TAB & $oError.retcode & @CRLF & @CRLF)
EndFunc ;==>_ErrFunc
Otro apunte, te recomiendo que en un futuro cercano trates todos los errores que te pueda devolver autoit en algunas situaciones, como por ejemplo, en el caso de tu código, la creacción del objeto (objcreate). Mira las funciones en la ayuda. Ahí te lo pone (casi siempre @error=1 o un valor específico).
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 ;).
Re: Error Consulta WMI
Muchas gracias Chefito, al final he conseguido solucionarlo con esa idea que me has dado. Eres un crack.
Solo tuve que hacer una modificación y es meter un "Exit" al final:
Func MyErrFunc($oError)
$seguirConObj=False
MsgBox(0,"","err.number is: " & @TAB & $oError.number & @CRLF & _
"err.windescription:" & @TAB & $oError.windescription & @CRLF & _
"err.description is: " & @TAB & $oError.description & @CRLF & _
"err.source is: " & @TAB & $oError.source & @CRLF & _
"err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
"err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
"err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
"err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
"err.retcode is: " & @TAB & $oError.retcode & @CRLF & @CRLF)
Exit
EndFunc ;==>_ErrFunc
Solo tuve que hacer una modificación y es meter un "Exit" al final:
Func MyErrFunc($oError)
$seguirConObj=False
MsgBox(0,"","err.number is: " & @TAB & $oError.number & @CRLF & _
"err.windescription:" & @TAB & $oError.windescription & @CRLF & _
"err.description is: " & @TAB & $oError.description & @CRLF & _
"err.source is: " & @TAB & $oError.source & @CRLF & _
"err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
"err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
"err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
"err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
"err.retcode is: " & @TAB & $oError.retcode & @CRLF & @CRLF)
Exit
EndFunc ;==>_ErrFunc