1. Ana Sayfa
  2. Microsoft PowerShell
  3. Microsoft PowerShell – Querying with WMI and CIM – Namespace’lerin Listelenmesi – Bölüm 2

Microsoft PowerShell – Querying with WMI and CIM – Namespace’lerin Listelenmesi – Bölüm 2

Microsoft PowerShell – Querying with WMI and CIM – Namespace’lerin Listelenmesi – Bölüm 2. Namespace’leri listeleme işlemi PowerShell kullanarak kolaylıkla yapılabilir. Bu yol ile bilgisayarın sahip olduğu Repository’ler keşfedilmiş olur.

PowerShell kullanarak Local bilgisayar üzerinde ya da uzak bilgisayar üzerinde bulunan Namespace’leri listelemek için aşağıdaki komut kullanılabilir.

Get-WMIObject –Namespace root –List -Recurse | Select -Unique __NAMESPACE


Resim-1

Komutu çalıştırdığınız zaman komut çıktısı birkaç dakika içinde ekrana yansır. Komut üzerinde dikkat edilecek bir diğer nokta ise __NAMESPACE kelimesi önünde iki adet alt çizgi barındırır. Namespace isimlerinde tab’a basarak tamamlama özelliği mevcuttur.

PowerShell kullanarak WMI ile ilgili işlemler yaparken genelde Windows OS ve donanıma ilişkin bilgileri tutan Root\CIMv2 Namespace’i kullanılır. Bu Namespace varsayılan Namespace’tir ve bu Namespace’e ait instance’lara sorgu yaparken Namespace belirtmeye gerek yoktur.

Windows PowerShell ile belirli bir Namespace altındaki tüm Class’lar listelenebilir. Bu listelemeyi yaparken WMI ya da CIM komutları kullanılabilir.

Get-WmiObject -Namespace root\cimv2 –List


Resim-2

Get-CimClass –Namespace root\CIMv2


Resim-3

Windows PowerShell’de Namespace’ler üzerindeki tab ile komutu tamamlama işlemi sadece CIM komutlarında geçerlidir.

Class’ların listelenmesi belirli bir sıraya göre yapılmaz. Bu sebeple listeleme işlemi yapılırken sort parametresinin kullanılması önerilir. Böylece aranılan Class kolay şekilde bulunabilir.

Root|CIMv2 altındaki Class’lar listelendiğinde bazı Class’ların CIM prefix’i ile bazılarının ise Win32_ prefixi ile başladığı görülür. Burada CIM_ ile başlayan Class’lar abstract Class’lardır. Win32 ile başlayanlar ise abstract Class’ların çok spesific bir versiyonudur ve Windows işletim sistemine ilişkin çok spesifik bilgileri içerirler.

WMI Class’ları çok iyi dökümante edilmediği için ve root\CIMv2 Namespace’i dışında da bir çok Namespace ve Class’lar bulunduğu için, Repository içerisinde bir şeyler bulmaya çalışmak oldukça zor olabilir. Burada uygulanan genel yöntem tahminde bulunmaktır J Tahmin yönü kuvvetli olanlar WMI ve CIM kullanımında bir adım öne geçebilirler J

Repository üzerinde herhangi bir arama sistemi olmadığı için PowerShell kullanarak basit anahtar kelime aramaları yapılır. Örneğin disk ile alakalı bir arama yapılmak istenirse aşağıdaki gibi Keyword kullanılabilir.

Get-CimClass –Namespace root\CIMv2 | Where CimClassName –like ‘*disk*’ | Sort CimClassName


Resim-4

Anahtar kelimeler kullanarak yapılan bu arama Class’lara ait Description’lar üzerinde etkili değildir.

İki alt çizgi ile başlayan Class’lar (__) system Class’larıdır. Bu Class’lar internal olarak WMI ve CIM tarafından kullanılırlar.

Instance Query’leri

PowerShell mimarisinde WMI query’leri oluşturmadan önce hangi Class’a sorgu yapılacağının bilinmesi gerekir. Class biliniyorsa Class’a ait tüm Instance’lar kolaylıkla listelenebilir.

