Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Proyecto AjpdSoft: Foros

AjpdSoft :: Ver tema - CPU, SO, IP, RAM con WMI y Visual Basic .Net
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information CPU, SO, IP, RAM con WMI y Visual Basic .Net

Publicar nuevo tema Responder al tema
Foros de discusión » VB.Net, C# .Net, Visual Studio .Net   
Ver tema anterior :: Ver tema siguiente
AutorMensaje
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: CPU, SO, IP, RAM con WMI y Visual Basic .Net Responder citando

Tengo una aplicación hecha en Visual Basic .Net de Visual Studio .Net 2010. Necesito desarrollar un módulo adicional para obtener los datos de los equipos de la empresa: CPU (datos del procesador como fabricante, cores, modelo), RAM (memoria RAM libre y ocupada, memoria virtual), Red (adaptador de red, IPs), sistema operativo (versión, nombre, service pack), datos del usuario, datos del dominio, etc. He estado investigando un poco y necesito hacerlo de forma automática sin instalar nada en los equipos.

Todos los equipos de mi red pertenecen y están agregados a un dominio, todos con Windows XP, Windows Vista, Windows 7 y servidores con Windows Server 2000, Windows Server 2003 y Windows Server 2008. Necesito poder obtener los datos de los equipos desde uno de ellos, sin necesidad de molestar al usuario ni de tener que instalar software en los equipos pues tengo más de 100 y sería imposible.

He investigado un poco y he visto que mediante WMI se puede hacer esto pero no tengo ni idea de por dónde empezar. Agradezco cualquier ayuda.
MensajePublicado:
Jue Jun 28, 2012 8:53 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: CPU, SO, IP, RAM con WMI y Visual Basic .Net Responder citando



Anuncios



varios escribió:
Tengo una aplicación hecha en Visual Basic .Net de Visual Studio .Net 2010. Necesito desarrollar un módulo adicional para obtener los datos de los equipos de la empresa: CPU (datos del procesador como fabricante, cores, modelo), RAM (memoria RAM libre y ocupada, memoria virtual), Red (adaptador de red, IPs), sistema operativo (versión, nombre, service pack), datos del usuario, datos del dominio, etc. He estado investigando un poco y necesito hacerlo de forma automática sin instalar nada en los equipos.

Todos los equipos de mi red pertenecen y están agregados a un dominio, todos con Windows XP, Windows Vista, Windows 7 y servidores con Windows Server 2000, Windows Server 2003 y Windows Server 2008. Necesito poder obtener los datos de los equipos desde uno de ellos, sin necesidad de molestar al usuario ni de tener que instalar software en los equipos pues tengo más de 100 y sería imposible.

He investigado un poco y he visto que mediante WMI se puede hacer esto pero no tengo ni idea de por dónde empezar. Agradezco cualquier ayuda.


Sí es posible obtener los datos del equipo con WMI (Windows Management Intrumentation) y si tienes los equipos agregados a un dominio será más sencillo aún en cuanto a permisos se refiere.

A continuación te mostramos todo el código para una aplicación que estamos desarrollando precisamente para obtener los datos del equipo, actualmente esta aplicación está en desarrollo, la idea es que los guarde en base de datos para su posterior consulta y tratamiento. De momento sólo los muestra en pantalla, pero te servirá como ejemplo de uso de WMI con Visual Basic .Net VB.Net:

Código:

Imports System.Management

