PowerShell Temel DERSLER 8 (WMI ‘a Hükmetme)

Merhaba Arkadaşlar, Powershell ile WMI kullanılmadan önce WMI nedir? konusuna bir gözatalım. WMI, Windows Management Instrument ifadelerinin kısaltılmasıdır. Windows sistemlerini yöneten herkes WMI ile bir şekilde karşılaşmıştır.

Windows işletim sisteminde hemen hemen herşey nesnelerle ifade edilir. Örneğin BIOS,Pil,Ethernet Kartı,işletim sistemi,registry, disk ler vb.

Hatırlarsanız Get-Volume komutu ile bilgisayarımızdaki volume lerin yani disk ve cdrom gibi donanımlar ile ilgili birtakım bilgiler elde edebiliyorduk.

Snap_2018.03.08 09.22.10_001

Bunun gibi başka komutlarlada windowsun bileşenleri ile ilgili işlemler yapabiliriz.

Fakat WMI da windowsun tüm bileşenleri tanımlanmış ve kullanıma sunulmuştur. Yani elimizin altında yüzlerce Class dediğimiz sınıf yapıları, halihazırda WMI erişimi ile kullanımımıza sunulmuş. Aşağıda WMI yapısını browse eden bir uygulama ile alınmış bir ekran görüntüsü var. Buna göre Win32_Processor sınıfına ait kullanılabilecek property leri ve o property lerden birine ait değeri görüyoruz. Onun haricinde yüzlerce binlerce sınıf mevcut ve bunları kullanarak windowsun tüm organ ve organellerine dokunabiliriz. Tabiri caizse bir sinir küpünü avcunuza alıp küpü sağa sola çevirerek hükmetme kabiliyetiniz WMI ile bize verilmiş.

Snap_2018.03.08 09.39.20_002

WMI işletim sistemindeki operasyonları ve yönetim işlevlerini gerçekleştirebilen bir teknolojidir. Bu dersteki amaçlarımızdan biride powershell kullanarak bu WMI yapısında bulunan  sınıflara nasıl ulaşırız onları amaçlarımız doğrultusunda nasıl kullanırız hedeflenmektedir.

Yani WMI ın gücünü powershell ile birleştireceğiz. WMI kütüphanesinde bulunan en yaygın Windows sınıfları ise

Desktop
DiskDrive
DiskPartition
Fan
LocalTime
LogicalDisk
MotherboardDevice
NetworkAdapter
NetworkConnection
OperatingSystem
PingStatus
PortableBattery
Registry
Processor
Printer
ServerConnection
Service
SystemDriver
Volume
USBController
UserProfile
Timezone

Şeklindedir.

Öncelikli olarak bilgisayarımızda WMI servisinin düzgün çalıştığından emin olmamız gerekiyor.Çünkü bize bu imkanı sağlayan servis WMI servisidir. Bunun için Denetim masasında servislere ulaşabileceğimiz gibi powershell consolundanda faydalanabiliriz.

Snap_2018.03.08 10.56.51_004

Evet WMI servisimizin çalıştığından emin olduktan sonra bu servisi nasıl kullanabiliriz. WMI ın nimetlerinden nasıl faydalanırız konusuna geçelim. Öncelikle şunu belirtmem gerekiyor ki internette bu konuda yani WMI ı keşfetme, sınıfları görme, sınıflardaki nesnelerin değerlerini görme konusunda birçok ücretli,ücretsiz araçlar bulunmakta. WMI a aşina olma açısından indirip incelemenizde fayda görüyorum. Ama biz bu işlemi powershell ile yapacagız.

Bunun için ilk kullanacağımız komut Get-WmiObject olacak, komuta WMI sınıflarını          -classname parametresi ile veriyoruz. Örneğimizde Win32_product sınıfı bize işletim sistemimizdeki kurulu programları ve özelliklerini verir.

Get-WmiObject -class win32_product  | Select-Object Name,InstallDate komutunu verdiğimizde WMI ın win32_product sınıfını kullanarak işletim sistemimizdeki kurulu uygulamaları görebiliyoruz.