Örneğin Win32_NetworkAdapter Class’ına ait tüm Instance’ları Get etmek için aşağıdaki WMI ve CIM komutları kullanılır.

Get-WmiObject -Class Win32_NetworkAdapter | select name


Resim-5

Get-CimInstance -ClassName Win32_LogicalDisk


Resim-6

İki komut aynı işi yapsalar da çıktıları farklıdır. CIM çıktısı daha okunaklı ve anlaşılırdır.

İki komut içinde Class ve Classname komutları kullanılmadan komuta direk değer yazılabilir.

Get-WmiObject Win32_NetworkAdapter

Get-CimInstance Win32_NetwrokAdapter

İki komutta varsayılanda Class’a ait tüm Instance’ları listeler. Bu sebeple Filter parametresi kullanılarak belirli Instance’ların listelenmesi sağlanabilir.

Filtreleme sırasında dikkat edilecek en önemli nokta kullanılan operatörlerin genel olarak kullanılan PowerShell operatörleri olmadığıdır. Kullanılan operatörlerin geleneksel PowerShell operatörleri ile karşılaştırılması aşağıda yer alan tablodaki gibidir.

Comparison WMI and
CIM
operator
Windows
PowerShell
operator
Equality = -eq
Inequality <> -ne
Greater than > -gt
Less than < -lt
Wildcard
string match
LIKE, with
% as
wildcard
-like, with *
as wildcard
Less than or
equal to
<= -le
Greater than
or equal to
>= -ge
Boolean
AND
AND -and
Boolean OR OR -or

Get-CimInstance -ClassName Win32_NetworkAdapter -Filter “DeviceID=5”


Resim-7

Get-WmiObject -Class Win32_NetworkAdapter -Filter “ServiceName=’Tunnel'”

Eğer bu komutta olduğu gibi String bir değer sorgulanıyorsa (Tunnel değeri gibi) değerin tırnak işaretleri arasında sorgulanması gerekir. Aksi taktirde aşağıdaki hata alınır.

Bunun nedeni WQL sorgularında String değerlerinin bu şekilde sorgulanmasıdır. Date değerlerde de aynı şekilde yazılması gerekir.


Resim-8


Resim-9

Buna karşın bir çok Class Property’lerine ait değerler Intiger formatındadır. Bunların belli anlamları vardır. Örneğin Win32_Logical disk için DriveType=3 local fixed disk anlamına gelirken DriveType=5 optik disk anlamına gelir.

-filter komutu kullanılarak belli Instance’lar nasıl listelenebiliyorsa, komut içerisinde direk WQL sorgusu çalıştırarak da aynı sonuçlar elde edilebilir.

Örneğin bir önceki örnekte çalıştırılan komutu WQL sorgusu kullanarak CIM ve WMI komutları için çalıştıralım.

Get-CimInstance –query “SELECT * FROM Win32_NetworkAdapter WHERE ServiceName = ‘Tunnel’ ”


Resim-10

Get-WMIObject –query “SELECT * FROM Win32_NetworkAdapter WHERE ServiceName = ‘Tunnel’ ”


Resim-11

Bu konuyla ilgili sorularınızı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.

Referanslar

www.mshowto.org

TAGs : Microsoft PowerShell – Querying with WMI and CIM, , , , , , , , ,

Yorum Yap

Yazar Hakkında

Sakarya doğumludur. İstanbul Üniversitesi’nde Matematik/Fen ve Teknoloji öğretmenliğini bitirmiştir. Yüksek lisansını Sakarya Üniversitesi Bilgisayar Mühendisliği’nde yapmıştır. Bilişim sektöründe çeşitli firmalarda sistem ve network sorumlusu olarak çalışmıştır. Bazı kurumlarda sistem ve network üzerine uzmanlık eğitimleri vermiştir. Şu anda Netaş şirketinde kurumsal danışman olarak görev yapmaktadır. Microsoft System Center ürünleri, Powershell ve Azure teknolojileri ile ilgilenmektedir. 2016 yılında Microsoft tarafından Cloud and Datacenter alanında MVP unvanını almıştır.

Yorum Yap