CMD ile WMIC Kullanarak Sistem Bilgisi Sorgulama

Windows ortamlarında sistem yönetimi yaparken, GUI araçlarına her zaman erişiminiz olmayabilir. Uzak sunuculara bağlandığınızda, otomasyonu scriptlerle yönetmek istediğinizde ya da hızlıca bir sistemin durumunu anlamak istediğinizde komut satırı araçları hayat kurtarır. İşte tam bu noktada WMIC (Windows Management Instrumentation Command-line) devreye giriyor. Bu yazıda WMIC’i baştan sona ele alacağız, gerçek senaryolarda nasıl kullandığımı paylaşacağım ve işinize yarayacak pratik sorgu örnekleriyle konuyu pekiştireceğiz.

WMIC Nedir ve Neden Önemlidir?

WMIC, Windows’un WMI (Windows Management Instrumentation) altyapısına komut satırından erişmenizi sağlayan bir araçtır. WMI, Windows’ta hemen her şeyi sorgulayabileceğiniz ve yönetebileceğiniz bir çerçeve sunar. İşlemciden disk bilgisine, ağ adaptörlerinden kurulu yazılımlara kadar sistem hakkında neredeyse her şeyi WMIC ile öğrenebilirsiniz.

Peki neden hala WMIC öğrenmeye değer? Şöyle düşünün: Bir Windows Server 2016 makinenize RDP bağlantısı çalışmıyor, sadece CMD erişiminiz var ve sunucunun ne kadar RAM’e sahip olduğunu, hangi process’lerin çıldırdığını öğrenmeniz gerekiyor. İşte o an WMIC’in değerini anlıyorsunuz.

Önemli Not: Microsoft, Windows 10 21H1 ve sonrasında WMIC’i deprecated (kullanımdan kaldırılacak) olarak işaretledi. Ancak Windows Server ortamlarında hala yaygın biçimde kullanılıyor ve mevcut scriptlerde bol miktarda WMIC komutu bulacaksınız. Ayrıca PowerShell ile WMI sorgularını da göstereceğim, geçiş için referans olarak kullanabilirsiniz.

WMIC’e Giriş: Temel Sözdizimi

WMIC komutlarının genel yapısı şu şekildedir:

wmic [global switches] [alias] [verbs] [properties]
  • global switches: /node, /user, /password gibi bağlantı parametreleri
  • alias: cpu, memorychip, diskdrive gibi sorgulamak istediğiniz bileşen
  • verbs: get, list, call gibi eylem belirteçleri
  • properties: Almak istediğiniz özellikler (Name, Caption, Size vb.)

Basit bir başlangıç yapalım. WMIC konsoluna girmek için CMD’ye sadece wmic yazmanız yeterli. Ya da doğrudan komut satırında kullanabilirsiniz:

wmic cpu get name

Bu komut işlemci adını döndürür. Çıktı şuna benzer:

Name
Intel(R) Xeon(R) CPU E5-2690 v4 @ 2.60GHz

İşlemci Bilgilerini Sorgulama

Sunucu performans sorunlarıyla uğraşırken ilk baktığım yer işlemci bilgileridir. WMIC ile işlemci hakkında detaylı bilgi almak çok kolay:

wmic cpu get Name, NumberOfCores, NumberOfLogicalProcessors, MaxClockSpeed, CurrentClockSpeed, LoadPercentage

Bu komut size işlemcinin adını, fiziksel çekirdek sayısını, mantıksal işlemci sayısını, maksimum ve anlık saat hızını ve anlık CPU yükünü gösterir. Bir sunucuda performans sorunu yaşandığında LoadPercentage değeri ilk kontrol ettiğim şeydir.

İşlemci mimarisi ve socket bilgisi için:

wmic cpu get Caption, DeviceID, Architecture, AddressWidth, DataWidth

Burada Architecture değeri şu şekilde yorumlanır:

  • 0: x86
  • 9: x64 (AMD64/EM64T)
  • 12: ARM64

Bellek Bilgilerini Sorgulama

RAM sorunları sistem yöneticilerinin kabusu olabilir. Özellikle fiziksel sunucularda hangi slotta ne kadar RAM olduğunu, hızını ve tipini bilmek kritik önem taşır.

wmic memorychip get BankLabel, Capacity, Speed, MemoryType, Manufacturer, PartNumber

Bu komut her RAM modülü için ayrı satır döndürür. Capacity değeri byte cinsinden gelir, bunu GB’a çevirmek için 1073741824’e bölmeniz gerekir.