Public Class formInfoPCWMI

    Dim opcionesConexionPCRemoto As ConnectionOptions = New ConnectionOptions
    Dim objWMI As ManagementScope

    Private Function conectarWMI(ByVal usuario As String,
                            ByVal contrasena As String,
                            ByVal dominio As String,
                            ByVal equipo As String,
                            ByVal espacioNombres As String) As Boolean
        Try
            Dim strNameSpace As String

            If opEquipoRemoto.Checked Then
                strNameSpace = "\\" & equipo & "\" & espacioNombres
                opcionesConexionPCRemoto.Username = usuario
                opcionesConexionPCRemoto.Password = contrasena

                If dominio = "" Then
                    opcionesConexionPCRemoto.EnablePrivileges = True
                    opcionesConexionPCRemoto.Impersonation = ImpersonationLevel.Impersonate
                    opcionesConexionPCRemoto.Authentication = AuthenticationLevel.Packet
                Else
                    opcionesConexionPCRemoto.Authority = "ntlmdomain:" & dominio
                End If

                objWMI = New ManagementScope(strNameSpace, opcionesConexionPCRemoto)
            Else
                strNameSpace = "\\.\" & espacioNombres
                objWMI = New ManagementScope(strNameSpace)
            End If
            objWMI.Connect()
            Return True
        Catch errorN As Exception
            txtLog.Text = txtLog.Text & System.Environment.NewLine &
               Now & " Error al conectar al equipo: " & errorN.Message
            MessageBox.Show("Error al obtener datos del equipo: " &
                            errorN.Message, "Error al conectar a equipo",
                            MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return False
        End Try
    End Function

    Private Function obtenerValorWMI(ByVal clase As String,
                                     ByVal propiedad As String,
                                     ByVal filtro As String) As String
        Try
            Dim consultaSQL As String
            Dim valorObtenido As String
            consultaSQL = "SELECT " & propiedad & " FROM " & clase
            If filtro <> "" Then
                consultaSQL = consultaSQL & " WHERE " + filtro
            End If
            Dim objConsultaSQL As New ObjectQuery(consultaSQL)
            Dim objObtenido As New ManagementObjectSearcher(objWMI, objConsultaSQL)
            valorObtenido = ""
            For Each objActualMOS As ManagementObject In objObtenido.Get()
                Try
                    'Si en vez de un valor string es un array (por ejemplo con IPAdress)
                    If IsArray(objActualMOS.GetPropertyValue(propiedad)) Then
                        For Each listaValores In objActualMOS.GetPropertyValue(propiedad)
                            If valorObtenido <> "" Then
                                valorObtenido = valorObtenido & " " & _
                                    listaValores.ToString()
                            Else
                                valorObtenido = listaValores.ToString()
                            End If
                        Next
                    Else
                        If valorObtenido <> "" Then
                            valorObtenido = valorObtenido & " " & _
                                objActualMOS.GetPropertyValue(propiedad).ToString()
                        Else
                            valorObtenido =
                                objActualMOS.GetPropertyValue(propiedad).ToString()
                        End If
                    End If
                Catch errorN As Exception
                    txtLog.Text = txtLog.Text & System.Environment.NewLine &
                       Now & " Error al obtener propiedad WMI [" & propiedad & "]: " &
                                    errorN.Message
                End Try
            Next
            Return valorObtenido
        Catch errorN As Exception
            txtLog.Text = txtLog.Text & System.Environment.NewLine &
               Now & " Error al obtener propiedad WMI: " &
                            errorN.Message
            Return ""
        End Try
    End Function


    Private Function obtenerDatosRedWMI() As String
        Try


            '  objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
            '  colItems = objWMI.ExecQuery _
            '      ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")

            '            For Each objItem In colItems
            '
            '            arrIPAddresses = objItem.IPAddress
            '            For Each strAddress In arrIPAddresses
            ' If strAddress = strTargetAddress Then
            ' strMACAddress = objItem.MacAddress
            ' End If
            ' Next
            ' Next



            Dim consultaSQL As String
            Dim valorObtenido As String = ""
            Dim objIPs As ManagementObject
            consultaSQL = "Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True"
            Dim objConsultaSQL As New ObjectQuery(consultaSQL)
            Dim objObtenido As New ManagementObjectSearcher(objWMI, objConsultaSQL)
            For Each objIPs In objObtenido.Get
                valorObtenido = valorObtenido & " " & objIPs("IPAddress")(0)
            Next

            Return valorObtenido
        Catch errorN As Exception
            txtLog.Text = txtLog.Text & System.Environment.NewLine &
               Now & " Error al obtener propiedad WMI: " &
                            errorN.Message
            Return ""
        End Try
    End Function

    Private Function obtenerPropiedadWMI(ByVal clase As String,
                                         ByVal propiedad As String,
                                         ByVal filtro As String) As String
        Return obtenerValorWMI(clase, propiedad, filtro)
    End Function


    Private Function sumarValoresWMI(ByVal valor As String, ByRef numero As Integer) As String
        'el valor de WMI obtendrá un número por cada item
        'separado con un espacio
        Try
            Dim total As Double = 0
            Dim arrayPalabras() As String, i As Integer
            arrayPalabras = Split(valor, " ")
            numero = 0
            For i = 0 To UBound(arrayPalabras)
                numero = numero + 1
                total = total + Convert.ToDouble(arrayPalabras(i))
            Next i
            Return CStr(total / 1024 / 1024)
        Catch errorN As Exception
            txtLog.Text = txtLog.Text & System.Environment.NewLine &
               Now & " Error al obtener valor numérico: " &
                            errorN.Message
            numero = 0
            Return ""
        End Try
    End Function

    Private Sub btObtenerInformacionPCWMI_Click(sender As System.Object, e As System.EventArgs) Handles btObtenerInformacionPCWMI.Click
        Dim valor As String = ""
        Dim numero As Integer = 0
        Dim informacionWMIPC As String = ""

        If conectarWMI(txtUsuario.Text, txtContrasena.Text,
                       txtDominio.Text, txtEquipo.Text, "root\CIMV2") Then
            Try
                'Placa base
                informacionWMIPC = "----PLACA BASE-----------" & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_BaseBoard", "Manufacturer", "")
                txtPlacaBaseFabricante.Text = valor
                informacionWMIPC = informacionWMIPC & "Fabricante: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_BaseBoard", "Product", "")
                txtPlacaBaseIDProducto.Text = valor
                informacionWMIPC = informacionWMIPC & "Producto: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_BaseBoard", "SerialNumber", "")
                txtPlacaBaseNumeroSerie.Text = valor
                informacionWMIPC = informacionWMIPC & "Serie: " & valor & Environment.NewLine

                'BIOS
                informacionWMIPC = informacionWMIPC & Environment.NewLine & Environment.NewLine &
                    "----BIOS-----------" & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_BIOS", "Manufacturer", "")
                txtBIOSFabricante.Text = valor
                informacionWMIPC = informacionWMIPC & "Fabricante: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_BIOS", "Version", "")
                txtBIOSVersion.Text = valor
                informacionWMIPC = informacionWMIPC & "Versión: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_BIOS", "ReleaseDate", "")
                txtBIOSFecha.Text = valor
                informacionWMIPC = informacionWMIPC & "Fecha: " & valor & Environment.NewLine

                'Sistema operativo
                informacionWMIPC = informacionWMIPC & Environment.NewLine & Environment.NewLine &
                    "----Sistema operativo-----------" & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_OperatingSystem", "Caption", "")
                txtSO.Text = valor
                informacionWMIPC = informacionWMIPC & "SO: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_OperatingSystem", "Version", "")
                txtSOVersion.Text = valor
                informacionWMIPC = informacionWMIPC & "Versión: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_OperatingSystem", "ServicePackMajorVersion", "")
                valor = valor & "." & obtenerPropiedadWMI("Win32_OperatingSystem", "ServicePackMinorVersion", "")
                txtSOServicePack.Text = valor
                informacionWMIPC = informacionWMIPC & "Service Pack: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_OperatingSystem", "InstallDate", "")
                txtSOFecha.Text = valor
                informacionWMIPC = informacionWMIPC & "Fecha: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_OperatingSystem", "OSArchitecture", "")
                txtSOArquitectura.Text = valor
                informacionWMIPC = informacionWMIPC & "Arquitectura: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_OperatingSystem", "WindowsDirectory", "")
                txtSOCarpeta.Text = valor
                informacionWMIPC = informacionWMIPC & "Carpeta: " & valor & Environment.NewLine

                'Memoria RAM y virtual
                informacionWMIPC = informacionWMIPC & Environment.NewLine & Environment.NewLine &
                    "----Memoria-----------" & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_PhysicalMemory", "Capacity", "")
                valor = sumarValoresWMI(valor, numero)
                txtMemoriaRAMTotal.Text = valor
                informacionWMIPC = informacionWMIPC & "RAM física total: " & valor & Environment.NewLine
                txtMemoriaRAMSlot.Text = Convert.ToString(numero)
                informacionWMIPC = informacionWMIPC & "Nº slot: " &
                    Convert.ToString(numero) & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_OperatingSystem", "FreePhysicalMemory", "")
                If valor <> "" Then
                    txtMemoriaRAMLibre.Text =
                        Convert.ToString(Math.Truncate(Convert.ToDouble(valor) / 1024))
                    informacionWMIPC =
                        informacionWMIPC & "RAM libre: " &
                        Convert.ToString(Math.Truncate(Convert.ToDouble(valor) / 1024)) &
                        Environment.NewLine
                Else
                    txtMemoriaRAMLibre.Text = ""
                    informacionWMIPC =
                        informacionWMIPC & "RAM libre: --" &
                        Environment.NewLine
                End If
                valor = obtenerPropiedadWMI("Win32_OperatingSystem", "TotalVirtualMemorySize", "")
                If valor <> "" Then
                    txtMemoriaVirtualTotal.Text =
                        Convert.ToString(Math.Truncate(Convert.ToDouble(valor) / 1024))
                    informacionWMIPC = informacionWMIPC & "Memoria virtual total: " &
                        Convert.ToString(Math.Truncate(Convert.ToDouble(valor) / 1024))
                Else
                    txtMemoriaVirtualTotal.Text =
                        Convert.ToString(Math.Truncate(Convert.ToDouble(valor) / 1024))
                    informacionWMIPC = informacionWMIPC & "Memoria virtual total: --"
                End If

                'Procesador
                informacionWMIPC = informacionWMIPC & Environment.NewLine & Environment.NewLine &
                    "----Procesador-----------" & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_Processor", "Name", "")
                txtCPUNombre.Text = valor
                informacionWMIPC = informacionWMIPC & "Nombre: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_ComputerSystem", "NumberOfProcessors", "")
                txtCPUNumero.Text = valor
                informacionWMIPC = informacionWMIPC & "Nº físicos: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_Processor", "NumberOfCores", "")
                txtCPUCores.Text = valor
                informacionWMIPC = informacionWMIPC & "Nº Cores: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_Processor", "NumberOfLogicalProcessors", "")
                txtCPUNumeroLogicos.Text = valor
                informacionWMIPC = informacionWMIPC & "Nº lógicos: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_Processor", "Manufacturer", "")
                txtCPUFabricante.Text = valor
                informacionWMIPC = informacionWMIPC & "Fabricante: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_Processor", "MaxClockSpeed", "")
                txtCPUVelocidad.Text = valor
                informacionWMIPC = informacionWMIPC & "Velocidad: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_Processor", "Architecture", "")
                Select Case valor
                    Case 0
                        valor = "x86"
                    Case 1
                        valor = "MIPS"
                    Case 2
                        valor = "Alpha"
                    Case 3
                        valor = "PowerPC"
                    Case 6
                        valor = "Itanium-based systems"
                    Case 9
                        valor = "x64"
                    Case Else
                        valor = valor & " Desconocida"
                End Select
                txtCPUArquitectura.Text = valor
                informacionWMIPC = informacionWMIPC & "Arquitectura: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_Processor", "Family", "")
                txtCPUFamilia.Text = valor
                informacionWMIPC = informacionWMIPC & "Familia: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_Processor", "Description", "")
                txtCPUDescripcion.Text = valor
                informacionWMIPC = informacionWMIPC & "Descripción: " & valor

                'Red
                informacionWMIPC = informacionWMIPC & Environment.NewLine & Environment.NewLine &
                    "----Red-----------" & Environment.NewLine
                'valor = obtenerDatosRedWMI()
                valor = obtenerPropiedadWMI("Win32_NetworkAdapterConfiguration", "IPAddress", "IPEnabled = True")
                txtRedIP.Text = valor
                informacionWMIPC = informacionWMIPC & "IP: " & valor & Environment.NewLine
            Catch errorN As Exception
                txtLog.Text = txtLog.Text & System.Environment.NewLine &
                   Now & " Error: " & errorN.Message
            End Try
        End If

        txtInfoPC.Text = informacionWMIPC
    End Sub

