Asunto: CPU, SO, IP, RAM con WMI y Visual Basic .Net
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.
Publicado:
Jue Jun 28, 2012 8:53 pm
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: CPU, SO, IP, RAM con WMI y Visual Basic .Net
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
' 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
Publicado:
Jue Jun 28, 2012 8:57 pm
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: CPU, SO, IP, RAM con WMI y Visual Basic .Net
Anuncios
En breve publicaremos esta aplicación con su código fuente en VB.Net correspondiente, como siempre gratuito.
Publicado:
Jue Jun 28, 2012 8:58 pm
zake Usuario
Registrado: Aug 28, 2013 Mensajes: 1
Asunto: Re: CPU, SO, IP, RAM con WMI y Visual Basic .Net
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.
Asunto: Re: CPU, SO, IP, RAM con WMI y Visual Basic .Net
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:
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
Publicado:
Jue Ago 29, 2013 12:00 pm
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: CPU, SO, IP, RAM con WMI y Visual Basic .Net
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
Publicado:
Jue Ago 29, 2013 12:13 pm
rabogado Usuario
Registrado: Dec 20, 2013 Mensajes: 2
Asunto: Re: CPU, SO, IP, RAM con WMI y Visual Basic .Net
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
Publicado:
Dom Ene 05, 2014 3:28 am
MAGICM Usuario
Registrado: Feb 27, 2015 Mensajes: 1
Asunto: ERROR AL CONECTAR
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
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