Toplam fiziksel belleği öğrenmek için daha basit bir yol:

wmic ComputerSystem get TotalPhysicalMemory

MemoryType değerleri şu anlama gelir:

  • 20: DDR
  • 21: DDR2
  • 24: DDR3
  • 26: DDR4
  • 0: Bilinmiyor (sanal makine veya bazı fiziksel sistemlerde)

Mevcut kullanılabilir belleği görmek için OS alias’ını kullanabilirsiniz:

wmic OS get FreePhysicalMemory, TotalVisibleMemorySize

Değerler KB cinsinden gelir. Bu komutu bir monitoring scriptine ekleyip düzenli aralıklarla çalıştırarak basit bir bellek izleme mekanizması kurabilirsiniz.

Disk Bilgilerini Sorgulama

Disk yönetimi konusunda WMIC oldukça güçlüdür. Fiziksel disklerden mantıksal sürücülere kadar her katmanı sorgulayabilirsiniz.

Fiziksel disk bilgileri için:

wmic diskdrive get Model, Size, InterfaceType, Status, MediaType, SerialNumber

Bu komut özellikle donanım arıza tespitinde işe yarar. Status değeri “OK” değilse o disk için hemen alarma geçmeniz gerekiyor demektir.

Mantıksal sürücü bilgileri (C:, D: gibi) için:

wmic logicaldisk get Caption, FileSystem, Size, FreeSpace, DriveType, VolumeName

DriveType değerleri:

  • 2: Çıkarılabilir disk
  • 3: Yerel sabit disk
  • 4: Ağ sürücüsü
  • 5: CD/DVD
  • 6: RAM diski

Disk doluluk yüzdesini hesaplayan bir script örneği:

@echo off
for /f "tokens=1,2,3 skip=1" %%a in ('wmic logicaldisk where "DriveType=3" get Caption^,FreeSpace^,Size') do (
    if not "%%a"=="" (
        echo Surucu: %%a
        echo Bos Alan: %%b bytes
        echo Toplam: %%c bytes
    )
)

Bu tür scriptleri görev zamanlayıcıya ekleyerek disk doluluk uyarıları oluşturabilirsiniz.

İşletim Sistemi Bilgilerini Sorgulama

Özellikle birden fazla sunucu yönetirken hangi makineye ne kurulu, son ne zaman restart edilmiş gibi bilgiler kritik önem taşır.

wmic OS get Caption, Version, BuildNumber, OSArchitecture, LastBootUpTime, InstallDate, SystemDirectory, WindowsDirectory

LastBootUpTime değeri biraz karmaşık bir formatta gelir (YYYYMMDDHHMMSS.ffffff+offset). Bunu okunabilir hale getirmek için PowerShell’e geçmek daha pratik olur, ama WMIC çıktısı da işinizi görür.

Sistem çalışma süresini (uptime) hesaplamak için:

wmic path Win32_OperatingSystem get LastBootUpTime

Bu değerden mevcut zamanı çıkararak uptime’ı bulabilirsiniz. Bir sunucu beklenmedik şekilde yeniden başlamışsa bu değer sizi hemen uyarır.

Kurulu Yazılımları Listeleme

Bu özellik benim en çok kullandığım WMIC komutlarından biridir. Özellikle güvenlik denetimleri ve yazılım envanteri çıkarırken hayat kurtarır.

wmic product get Name, Version, Vendor, InstallDate, InstallLocation

Dikkat: wmic product komutu biraz yavaş çalışır çünkü Windows Installer veritabanını tarar. Büyük sistemlerde birkaç dakika sürebilir, paniklemeyün.

Belirli bir yazılımı aramak için where filtresi kullanabilirsiniz:

wmic product where "Name like '%Microsoft%'" get Name, Version, InstallDate

Bu komutu çalıştırdığımda bir sistemde hala Microsoft Office 2010 kurulu olduğunu gördüm ve IT ekibine raporladım. Bazen bu tür keşifler güvenlik açıklarını kapatmak için kritik öneme sahip.

Ağ Adaptörü Bilgilerini Sorgulama

Ağ sorunlarını debug ederken adaptör bilgilerine hızlıca ulaşmak gerekir:

wmic nic get Name, MACAddress, AdapterType, Speed, NetEnabled, Manufacturer

IP adresi konfigürasyonu için:

wmic nicconfig where "IPEnabled=True" get Description, IPAddress, IPSubnet, DefaultIPGateway, DNSServerSearchOrder, MACAddress

Bu komut özellikle birden fazla ağ kartına sahip sunucularda hangi kartın ne IP’ye sahip olduğunu görmek için mükemmeldir.