End Class
MensajePublicado:
Jue Jun 28, 2012 8:57 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: CPU, SO, IP, RAM con WMI y Visual Basic .Net Responder citando



Anuncios



En breve publicaremos esta aplicación con su código fuente en VB.Net correspondiente, como siempre gratuito.
MensajePublicado:
Jue Jun 28, 2012 8:58 pm
Top of PageVer perfil de usuario
zake
Usuario


Registrado: Aug 28, 2013
Mensajes: 1

Asunto: Re: CPU, SO, IP, RAM con WMI y Visual Basic .Net Responder citando



Anuncios



alonsojpd escribió:
En breve publicaremos esta aplicación con su código fuente en VB.Net correspondiente, como siempre gratuito.


Hola! me interesa mucho el funcionamiento de esta aplicacion, si no es mucha molestia me podrias pasar un ejemplo, porque trate de implementar el codigo que colocaste anteriormente pero genera muchos errores.

mi correo es zukezake@gmail.com

Gracias de antemano, saludos!
MensajePublicado:
Mie Ago 28, 2013 7:16 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: CPU, SO, IP, RAM con WMI y Visual Basic .Net Responder citando



Anuncios



zake escribió:
alonsojpd escribió:
En breve publicaremos esta aplicación con su código fuente en VB.Net correspondiente, como siempre gratuito.


