Proyecto AjpdSoft
Principal
· Inicio
· Buscar
· Contactar
· Descargas
· Enciclopedia
· Estadísticas
· Eventos
· Foros
· Manuales, Artículos
· Nuestra historia
· Quiénes somos
· Recomiéndanos
· Temas
· Top 10
· Trucos Delphi, PHP, Java, Visual Studio
· Tu cuenta
Descargas

Últimas Descargas
· Ejemplo acceso nativo a SQLite con ADO.Net en C# .Net

· AjpdSoft Acceso MySQL Android

· AjpdSoft Acceso SQLite C# ADO.NET

· AjpdSoft Acceso MySQL con ADO.NET en C#

· AjpdSoft Gestión Integral código fuente Delphi

· AjpdSoft Indexar Texto PDF C# iTextSharp

· AjpdSoft Capturar Pantalla C#

· AjpdSoft Gestión de Transportes Ficheros instalación manual

· AjpdSoft Separar Páginas PDF código fuente C# C Sharp .Net

· AjpdSoft Convertir Texto a PDF código fuente VB.Net

· AjpdSoft Generador y Lector códigos QR VB.Net

· AjpdSoft Socket VB.Net

· AjpdSoft Acceso nativo MySQL enlazado VB.Net

· AjpdSoft Acceso nativo MySQL VB.Net

· AjpdSoft Envío SMS puerto serie módem GSM VB.Net


Lo más descargado
· AjpdSoft Registro de OCX y DLL Código Fuente Delphi

· AjpdSoft Generador de códigos de barras

· AjpdSoft Conversor Hexadecimal, Decimal, Texto - Código Fuente Delphi

· Borland Database Desktop 7.0

· AjpdSoft Aviso cambio IP pública

· AjpdSoft Inventario PCs

· AjpdSoft Administración Bases de Datos Código Fuente Delphi

· AjpdSoft Facturación Código Fuente Delphi

· AjpdSoft Puerto Paralelo Código Fuente Delphi

· AjpdSoft Inventario PCs Código Fuente Delphi

· Cómo trabajar con tablas Paradox en red

· Cómo compilar un fichero MDB Base de Datos Access

· AjpdSoft Aviso cambio IP pública Código Fuente Delphi

· AjpdSoft Conexión BD Visual Basic .Net

· AjpdSoft Agenda Código Fuente Delphi

Términos enciclopedias
Últimos
· CSRF
Enc.: Informática

· SIG
Enc.: Informática

· Ruby
Enc.: Informática

· DATEDIFF (fecha1, fecha2)
Enc.: Funciones MySQL

· DaysBetween (fecha1, fecha2)
Enc.: Funciones Delphi

· Telnet
Enc.: Informática

· OSI
Enc.: Informática

· LTO
Enc.: Informática

· DoS, DDoS
Enc.: Informática

· NVRAM
Enc.: Informática

· DATE_SUB (date, INTERVAL)
Enc.: Funciones MySQL

· CURDATE ()
Enc.: Funciones MySQL

· DES
Enc.: Informática

· RSA
Enc.: Informática

· VMFS
Enc.: Informática


Lo más visitado

· Attrib
Enc.: Comandos Windows XP/Windows 2000/2003 (consola MS-DOS)

· At
Enc.: Comandos Windows XP/Windows 2000/2003 (consola MS-DOS)

· Arp
Enc.: Comandos Windows XP/Windows 2000/2003 (consola MS-DOS)

· URL
Enc.: Informática

· net use unidad: \\nombrepc\recursocompartido
Enc.: Comandos Windows XP/Windows 2000/2003 (consola MS-DOS)

· bootcfg addsw
Enc.: Comandos Windows XP/Windows 2000/2003 (consola MS-DOS)

· MSKSrvr.exe
Enc.: Procesos en memoria

· ODBC
Enc.: Informática

· Mozilla Firefox
Enc.: Programas/Software

· xcopy
Enc.: Comandos Windows XP/Windows 2000/2003 (consola MS-DOS)

· Call
Enc.: Comandos Windows XP/Windows 2000/2003 (consola MS-DOS)

· Gpupdate
Enc.: Comandos Windows XP/Windows 2000/2003 (consola MS-DOS)

· netstat -n
Enc.: Comandos Windows XP/Windows 2000/2003 (consola MS-DOS)

· Assoc
Enc.: Comandos Windows XP/Windows 2000/2003 (consola MS-DOS)

· net view
Enc.: Comandos Windows XP/Windows 2000/2003 (consola MS-DOS)
Eventos
Junio

DLMMJVS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Consejos
Lenguajes
Selecciona Idioma de la Interfaz:

Webs recomendadas
Orasite.com



Coloca tu web aquí
Language english
English
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: 1666

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: 2228

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


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: 2228

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


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
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
Este sitio web NO CONTIENE malware, todos los programas con código fuente aquí. Autor: Alonso Javier Pérez Díaz