Process ve Servis Yönetimi

Çalışan process’leri görüntülemek için:

wmic process get Name, ProcessId, WorkingSetSize, CommandLine

WorkingSetSize değeri byte cinsindendir. Yüksek bellek tüketen process’leri bulmak için bu değere göre sıralama yapabilirsiniz. Ancak sıralama için PowerShell çok daha kullanışlıdır.

Belirli bir process’i öldürmek için:

wmic process where "name='notepad.exe'" delete

Ya da PID ile:

wmic process where "ProcessId=1234" delete

Servisleri listelemek ve durumlarını görmek için:

wmic service get Name, DisplayName, State, StartMode, PathName

Sadece çalışmayan servisleri görmek:

wmic service where "State='Stopped' and StartMode='Auto'" get Name, DisplayName, StartMode

Bu sorgu özellikle kritiktir. “Auto” modunda başlaması gereken ama durmuş olan servisleri anında tespit edersiniz. Bunu haftalık bir kontrol rutininize ekleyin.

Uzak Sistemleri Sorgulama

WMIC’in gerçek gücü burada ortaya çıkıyor. Ağınızdaki başka bir makinenin bilgilerini kendi komut satırınızdan sorgulayabilirsiniz:

wmic /node:"192.168.1.100" /user:"domainadministrator" cpu get Name, LoadPercentage

Şifre girilmesini de isteyecektir. Eğer şifreyi script içinde belirtmek istiyorsanız (güvenlik riskini bilmeniz şartıyla):

wmic /node:"192.168.1.100" /user:"domainadmin" /password:"sifreniz" os get Caption, LastBootUpTime

Birden fazla makineyi aynı anda sorgulamak için:

wmic /node:"server1","server2","server3" os get Caption, LastBootUpTime

Bu özelliği bir text dosyasıyla birleştirerek tüm sunucu parkınızı tarayabilirsiniz:

wmic /node:@sunucular.txt os get Caption, LastBootUpTime /format:csv > rapor.csv

sunucular.txt dosyasında her satırda bir sunucu adı veya IP adresi bulunmalıdır. /format:csv parametresi çıktıyı CSV formatına dönüştürür, böylece Excel’de açıp analiz edebilirsiniz.

Çıktı Formatlarını Kontrolleme

WMIC farklı çıktı formatlarını destekler ve bu gerçekten çok işe yarar:

CSV formatı:

wmic os get Caption, Version /format:csv > sistem_raporu.csv

HTML formatı:

wmic os get Caption, Version, LastBootUpTime /format:htable > rapor.html

XML formatı:

wmic os get Caption, Version /format:xml > rapor.xml

CSV çıktısı özellikle birden fazla sistemi karşılaştırırken veya yönetime rapor sunarken çok kullanışlıdır. Ben düzenli aralıklarla çalışan bir batch script hazırladım, her sabah sunucuların disk doluluk ve uptime bilgilerini CSV olarak kaydediyor.

WMIC ile Donanım Envanteri Script Örneği

Gerçek dünyada kullandığım bir envanter script’i paylaşayım:

@echo off
echo Sistem Envanteri Raporu > envanter.txt
echo Tarih: %date% %time% >> envanter.txt
echo ================================ >> envanter.txt
echo. >> envanter.txt

echo -- BILGISAYAR BILGISI -- >> envanter.txt
wmic computersystem get Name, Domain, Manufacturer, Model, TotalPhysicalMemory /format:list >> envanter.txt

echo. >> envanter.txt
echo -- ISLETIM SISTEMI -- >> envanter.txt
wmic os get Caption, Version, OSArchitecture, LastBootUpTime /format:list >> envanter.txt

echo. >> envanter.txt
echo -- ISLEMCI -- >> envanter.txt
wmic cpu get Name, NumberOfCores, NumberOfLogicalProcessors, MaxClockSpeed /format:list >> envanter.txt

echo. >> envanter.txt
echo -- DISK BILGISI -- >> envanter.txt
wmic logicaldisk where "DriveType=3" get Caption, FileSystem, Size, FreeSpace /format:list >> envanter.txt

echo. >> envanter.txt
echo -- AG ADAPTORU -- >> envanter.txt
wmic nic where "NetEnabled=True" get Name, MACAddress, Speed /format:list >> envanter.txt

echo Rapor envanter.txt dosyasina kaydedildi.

Bu scripti görev zamanlayıcıda aylık çalışacak şekilde ayarlayıp çıktıları merkezi bir paylaşıma yazdırırsanız, elinizde otomatik güncellenen bir envanter sistemi olur.