Hola! me interesa mucho el funcionamiento de esta aplicacion, si no es mucha molestia me podrias pasar un ejemplo, porque trate de implementar el codigo que colocaste anteriormente pero genera muchos errores.
Gracias de antemano, saludos!


Hola Zake, hemos añadido la descarga gratuita del código fuente completo de la aplicación AjpdSoft Información PC WMI, teniendo en cuenta que es uan versión beta que funciona pero no está finalizada:

AjpdSoft Información PC WMI en VB.Net

Dicha aplicación en Visual Basic .Net de Visual Studio .Net 2010 no obtiene, por ejemplo, datos específicicos de muchos array como procesos, servicios, tarjetas de vídeo, discos, volúmenes, etc. Estos datos se obtienen haciendo el correspondiente filtro WMI (WQL) y obteniendo los objetos correspondientes que luego se recorrerán con un for each, por ejemplo, para obtener:

Código:

Set colDisks = objWMIService.ExecQuery ("Select * from Win32_LogicalDisk")
For Each objDisk in colDisks
    Console.Write "DeviceID: " & objDisk.DeviceID 
    Wscript.Echo "File System: " & objDisk.FileSystem
Next
MensajePublicado:
Jue Ago 29, 2013 12:00 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: CPU, SO, IP, RAM con WMI y Visual Basic .Net Responder citando



