Distributed Application da objelerin hangi distributed applicationda bulunduğunu powershell ile bulma

Bir sürü Distributed Application 'ınınız var fakat hangi object'i hangi distributed application içinde nerede kullandınız bilmiyorsunuz yada kontrolden çıkmış durumda. Bü tür senaryolarda klasik yöntemleri kullanmamız oldukça zor, bu durumda Operations Manager Powershell consol'unu kullanmamız lazım. Powershell özellikle Exchange ve operations managerda çok yaygın kullanılan bir consol. Elimden geldiği kadarı sizi bu konuda bilgilendireceğim, yapılanlar oldukça şaşırtıcı.

Önemli bir bilgi olarak, tüm distributed application class'ı en tepede yer alır yani System.Service bazlıdır.

Örnek olarak MyDa1 adında bir distributed application'ımızın olduğunu ve bunun yanında ayrıca Operations manager, exchange 'in de management packlerden gelen distributed applicationları olduğunu düşünelim.

kel

MyDa1 'in içinde 2 adet component mevcut, MyComponent1 ve MyComponent2. Bu componentler is bir çok obje olduğunu düşünelim. Şimdi örnek olarak MSSQLSERVER nesnesinin hangi componentlerde olduğunu bulmak istersek aşağıdaki powershell kodunu kullanabiliriz.

$daClass=get-monitoringclass -name:System.Service

$da=get-monitoringobject -monitoringclass:$daClass

$objects=$object | %{$_.displayname}

$object=($da |%{$_.GetRelatedMonitoringObjects()})|%{$_.GetRelatedMonitoringObjects()}

function bul($objectName)
{

$results = ($da |%{$_.GetRelatedMonitoringObjects()}) | %{$_.GetRelatedMonitoringObjects()} | ?{$_.displayname -like $objectName} | %{$_.GetParentMonitoringObjects()} | %{$_.displayname}
function DAbul($compName)
{
($da |%{$_.GetRelatedMonitoringObjects()}) | ?{$_.displayname -like $compName} | %{$_.GetParentMonitoringObjects()} | %{$_.displayname}
}
   

    foreach($result in $results)
{
write-host Component Name: (Dabul $result) -foregroundcolor red
write-host Object Name: $result -foregroundcolor darkmagenta
write-host " "
}

}

if($args[0] -eq "list")
{
$object | %{$_.displayname}
}
else { bul($args[0]) }

Bu kodu ps1 uzantısı ile kayıt edelim ve denemesi yapalım.

DA.ps1 olarak kayıt ettiğimizi farz edelim. Mevut objeleri bulmak için "list" parametresini kullanalım. Lütfen Operations manager powershell konsolu kullandığımıza dikkat edelim, mevcut default powershell konsolunda kullanabilmiz için snap-in olarak eklememiz lazım.

>da.ps1 list
W2k8x64LabRMS.oprlab.com
w2k8x64client.oprlab.com
w2k3x86client.oprlab.com
w2k8x64client.oprlab.com
w2k3x86client.oprlab.com
exchange2k7.oprlab.com
Site (Default-First-Site-Name)
MSSQLSERVER
Microsoft.Windows.InternetInformationServices.2008.ServerRole
MSSQLSERVER
Microsoft Windows Server 2008 R2 Enterprise
DEFAULTIPSITELINK
Default-First-Site-Name
oprlab.com

Çıkan listeden daha evvel belitmiş olduğum MSSQLSERVER nesnesini test edelim.

>da.ps1 MSSQLSERVER
Component Name:
Object Name: SQL Instances

Component Name:
Object Name: w2k8x64client.oprlab.com

Component Name:
Object Name: SQL 2005 DB Engine Group

Component Name: MyDA1
Object Name: MyComponentGroup1

Component Name: W2k8x64LabRMS.oprlab.com Operations Manager Management Group
Object Name: W2k8x64LabRMS.oprlab.com

Component Name: MyDA1
Object Name: MyComponentGroup2

Sizin de dikkatinizi çektiği gibi çıkan sonuçta bazı Component Name alanları boş, bunun sebebi bunların aslında distributed application olmamaları ve System.Service bazlı yani direkt olarak altında yer alan guruplar olması. Kodda minik bir iki değişiklikle bu kaldırılabilir ama çıkan sonuc belki beklentilerimizi biraz öteye götürebilir.

Bşaka bir örnek :

>da.ps1 Microsoft.Windows.InternetInformationServices.2008.ServerRole
Component Name:
Object Name: IIS Instance Group

Component Name:
Object Name: w2k8x64client.oprlab.com

Component Name: MyDA1
Object Name: MyComponentGroup1

Component Name:
Object Name: IIS 7.0 Server Role Instance Group

Component Name:
Object Name: IIS Server Group

Çalışmamda büyük katkıda bulunan canım arkaşım Can Dedeoğluna çok teşekkürler. Powershell hakkında daha fazla bilgi edinmek isteyenler Can Dedeoğlu'nun blogunu takip edebilirler https://blogs.msdn.com/candede.

Gültekin Bütün