Snap_2018.03.08 17.34.41_012

Bu komutu -computername parametresi ile kullanırsak pc1 olan uzak bilgisayar içinde sonuçlar alabiliriz.

Get-WmiObject -class win32_product -computername pc1  | Select-Object Name,InstallDate 

Get-WmiObject in alternatifi bir komutta Get-CimInstance komutudur. Get-WmiObject ile aynı işi yapar biraz daha gelişmiş ve yeni bir komuttur. Şimdilik farklarını anlatıp kafanızı karıştırmak istemiyorum.

Get-CimInstance -classname win32_product  | Select-Object Name,InstallDate
Get-CimInstance -classname win32_product -computername pc1  | Select-Object Name,InstallDate

WMI ı keşfetmeye devam edelim. Bir önceki dersimizde Get-Member komutu ile komutlarımızı keşfedip onların ne gibi property ve metodları vardı onları görebiliyorduk. Aynı işlemleri Get-CimInstance içinde kullanalım

Neler yapabiliriz? Get-Member ile görelim.

Get-CimInstance -classname Win32_product |Get-Member -MemberType Property

Amacımızı belirledik. Şimdi uygulayalım.

 Get-CimInstance win32_product | Select-Object Name,InstallDate ,InstallSource,Vendor,Packagename

Örneklerimizin ekran görüntüleri.

Snap_2018.03.08 17.39.37_013

Hatırlayalım methotları (). ile özellikleri Select-Object veya . ile çağırıyorduk.

Get-Wmiobject -list komutu ile tüm WMI sınıflarını görebiliriz veya

Get-CimInstance yazdıktan sonra TAB tuşuna basarak WMI sınıfları arasında dolaşabiliriz.

Şimdide birkaç örnek daha yaparak makalemizi tamamlayalım.

win32_operatingsystem 

Get-CimInstance win32_operatingsystem

Get-CimInstance win32_operatingsystem | Get-Member -MemberType property

Get-CimInstance win32_operatingsystem | Select-Object InstallDate,LastBootUpTime,SystemDrive,Version,Serialnumber,OSType,FreePhysicalMemory,Status,NumberOfUsers,WindowsDirectory

Snap_2018.03.08 17.51.16_014

Win32_UserAccount

Get-CimInstance Win32_UserAccount

Get-CimInstance Win32_UserAccount | Select-Object Name,SID,PasswordChangeable,PasswordExpires,PasswordRequired,Status

Get-CimInstance Win32_UserAccount | Where-Object Name -like '*schwarzen*' | Select-Object Name,SID,PasswordChangeable,PasswordExpires,PasswordRequired,Status

Snap_2018.03.08 17.53.58_015

win32_physicalmemory

Get-WmiObject win32_physicalmemory | Format-Table Manufacturer,Banklabel,Configuredclockspeed,Devicelocator,Capacity,Serialnumber -autosize

Snap_2018.03.08 17.55.52_016

Win32_ComputerSystem

Get-CimInstance Win32_ComputerSystem | Select-Object Name,Manufacturer,ThermalState,KeyboardPasswordStatus,NumberOfProcessors

Snap_2018.03.08 17.57.01_017

Arkadaşlar, WMI sınıfları binlercedir hepsini anlatmaya makaleler yetmez. O yüzden WMI sınıflarını araştırıp işinize yarayanları Get-WmiObject veye Get-CimInstance komutu ile işlemeniz gerekiyor. WMI larla ilgili olarak internetten bir dünya dolusu araç bulabilirsiniz bunlar çok esnek olmayan sınırlı araçlardır.

Powershell bu sınırları kaldırır. GUI (Graphical User Interface) nin krallığı Powershell e kadardır 🙂

Böylelikle bir makalenin daha sonuna geldik. Yorum ve görüşlerinizi bekliyorum.

Kürşat ARI / System Engineer & PowerShell Developer

 

 

 

 

 

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s