PowerShell ile WMI: WMIC’in Geleceği

WMIC deprecated olduğu için PowerShell’e geçişi de bilmeniz gerekiyor. PowerShell’de iki yöntem var:

Get-WmiObject (eski yöntem, PowerShell 5.1):

Get-WmiObject -Class Win32_Processor | Select-Object Name, NumberOfCores, LoadPercentage

Get-CimInstance (yeni ve önerilen yöntem):

Get-CimInstance -ClassName Win32_Processor | Select-Object Name, NumberOfCores, LoadPercentage

Uzak sistemleri sorgulamak için:

Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName "server1" | Select-Object Caption, LastBootUpTime

PowerShell versiyonu daha zengin filtreleme ve formatlama imkanı sunar, ancak WMIC hala daha hızlı yazılabilen ve hatırlanması kolay komutlar için güzel bir seçenek.

Sık Yapılan Hatalar ve Çözümleri

WMIC’in “Invalid XSL format” hatası verdiği durum: Bu genellikle sistem dili nedeniyle olur. /format parametresiyle dil dosyasını açıkça belirtmeyi deneyin ya da doğrudan get kullanın.

“Access denied” hatası: WMIC komutlarını çalıştırmak için yönetici yetkisi gereklidir. CMD’yi “Yönetici olarak çalıştır” ile açın.

Uzak bağlantı sorunları: Uzak makinede Windows Firewall’un WMI trafiğine izin verdiğinden emin olun. Bunun için karşı taraftaki CMD’ye şu komutu çalıştırın:

netsh advfirewall firewall set rule group="Windows Management Instrumentation (WMI)" new enable=yes

Boş çıktı gelmesi: Bazen where koşulunuzdaki değer yanlış olabilir. Önce filtresiz çalıştırıp hangi değerlerin geldiğini kontrol edin, sonra filtreyi ekleyin.

Yararlı WMIC Alias Listesi

Hızlı referans için sık kullanılan alias’lar:

  • wmic computersystem: Genel bilgisayar sistemi bilgisi
  • wmic cpu: İşlemci bilgisi
  • wmic memorychip: Fiziksel RAM modülleri
  • wmic os: İşletim sistemi bilgisi
  • wmic diskdrive: Fiziksel diskler
  • wmic logicaldisk: Mantıksal sürücüler
  • wmic nic: Ağ adaptörleri
  • wmic nicconfig: Ağ adaptörü konfigürasyonu
  • wmic process: Çalışan processler
  • wmic service: Windows servisleri
  • wmic product: Kurulu yazılımlar
  • wmic bios: BIOS bilgisi
  • wmic baseboard: Anakart bilgisi
  • wmic startupcommand: Başlangıç komutları
  • wmic useraccount: Kullanıcı hesapları
  • wmic group: Kullanıcı grupları
  • wmic qfe: Kurulu güncellemeler (hotfix)

Özellikle wmic qfe çok işe yarar. Bir sistemde hangi güncellemelerin kurulu olduğunu hızla görmek için:

wmic qfe get HotFixID, Description, InstalledOn, InstalledBy

Bu komutu güvenlik denetimlerinde sık kullanıyorum.

Sonuç

WMIC, Windows sistem yöneticisinin araç çantasında mutlaka bulunması gereken güçlü bir araçtır. GUI’ye erişim olmadan bile sistemler hakkında derin bilgi edinmenizi, hızlı sorun tespiti yapmanızı ve envanter çıkarmanızı sağlar. Özellikle çok sayıda sunucu yönetirken uzak sorgulama özelliği büyük kolaylık sağlar.

Evet, Microsoft WMIC’i deprecated ilan etti ve uzun vadede PowerShell’e geçmek mantıklı. Ancak şu an için mevcut ortamlarda WMIC’i bilmek ve kullanabilmek hala çok değerli. Özellikle eski sistemlerle ve diğer ekiplerin hazırladığı scriptlerle çalışıyorsanız WMIC’i mutlaka öğrenin.

Pratik tavsiyem şu: Hem WMIC hem de PowerShell CimInstance eşdeğerlerini yan yana öğrenin. Böylece eski scriptleri anlayabilir, yeni scriptleri modern standartlarda yazabilirsiniz. Bu yazıdaki örnekleri kendi ortamınızda deneyin, neyi sorgulayabileceğinizi keşfetmek için wmic /? ve wmic [alias] /? komutlarını inceleyin. İyi scriptler!

Yorum yapın