Anuncios



El código completo de la versión actual que obtiene más datos mediante WMI:

Código:

Imports System.Management

Public Class formInfoPCWMI

    Dim opcionesConexionPCRemoto As ConnectionOptions = New ConnectionOptions
    Dim objWMI As ManagementScope

    Private Function conectarWMI(ByVal usuario As String,
                            ByVal contrasena As String,
                            ByVal dominio As String,
                            ByVal equipo As String,
                            ByVal espacioNombres As String) As Boolean
        Try
            Dim strNameSpace As String

            If opEquipoRemoto.Checked Then
                strNameSpace = "\\" & equipo & "\" & espacioNombres
                opcionesConexionPCRemoto.Username = usuario
                opcionesConexionPCRemoto.Password = contrasena

                If dominio = "" Then
                    opcionesConexionPCRemoto.EnablePrivileges = True
                    opcionesConexionPCRemoto.Impersonation = ImpersonationLevel.Impersonate
                    opcionesConexionPCRemoto.Authentication = AuthenticationLevel.Packet
                Else
                    opcionesConexionPCRemoto.Authority = "ntlmdomain:" & dominio
                End If

                objWMI = New ManagementScope(strNameSpace, opcionesConexionPCRemoto)
            Else
                strNameSpace = "\\.\" & espacioNombres
                objWMI = New ManagementScope(strNameSpace)
            End If
            objWMI.Connect()
            Return True
        Catch errorN As Exception
            txtLog.Text = txtLog.Text & System.Environment.NewLine &
               Now & " Error al conectar al equipo: " & errorN.Message
            MessageBox.Show("Error al obtener datos del equipo: " &
                            errorN.Message, "Error al conectar a equipo",
                            MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return False
        End Try
    End Function

    Private Function obtenerValorWMI(ByVal clase As String,
                                     ByVal propiedad As String,
                                     ByVal filtro As String) As String
        Try
            Dim consultaSQL As String
            Dim valorObtenido As String
            consultaSQL = "SELECT " & propiedad & " FROM " & clase
            If filtro <> "" Then
                consultaSQL = consultaSQL & " WHERE " + filtro
            End If
            Dim objConsultaSQL As New ObjectQuery(consultaSQL)
            Dim objObtenido As New ManagementObjectSearcher(objWMI, objConsultaSQL)
            valorObtenido = ""
            For Each objActualMOS As ManagementObject In objObtenido.Get()
                Try
                    'Si en vez de un valor string es un array (por ejemplo con IPAdress)
                    If IsArray(objActualMOS.GetPropertyValue(propiedad)) Then
                        For Each listaValores In objActualMOS.GetPropertyValue(propiedad)
                            If valorObtenido <> "" Then
                                valorObtenido = valorObtenido & " " & _
                                    listaValores.ToString()
                            Else
                                valorObtenido = listaValores.ToString()
                            End If
                        Next
                    Else
                        If valorObtenido <> "" Then
                            valorObtenido = valorObtenido & " " & _
                                objActualMOS.GetPropertyValue(propiedad).ToString()
                        Else
                            valorObtenido =
                                objActualMOS.GetPropertyValue(propiedad).ToString()
                        End If
                    End If
                Catch errorN As Exception
                    txtLog.Text = txtLog.Text & System.Environment.NewLine &
                       Now & " Error al obtener propiedad WMI [" & propiedad & "]: " &
                                    errorN.Message
                End Try
            Next
            Return valorObtenido
        Catch errorN As Exception
            txtLog.Text = txtLog.Text & System.Environment.NewLine &
               Now & " Error al obtener propiedad WMI: " &
                            errorN.Message
            Return ""
        End Try
    End Function


    Private Function obtenerPropiedadWMI(ByVal clase As String,
                                         ByVal propiedad As String,
                                         ByVal filtro As String) As String
        Return obtenerValorWMI(clase, propiedad, filtro)
    End Function


    Private Function sumarValoresWMI(ByVal valor As String, ByRef numero As Integer) As String
        'el valor de WMI obtendrá un número por cada item
        'separado con un espacio
        Try
            Dim total As Double = 0
            Dim arrayPalabras() As String, i As Integer
            arrayPalabras = Split(valor, " ")
            numero = 0
            For i = 0 To UBound(arrayPalabras)
                numero = numero + 1
                total = total + Convert.ToDouble(arrayPalabras(i))
            Next i
            Return CStr(total / 1024 / 1024)
        Catch errorN As Exception
            txtLog.Text = txtLog.Text & System.Environment.NewLine &
               Now & " Error al obtener valor numérico: " &
                            errorN.Message
            numero = 0
            Return ""
        End Try
    End Function

    Private Sub btObtenerInformacionPCWMI_Click(sender As System.Object,
                    e As System.EventArgs) Handles btObtenerInformacionPCWMI.Click
        Dim valor As String = ""
        Dim numero As Integer = 0
        Dim informacionWMIPC As String = ""

        If conectarWMI(txtUsuario.Text, txtContrasena.Text,
                       txtDominio.Text, txtEquipo.Text, "root\CIMV2") Then
            Try
                'Placa base
                informacionWMIPC = "----PLACA BASE-----------" & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_BaseBoard", "Manufacturer", "")
                txtPlacaBaseFabricante.Text = valor
                informacionWMIPC = informacionWMIPC & "Fabricante: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_BaseBoard", "Product", "")
                txtPlacaBaseIDProducto.Text = valor
                informacionWMIPC = informacionWMIPC & "Producto: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_BaseBoard", "SerialNumber", "")
                txtPlacaBaseNumeroSerie.Text = valor
                informacionWMIPC = informacionWMIPC & "Serie: " & valor & Environment.NewLine

                'BIOS
                informacionWMIPC = informacionWMIPC & Environment.NewLine & Environment.NewLine &
                    "----BIOS-----------" & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_BIOS", "Manufacturer", "")
                txtBIOSFabricante.Text = valor
                informacionWMIPC = informacionWMIPC & "Fabricante: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_BIOS", "Version", "")
                txtBIOSVersion.Text = valor
                informacionWMIPC = informacionWMIPC & "Versión: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_BIOS", "ReleaseDate", "")
                txtBIOSFecha.Text = valor
                informacionWMIPC = informacionWMIPC & "Fecha: " & valor & Environment.NewLine

                'Memoria RAM y virtual
                informacionWMIPC = informacionWMIPC & Environment.NewLine & Environment.NewLine &
                    "----MEMORIA-----------" & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_PhysicalMemory", "Capacity", "")
                valor = sumarValoresWMI(valor, numero)
                txtMemoriaRAMTotal.Text = valor
                informacionWMIPC = informacionWMIPC & "RAM física total: " & valor & Environment.NewLine
                txtMemoriaRAMSlot.Text = Convert.ToString(numero)
                informacionWMIPC = informacionWMIPC & "Nº slot: " &
                    Convert.ToString(numero) & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_OperatingSystem", "FreePhysicalMemory", "")
                If valor <> "" Then
                    txtMemoriaRAMLibre.Text =
                        Convert.ToString(Math.Truncate(Convert.ToDouble(valor) / 1024))
                    informacionWMIPC =
                        informacionWMIPC & "RAM libre: " &
                        Convert.ToString(Math.Truncate(Convert.ToDouble(valor) / 1024)) &
                        Environment.NewLine
                Else
                    txtMemoriaRAMLibre.Text = ""
                    informacionWMIPC =
                        informacionWMIPC & "RAM libre: --" &
                        Environment.NewLine
                End If
                valor = obtenerPropiedadWMI("Win32_OperatingSystem", "TotalVirtualMemorySize", "")
                If valor <> "" Then
                    txtMemoriaVirtualTotal.Text =
                        Convert.ToString(Math.Truncate(Convert.ToDouble(valor) / 1024))
                    informacionWMIPC = informacionWMIPC & "Memoria virtual total: " &
                        Convert.ToString(Math.Truncate(Convert.ToDouble(valor) / 1024))
                Else
                    txtMemoriaVirtualTotal.Text =
                        Convert.ToString(Math.Truncate(Convert.ToDouble(valor) / 1024))
                    informacionWMIPC = informacionWMIPC & "Memoria virtual total: --"
                End If

                'Procesador
                informacionWMIPC = informacionWMIPC & Environment.NewLine & Environment.NewLine &
                    "----PROCESADOR-----------" & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_Processor", "Name", "")
                txtCPUNombre.Text = valor
                informacionWMIPC = informacionWMIPC & "Nombre: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_ComputerSystem", "NumberOfProcessors", "")
                txtCPUNumero.Text = valor
                informacionWMIPC = informacionWMIPC & "Nº físicos: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_Processor", "NumberOfCores", "")
                txtCPUCores.Text = valor
                informacionWMIPC = informacionWMIPC & "Nº Cores: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_Processor", "NumberOfLogicalProcessors", "")
                txtCPUNumeroLogicos.Text = valor
                informacionWMIPC = informacionWMIPC & "Nº lógicos: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_Processor", "Manufacturer", "")
                txtCPUFabricante.Text = valor
                informacionWMIPC = informacionWMIPC & "Fabricante: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_Processor", "MaxClockSpeed", "")
                txtCPUVelocidad.Text = valor
                informacionWMIPC = informacionWMIPC & "Velocidad: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_Processor", "Architecture", "")
                Select Case valor
                    Case 0
                        valor = "x86"
                    Case 1
                        valor = "MIPS"
                    Case 2
                        valor = "Alpha"
                    Case 3
                        valor = "PowerPC"
                    Case 6
                        valor = "Itanium-based systems"
                    Case 9
                        valor = "x64"
                    Case Else
                        valor = valor & " Desconocida"
                End Select
                txtCPUArquitectura.Text = valor
                informacionWMIPC = informacionWMIPC & "Arquitectura: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_Processor", "Family", "")
                txtCPUFamilia.Text = valor
                informacionWMIPC = informacionWMIPC & "Familia: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_Processor", "Description", "")
                txtCPUDescripcion.Text = valor
                informacionWMIPC = informacionWMIPC & "Descripción: " & valor


                'Tarjetas de video
                informacionWMIPC = informacionWMIPC & Environment.NewLine & Environment.NewLine &
                    "----TARJETAS DE VIDEO-----------" & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_VideoController", "Caption", "")
                txtHardwareTarjetasVideo.Text = valor
                informacionWMIPC = informacionWMIPC & "Tarjetas de vídeo: " & valor & Environment.NewLine


                'Discos duros
                informacionWMIPC = informacionWMIPC & Environment.NewLine & Environment.NewLine &
                    "----DISCOS DUROS-----------" & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_LogicalDisk", "Caption", "")
                valor = valor + Environment.NewLine +
                    obtenerPropiedadWMI("Win32_LogicalDisk", "Description", "")
                valor = valor + Environment.NewLine +
                    obtenerPropiedadWMI("Win32_LogicalDisk", "DriveType", "")
                txtDiscosDuros.Text = valor
                informacionWMIPC = informacionWMIPC & "Discos duros: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_Volume", "Caption", "")
                txtDiscosDurosVolumenes.Text = valor
                informacionWMIPC = informacionWMIPC & "Volúmenes: " & valor & Environment.NewLine

                'Sistema operativo
                informacionWMIPC = informacionWMIPC & Environment.NewLine & Environment.NewLine &
                    "----SISTEMA OPERATIVO-----------" & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_OperatingSystem", "Caption", "")
                txtSO.Text = valor
                informacionWMIPC = informacionWMIPC & "SO: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_OperatingSystem", "Version", "")
                txtSOVersion.Text = valor
                informacionWMIPC = informacionWMIPC & "Versión: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_OperatingSystem", "ServicePackMajorVersion", "")
                valor = valor & "." & obtenerPropiedadWMI("Win32_OperatingSystem", "ServicePackMinorVersion", "")
                txtSOServicePack.Text = valor
                informacionWMIPC = informacionWMIPC & "Service Pack: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_OperatingSystem", "InstallDate", "")
                txtSOFecha.Text = valor
                informacionWMIPC = informacionWMIPC & "Fecha: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_OperatingSystem", "OSArchitecture", "")
                txtSOArquitectura.Text = valor
                informacionWMIPC = informacionWMIPC & "Arquitectura: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_OperatingSystem", "WindowsDirectory", "")
                txtSOCarpeta.Text = valor
                informacionWMIPC = informacionWMIPC & "Carpeta: " & valor & Environment.NewLine


                'Usuario
                informacionWMIPC = informacionWMIPC & Environment.NewLine & Environment.NewLine &
                    "----Usuario-----------" & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_LoggedOnUser", "Antecedent", "")
                txtUsuarioNombre.Text = valor
                informacionWMIPC = informacionWMIPC & "Usuario sesión: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_Account", "Name", "SIDType = 1")
                txtUsuarioUsuarios.Text = valor
                informacionWMIPC = informacionWMIPC & "Usuarios equipo: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_Account", "Name", "SIDType = 5")
                txtUsuarioGrupos.Text = valor
                informacionWMIPC = informacionWMIPC & "Grupos equipo: " & valor & Environment.NewLine
                'Win32_UserProfile


                'Red
                informacionWMIPC = informacionWMIPC & Environment.NewLine & Environment.NewLine &
                    "----RED-----------" & Environment.NewLine
                'valor = obtenerDatosRedWMI()
                valor = obtenerPropiedadWMI("Win32_NetworkAdapterConfiguration", "IPAddress", "IPEnabled = True")
                txtRedIP.Text = valor
                informacionWMIPC = informacionWMIPC & "IP: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_ComputerSystem", "DNSHostName", "")
                txtRedNombreDNS.Text = valor
                informacionWMIPC = informacionWMIPC & "Nombre DNS: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_ComputerSystem", "Domain", "")
                txtRedDominio.Text = valor
                informacionWMIPC = informacionWMIPC & "Dominio: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_ComputerSystem", "Workgroup", "")
                txtRedGrupoTrabajo.Text = valor
                informacionWMIPC = informacionWMIPC & "Grupo trabajo: " & valor & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_ComputerSystem", "UserName", "")
                txtRedUsuario.Text = valor
                informacionWMIPC = informacionWMIPC & "Usuario: " & valor & Environment.NewLine

                'Impresoras
                informacionWMIPC = informacionWMIPC & Environment.NewLine & Environment.NewLine &
                    "----IMPRESORAS-----------" & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_Printer", "Caption", "")
                txtImpresoras.Text = valor
                informacionWMIPC = informacionWMIPC & "Impresoras: " & valor & Environment.NewLine

                'Procesos
                informacionWMIPC = informacionWMIPC & Environment.NewLine & Environment.NewLine &
                    "----PROCESOS-----------" & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_Process", "Caption", "")
                txtProcesos.Text = valor
                informacionWMIPC = informacionWMIPC & "Procesos: " & valor & Environment.NewLine


                'Servicios
                informacionWMIPC = informacionWMIPC & Environment.NewLine & Environment.NewLine &
                    "----SERVICIOS-----------" & Environment.NewLine
                valor = obtenerPropiedadWMI("Win32_Service", "Caption", "")
                txtServicios.Text = valor
                informacionWMIPC = informacionWMIPC & "Servicios: " & valor & Environment.NewLine

            Catch errorN As Exception
                txtLog.Text = txtLog.Text & System.Environment.NewLine &
                   Now & " Error: " & errorN.Message
            End Try
        End If

        txtInfoPC.Text = informacionWMIPC
    End Sub

    Private Sub lbEnlaceURL_LinkClicked(sender As System.Object,
                e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles lbEnlaceURL.LinkClicked
        System.Diagnostics.Process.Start("http://www.ajpdsoft.com")
    End Sub
End Class

MensajePublicado:
Jue Ago 29, 2013 12:13 pm
Top of PageVer perfil de usuario
rabogado
Usuario


Registrado: Dec 20, 2013
Mensajes: 2

Asunto: Re: CPU, SO, IP, RAM con WMI y Visual Basic .Net Responder citando



Anuncios



Buenas noches estimado Alonso!

Tengo el mismo escenario y estoy necesitando obtener esta data con urgencia por linea de comando mediante un script como Serial, Marca, Modelo, SO, CPU, RAM, IP, Hostname, Espacio en Disco, etc.

Por favor, me puedes ayudar a obtener para exportarla a un .CSV por servidor para luego consolidar en un .xls.

NOTA: Y Disculpa, ya que no había visto esta consulta anteriormente y yo postie una.

Agradezco sinceramente su ayudar.

Saludos,

Richard
MensajePublicado:
Dom Ene 05, 2014 3:28 am
Top of PageVer perfil de usuario
MAGICM
Usuario


Registrado: Feb 27, 2015
Mensajes: 1

Asunto: ERROR AL CONECTAR Responder citando

HOLA BUENAS TARDES.

YA HICE UN FORMULARIO CON EL CODIGO Y ME DA LOS DATOS DEL SERVIDOR PERO AL QUERER OBTENER LOS DATOS DE OTRA PC ME MARCA UN ERROR DE CONEXIO Y UNO RPC
MensajePublicado:
Vie Feb 27, 2015 5:52 pm
Top of PageVer perfil de usuario
Mostrar mensajes de anteriores:   
Todas las horas son GMT - 1 Horas
Publicar nuevo tema Responder al tema
Foros de discusión » VB.Net, C# .Net, Visual Studio .Net  

Cambiar a:  
Key
  Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A