Donanım takip yazılımı yazarken aralarda kalmış olan bilgisayar donanımlarının alınması işlemini boş vaktimde tamamladım.
Domain üzerinde bağlantı bilgileri girilerek uzaktaki domain üyesinin envanteri alınabilir.
Programın yapabildikleri.
İşlemci , fiziksel işlemci , mantıksal işlemci adedi
en fazla ram desteği, anakartta kaç slot olduğu, hangi slotlarda hangi mhz ramlerin yer aldığı
Fiziksel diskler, partition yapıları, mantıksal diskler
Cd Sürücüler, tipleri
ekran kartları , ramleri
Yazıcılar, yazıcıların bağlı olduğu port,destekledikleri kağıt boyutları
Paylaşımlar, paylaşımların yolları, paylaşım çeşitleri
Ağ : DNS,IP,Gateway bilgileri
Seri, parallel port sayısı
Bilgisayarın üzerindeki slotlar ve tümleşik kartlar
Eğer uzaktaki bilgisayarın konfigürasyonunu alırken aşağıdaki hatayı alırsanız
The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
Client üzerindeki firewall açık durumda olmasından kaynaklanıyor. Client üzerinde aşağıdaki komutları çalıştırarak başarılı bir şekilde konfigürasyonu alabiliriz.
netsh.exe firewall set service type=REMOTEADMIN mode=ENABLE scope=ALL
netsh firewall add portopening protocol=tcp port=135 name=DCOM_TCP135
program kodları yazının devamında
Form üzerinde 1 adet Richtext box (name: richtextbox1), 2 adet buton buluyonur.
1. butonda envanter fonksiyon , sub larla richtextbox üzerine aktarılıyor.
2 butonda ise uzaktaki bir bilgisayarın işletim sistemini öğreniyoruz.
Imports System.Management
Imports System
Imports System.Management.Instrumentation
Public Class Form1
Private Shared Sub bilgisayar()
Dim objearama As System.Management.ManagementObjectSearcher
Dim bilgiler As System.Management.ManagementObjectCollection
Dim objeler As System.Management.ManagementObject
objearama = New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystem")
bilgiler = objearama.Get()
Dim rol As String = ""
Dim sistem As String = ""
For Each objeler In bilgiler
Form1.RichTextBox1.AppendText(vbCrLf & "Computer:" & objeler("Caption"))
Form1.RichTextBox1.AppendText(vbCrLf & "Fiziksel işlemci:" & objeler("NumberOfProcessors"))
Form1.RichTextBox1.AppendText(vbCrLf & "Mantıksal İşlemci:" & objeler("NumberOfLogicalProcessors"))
Form1.RichTextBox1.AppendText(vbCrLf & "Domain: " & objeler("Domain"))
If objeler("PartOfDomain") Then
Form1.RichTextBox1.AppendText(vbCrLf & "Etki Alanı Üyeliği:" & "üye")
Else
Form1.RichTextBox1.AppendText(vbCrLf & "Etki Alanı Üyeliği:" & "üyedeğil")
End If
Select Case objeler("DomainRole")
Case 0
rol = "Standalone Workstation"
Case 1
rol = "Member Workstation"
Case 1
rol = "Standalone Server"
Case 3
rol = "Member Server"
Case 4
rol = "Backup Domain Controller"
Case 5
rol = "Primary Domain Controller"
End Select
Form1.RichTextBox1.AppendText(vbCrLf & "Ağdaki Rolü:" & rol)
Try
Select Case objeler("PCSystemType")
Case 1
sistem = "Masaüstü"
Case 2
sistem = "Laptop"
Case 3
sistem = "İş İstasyonu"
Case 4
sistem = "Sunucu"
Case Else
sistem = "Bulunamadı"
End Select
Catch ex As Exception
End Try
Form1.RichTextBox1.AppendText(vbCrLf & "Sistem:" & sistem)
Dim roller As String = ""
For Each rolee As String In objeler("roles")
roller += rolee & ","
Next
Form1.RichTextBox1.AppendText(vbCrLf & "Rolleri:" & roller)
Form1.RichTextBox1.AppendText(vbCrLf & "Toplam Ram:" & objeler("TotalPhysicalMemory"))
Form1.RichTextBox1.AppendText(vbCrLf & "Kullanıcıadı:" & objeler("UserName"))
Form1.RichTextBox1.AppendText(vbCrLf & "Çalışma Grubu:" & objeler("Workgroup"))
Next
objearama = New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem")
bilgiler = objearama.Get()
For Each objeler In bilgiler
Form1.RichTextBox1.AppendText(vbCrLf & "İşletim Sistemi :" & objeler("Caption"))
Next
End Sub
Public Shared Sub baseboard()
Dim objearama As System.Management.ManagementObjectSearcher
Dim bilgiler As System.Management.ManagementObjectCollection
Dim objeler As System.Management.ManagementObject
objearama = New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard")
bilgiler = objearama.Get()
For Each objeler In bilgiler
Form1.RichTextBox1.AppendText(vbCrLf & "Anakart:" & objeler("Product"))
Next
End Sub
Public Function Cpu() As String
Dim isim As String = ""
Dim CpuSinif As New ManagementClass("Win32_Processor")
Dim CpuKoleksiyon As ManagementObjectCollection = CpuSinif.GetInstances
Dim CpuNesne As ManagementObject
For Each CpuNesne In CpuKoleksiyon
isim = CStr(CpuNesne("Name"))
Next CpuNesne
Return isim
End Function
Public Shared Sub vga()
Dim vganSinif As New Management.ManagementClass("Win32_VideoController")
Dim vganKoleksiyon As Management.ManagementObjectCollection = vganSinif.GetInstances
Dim vganNesne As Management.ManagementObject
For Each vganNesne In vganKoleksiyon
Form1.RichTextBox1.AppendText(vbCrLf & vganNesne("Name") & vbTab & "RAM: " & vganNesne("AdapterRAM") / 1024 / 1024)
Next vganNesne
End Sub
Public Shared Sub fizikseldisk()
Dim objearama As System.Management.ManagementObjectSearcher
Dim bilgiler As System.Management.ManagementObjectCollection
Dim objeler As System.Management.ManagementObject
objearama = New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive")
bilgiler = objearama.Get()
For Each objeler In bilgiler
Form1.RichTextBox1.AppendText(vbCrLf & "Bağlantı:" & objeler("InterfaceType").ToString & vbTab & _
"Modeli" & objeler("Model").ToString & vbTab & "Boyutu" & _
Format(objeler("Size") / 1024 / 1024 / 1024, "#.##").ToString & " GB" & _
vbTab & "Sürücü ID:" & objeler("DeviceID").ToString)
Try
If objeler("SerialNumber") IsNot Nothing Then
Form1.RichTextBox1.AppendText("SeriNo:" & objeler("SerialNumber"))
End If
Catch ex As Exception
' MsgBox(ex.Message)
End Try
Next
End Sub
Private Shared Sub partitionyapisi()
Dim objearama As System.Management.ManagementObjectSearcher
Dim bilgiler As System.Management.ManagementObjectCollection
Dim objeler As System.Management.ManagementObject
objearama = New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_DiskPartition")
bilgiler = objearama.Get()
For Each objeler In bilgiler
Form1.RichTextBox1.AppendText(vbCrLf & "Disk,Part" & (Replace(Replace(objeler("DeviceID"), "Disk #", ""), _
" Partition #", "")) & vbTab & _
Format(objeler("Size") / 1024 / 1024 / 1024, "#.##"))
Next
End Sub
Public Shared Sub DiskBoyutlari()
Dim diskClass As New System.Management.ManagementClass("Win32_LogicalDisk")
Dim disks As System.Management.ManagementObjectCollection = diskClass.GetInstances()
Dim disk As System.Management.ManagementObject
Dim isim As String
Dim pnpDeviceIDsi As String
Dim boyut As System.UInt64 = 0
For Each disk In disks
pnpDeviceIDsi = CType(disk("MediaType"), UInt32).ToString
isim = CStr(disk("Name"))
boyut = disk("Size")
If boyut > 0 And (pnpDeviceIDsi = "12" Or pnpDeviceIDsi = "11" Or pnpDeviceIDsi = "0") Then
Form1.RichTextBox1.AppendText(vbCrLf & isim & ", Toplam Alan:" & _
Format(disk("Size") / 1024 / 1024 / 1024, "#.##") & "GB , Boş Alan:" & _
Format(disk("FreeSpace") / 1024 / 1024 / 1024, "#.##") & " GB" & vbTab _
& "DosyaTipi:" & disk("FileSystem"))
End If
Next disk
End Sub
Public Shared Sub cdsurucu()
Dim cdromSinif As New Management.ManagementClass("Win32_CDROMDrive")
Dim cdromKoleksiyon As Management.ManagementObjectCollection = cdromSinif.GetInstances
Dim cdromNesne As Management.ManagementObject
For Each cdromNesne In cdromKoleksiyon
Form1.RichTextBox1.AppendText(vbCrLf & cdromNesne("Drive") & " " & cdromNesne("MediaType") & " " & cdromNesne("Name"))
Next cdromNesne
End Sub
Public Shared Sub printers()
Dim printerSinif As New Management.ManagementClass("Win32_Printer")
Dim printerKoleksiyon As Management.ManagementObjectCollection = printerSinif.GetInstances
Dim printerNesne As Management.ManagementObject
Dim paylasim As String = ""
Dim sayfaboyutlari As String = ""
For Each printerNesne In printerKoleksiyon
For Each sayfa As String In printerNesne("PrinterPaperNames")
sayfaboyutlari += sayfa & ","
Next
If printerNesne("Shared") Then
paylasim = "Paylaştırılmış. Paylaşım adı= " & printerNesne("ShareName")
Else
paylasim = "Paylaştırılmamış"
End If
Form1.RichTextBox1.AppendText(vbCrLf & "YAZICI:" & vbTab & printerNesne("Name") & vbCrLf & "Bağlı Olduğu Port:" _
& vbTab & printerNesne("PortName") & vbCrLf & paylasim & vbCrLf & "Desteklediği Kağıtlar:" & _
vbTab & sayfaboyutlari)
Next printerNesne
End Sub
Public Function SeriPortAdet() As Integer
Dim seriPortSinif As New Management.ManagementClass("Win32_SerialPort")
Dim seriPortKoleksiyon As Management.ManagementObjectCollection = seriPortSinif.GetInstances
Dim seriPortNesne As Management.ManagementObject
Dim portSayisi As Integer = 0
For Each seriPortNesne In seriPortKoleksiyon
portSayisi += 1
Next seriPortNesne
Return portSayisi
End Function
Public Function parelelPortAdet() As Integer
Dim seriPortSinif As New Management.ManagementClass("Win32_ParallelPort")
Dim seriPortKoleksiyon As Management.ManagementObjectCollection = seriPortSinif.GetInstances
Dim seriPortNesne As Management.ManagementObject
Dim portSayisi As Integer = 0
For Each seriPortNesne In seriPortKoleksiyon
portSayisi += 1
Next seriPortNesne
Return portSayisi
End Function
Public Shared Sub ram_max()
Dim objearama As System.Management.ManagementObjectSearcher
Dim bilgiler As System.Management.ManagementObjectCollection
Dim objeler As System.Management.ManagementObject
objearama = New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMemoryArray")
bilgiler = objearama.Get()
Dim s As String = ""
For Each objeler In bilgiler
s = s & "Slot Sayısı: " & objeler("MemoryDevices") & vbTab
s = s & "Maximum: " & objeler("MaxCapacity") / 1024 & " MB " & vbCrLf
Form1.RichTextBox1.AppendText(vbCrLf & s)
Next
End Sub
Public Shared Sub ram()
Dim bellektSinif As New Management.ManagementClass("Win32_PhysicalMemory")
Dim bellektKoleksiyon As Management.ManagementObjectCollection = bellektSinif.GetInstances
Dim bellektNesne As Management.ManagementObject
Dim tip As System.UInt64
Dim tipdetay As String = ""
For Each bellektNesne In bellektKoleksiyon
tip = bellektNesne("MemoryType")
Select Case tip
Case 2
tipdetay = "DRAM"
Case 21
tipdetay = "DDR2"
Case 20
tipdetay = "DDR"
Case 17
tipdetay = "SDRAM"
End Select
Form1.RichTextBox1.AppendText(vbCrLf & "Konumu:" & bellektNesne("DeviceLocator") & vbTab & "Boyut " & _
bellektNesne("Capacity") / 1024 / 1024 & vbTab & "Hızı:" & bellektNesne("Speed") & _
vbTab & "Tipi :" & tip & vbTab & "Tip Detayı=" & tipdetay)
Next bellektNesne
End Sub
Private Shared Sub network()
Dim objearama As System.Management.ManagementObjectSearcher
Dim bilgiler As System.Management.ManagementObjectCollection
Dim objeler As System.Management.ManagementObject
objearama = New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration")
bilgiler = objearama.Get()
For Each objeler In bilgiler
If objeler("MacAddress") = "" Then
GoTo sonraki
End If
Form1.RichTextBox1.AppendText(vbCrLf & "Description : " & objeler("Description"))
Form1.RichTextBox1.AppendText(vbCrLf & "MacAddress : " & objeler("MacAddress"))
Dim dnssunucular As String() = TryCast(objeler("DNSServerSearchOrder"), String())
Dim IPAddresses As String() = TryCast(objeler("IPAddress"), String())
Dim IPSubnets As String() = TryCast(objeler("IPSubnet"), String())
Dim gateway As String() = TryCast(objeler("DefaultIPGateway"), String())
Form1.RichTextBox1.AppendText(vbCrLf & ("DNS HostName" & " : ") + objeler("DNSHostName"))
Form1.RichTextBox1.AppendText(vbCrLf & ("DNS Domain" & " : ") + objeler("DNSDomain"))
If objeler("DHCPEnabled") Then
Form1.RichTextBox1.AppendText(vbCrLf & "Otomatik IP. DHCP Sunucu=" & objeler("DHCPServer"))
Else
Form1.RichTextBox1.AppendText(vbCrLf & "Ip Elle Yapılandırılmış.")
End If
If dnssunucular IsNot Nothing Then
For Each dnssunucu As String In dnssunucular
Form1.RichTextBox1.AppendText(vbCrLf & ("DNS Sunucu" & " : ") + dnssunucu)
Next
End If
If IPAddresses IsNot Nothing Then
For Each IPAddress As String In IPAddresses
Form1.RichTextBox1.AppendText(vbCrLf & ("IP Adres" & " : ") + IPAddress)
Next
End If
If IPSubnets IsNot Nothing Then
For Each IPSubnet As String In IPSubnets
Form1.RichTextBox1.AppendText(vbCrLf & ("IP Subnet" & " : ") + IPSubnet)
Next
End If
If gateway IsNot Nothing Then
For Each DefaultIPGateway As String In gateway
Form1.RichTextBox1.AppendText(vbCrLf & ("Gateway" & " : ") + DefaultIPGateway)
Next
End If
Form1.RichTextBox1.AppendText(vbCrLf & "──────────────────────────────")
sonraki:
Next
End Sub
Public Shared Sub ses()
Dim objearama As System.Management.ManagementObjectSearcher
Dim bilgiler As System.Management.ManagementObjectCollection
Dim objeler As System.Management.ManagementObject
objearama = New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_SoundDevice")
bilgiler = objearama.Get()
For Each objeler In bilgiler
Form1.RichTextBox1.AppendText(vbCrLf & "Ses Kartı:" & objeler("Description"))
Next
End Sub
Public Shared Sub tumlesik()
Dim objearama As System.Management.ManagementObjectSearcher
Dim bilgiler As System.Management.ManagementObjectCollection
Dim objeler As System.Management.ManagementObject
Dim aygittipi As System.UInt32
objearama = New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_OnBoardDevice")
bilgiler = objearama.Get()
For Each objeler In bilgiler
aygittipi = objeler("DeviceType")
Select Case aygittipi
Case 1
Form1.RichTextBox1.AppendText(vbCrLf & "Diğer")
Case 3
Form1.RichTextBox1.AppendText(vbCrLf & "VGA")
Case 4
Form1.RichTextBox1.AppendText(vbCrLf & "SCSI Controller")
Case 5
Form1.RichTextBox1.AppendText(vbCrLf & "Ethernet")
Case 7
Form1.RichTextBox1.AppendText(vbCrLf & "Ses")
End Select
Form1.RichTextBox1.AppendText(vbCrLf & "Model:" & objeler("Description"))
Form1.RichTextBox1.AppendText(vbCrLf & "──────────────────────────────")
Next
End Sub
Public Shared Sub slotlar()
Dim objearama As System.Management.ManagementObjectSearcher
Dim bilgiler As System.Management.ManagementObjectCollection
Dim objeler As System.Management.ManagementObject
' Dim aygittipi As System.UInt16
objearama = New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_SystemSlot")
bilgiler = objearama.Get()
Dim tipdetay As String = ""
For Each objeler In bilgiler
Dim tip As System.UInt16() = TryCast(objeler("ConnectorType"), System.UInt16())
For Each ConnectorType As String In tip
Select Case ConnectorType
Case 43
tipdetay = "PCI"
Case 44
tipdetay = "ISA"
Case 81
tipdetay = "AGP2X"
Case 82
tipdetay = "AGP4X"
Case 123
tipdetay = "AGP8X"
Case 124
tipdetay = "PCI-E"
End Select
Next
Form1.RichTextBox1.AppendText(vbCrLf & "Slot:" & objeler("SlotDesignation") & vbTab & "Detay:" & tipdetay)
Next
End Sub
Public Shared Sub paylasimlar()
Dim objearama As System.Management.ManagementObjectSearcher
Dim bilgiler As System.Management.ManagementObjectCollection
Dim objeler As System.Management.ManagementObject
objearama = New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_Share")
bilgiler = objearama.Get()
Dim tip As System.UInt32
Dim tipdetay As String = ""
For Each objeler In bilgiler
tip = objeler("Type")
Select Case objeler("Type")
Case 0
tipdetay = "Klasör Paylaşımı"
Case 1
tipdetay = "Yazıcı Paylaşımı"
Case 2147483648
tipdetay = "Yönetimsel Sürücü P."
Case 2147483651
tipdetay = "Yönetimsel Paylaşım"
End Select
Form1.RichTextBox1.AppendText(vbCrLf & "Paylaşım Adı:" & vbTab & objeler("Name") & vbTab & _
"Paylaşım Yolu:" & objeler("Path") & vbCrLf & "Tip:" & tipdetay)
Next
End Sub
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
RichTextBox1.AppendText(vbCrLf & "")
RichTextBox1.AppendText(vbCrLf & "**************** B İ L G İ S A Y A R**********************")
RichTextBox1.AppendText(vbCrLf & "")
Call bilgisayar()
RichTextBox1.AppendText(vbCrLf & "****************A N A K A R T **********************")
Call baseboard()
RichTextBox1.AppendText(vbCrLf & "")
RichTextBox1.AppendText(vbCrLf & "****************İ Ş L E M C İ **********************")
RichTextBox1.AppendText(vbCrLf & "İşlemci:" & Cpu())
RichTextBox1.AppendText(vbCrLf & "")
RichTextBox1.AppendText(vbCrLf & "*********E K R A N K A R T I*****************")
Call vga()
RichTextBox1.AppendText(vbCrLf & "")
RichTextBox1.AppendText(vbCrLf & "**********F İ Z İ K S E L D İ S K***********")
Call fizikseldisk()
RichTextBox1.AppendText(vbCrLf & "")
RichTextBox1.AppendText(vbCrLf & "**********P A R T I T I O N Y A P I S I***********")
Call partitionyapisi()
RichTextBox1.AppendText(vbCrLf & "")
RichTextBox1.AppendText(vbCrLf & "*******S A B İ T S Ü R Ü C Ü L E R *******")
Call DiskBoyutlari()
RichTextBox1.AppendText(vbCrLf & "")
RichTextBox1.AppendText(vbCrLf & "***********C D S Ü R Ü C Ü L E R *******************")
Call cdsurucu()
RichTextBox1.AppendText(vbCrLf & "")
RichTextBox1.AppendText(vbCrLf & "************Y A Z I C I L A R******************")
Call printers()
RichTextBox1.AppendText(vbCrLf & "")
RichTextBox1.AppendText(vbCrLf & "*********S E R İ P O R T S A Y I S I*****************")
RichTextBox1.AppendText(vbCrLf & "SeriPortSayısı:" & SeriPortAdet())
RichTextBox1.AppendText(vbCrLf & "")
RichTextBox1.AppendText(vbCrLf & "*********P A R A L E L P O R T S A Y I S I*****************")
RichTextBox1.AppendText(vbCrLf & "SeriPortSayısı:" & parelelPortAdet())
RichTextBox1.AppendText(vbCrLf & "")
RichTextBox1.AppendText(vbCrLf & "************R A M B İ L G İ L E R İ*****************")
Call ram_max()
Call ram()
RichTextBox1.AppendText(vbCrLf & "")
RichTextBox1.AppendText(vbCrLf & "***********A Ğ B İ L G İ L E R İ***************")
Call network()
RichTextBox1.AppendText(vbCrLf & "")
RichTextBox1.AppendText(vbCrLf & "**********S E S K A R T I *********")
Call ses()
RichTextBox1.AppendText(vbCrLf & "")
RichTextBox1.AppendText(vbCrLf & "*********T Ü M L E Ş İ K K A R T L A R*******************")
Call tumlesik()
RichTextBox1.AppendText(vbCrLf & "")
RichTextBox1.AppendText(vbCrLf & "**********S L O T L A R***********")
Call slotlar()
RichTextBox1.AppendText(vbCrLf & "")
RichTextBox1.AppendText(vbCrLf & "**************** P A Y L A Ş I M L A R**********************")
RichTextBox1.AppendText(vbCrLf & "")
Call paylasimlar()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim BaglantiAyarlarim As New System.Management.ConnectionOptions
With BaglantiAyarlarim
'.Username = "192.168.2.51\notsayfam"
'.Password = "123"
.Impersonation = System.Management.ImpersonationLevel.Impersonate
'.Impersonation = True
.Authentication = AuthenticationLevel.Packet
'.EnablePrivileges = True
End With
Dim baglantim As System.Management.ManagementScope
Dim BaglanilacakSunucu As String = "192.168.2.51"
'Sadece localde çalışacaksa bağlanılacak sunucuya . yazabilirsiniz
baglantim = New System.Management.ManagementScope("\\" & _
BaglanilacakSunucu & "\root\cimv2", BaglantiAyarlarim)
Try
baglantim.Connect()
Catch ex As Exception
MsgBox(ex.Message)
End Try
If baglantim.IsConnected = False Then
MsgBox("Sunucuya bağlanılamadı")
Exit Sub
End If
Dim objearama As System.Management.ManagementObjectSearcher
Dim bilgiler As System.Management.ManagementObjectCollection
Dim objeler As System.Management.ManagementObject
objearama = New System.Management.ManagementObjectSearcher(baglantim.Path.ToString, "SELECT * FROM Win32_OperatingSystem")
bilgiler = objearama.Get()
For Each objeler In bilgiler
RichTextBox1.AppendText(vbCrLf & "İşletim Sistemi :" & objeler("Caption"))
Next
End Sub
End Class
Domaine üye olmayan ama bilgisayarın local kullanıcı adı ve şifresini bildiğimiz bir bilgisayarın envanterini alma özelliğini eklemek biraz zaman alacak. oturum açma başarısız oluyor ” (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) ” hatası dönüyor.
böyle birşey yapmak istiyorsanız hata çözümleri için
Connecting Through Windows Firewall
Securing a Remote WMI Connection linklerinde detaylı bilgi mevcut.
Gereksinimler: .Net Framework 2.0
Kaynaklar: