Kullanılmayan Programların Client Makinelerden Otomatik olarak Kaldırılması Bölüm-2

Bir önceki makalede, makinelerde yüklü ancak belirli bir süredir kullanılmayan programları, SCCM ile nasıl izleyebileceğimizi ve raporlayacağımızı anlattık.

Bu makalede de sizlere bu süreci Orchestrator ile iş akışı haline getirip nasıl otomatize edeceğimizi anlatacağım.

Öncelikle operasyonel sürecimiz için ben 3 runbook (iş akışı) hazırladım. Daha fazla veya daha az runbook ile de bu iş yapılabilir tabiki.

Runbook’ların hazırlanmış son halinin ekran görüntülerine öncelikle bir bakalım. Ne iş yaptıklarını anlattıktan sonra her bir Runbook ve kullandığım aktivitelerin detaylarına da adım adım birlikte bakacağız.

İlk Runbook : 1.0 Begin Process to Microsoft Visio

SCCM’de Microsoft Visio’nun kullanılmayan makinelerden kaldırılması için bir collection oluşturduğumuzu ve bu collectiona Visio Uninstall paketini deploy ettiğimizi varsayarak, 2 hafta da bir olacak şekilde collection içerisindeki makineleri silip yeniden güncel kullanılmayan makine listesini collectiona eklemeyi planladığımızı düşünelim.

Bu ilk runbook’u 2 hafta da bir çalışacak şekilde diğer Runbook’ların çalışmasını tetiklemek için hazırladık.

C:\Users\T55032\Desktop\Reports\screenshot.1553.jpg

Resim-1

2. Runbook: Delete Machine from Collection

Bu runbook’ta öncelikle daha önce collectiona eklenmiş ,programın kullanılmadığı makinelerin uninstall deployment sürecini database’den kontrol ederek, uninstall işlemi başarılı olanları collection’dan silinmesi ve başarılı olmayan makinelerin de detaylı bir şekilde hataları ile birlikte kontrol edilmek üzere kaydedilmesi için hazırlandı.

C:\Users\T55032\Desktop\Reports\screenshot.1558.jpg

Resim-2

3. Runbook: Not Usage for Microsoft Visio

Son olarak bu iş akışı da, SCCM DB’den Microsoft Visio’nun son 3 aydır kullanılmadığı güncel makine listesinin yeniden sorgu ile çekilmesi ve arşivlenmesi, sonrasında da güncel listenin daha önce oluşturulmuş Visio Uninstall collection içerisine otomatik olarak eklenmesi için oluşturuldu.

Resim-3

İş akışları ile ilgili genel detay bilgileri verdikten sonra şimdi ilk Runbook’tan başlayarak kullanılan aktiviteleri detaylı bir şekilde açıklayalım:

  1. – Begin Process to Microsoft Visio

C:\Users\T55032\Desktop\Reports\screenshot.1552.jpg

Resim-4

Başlangıç olarak “Monitor Date and Time” aktivitesini kullanıyor ve özelliklerine gelerek, hergün saat 12’de çalışacak şekilde düzenliyoruz ve bir sonraki aktiviteye geçiyoruz. Bu sayede Runbook’u sürekli “Run” konumda bıraktığımızda günde 1 defa çalışacak ve bir sonraki “Check Schedule” aktivitesinin durumuna göre iş akışı devam edecek. Bu süre benim belirlediğim bir süre ve siz daha farklı ayarlayabilirsiniz. Ayarı yaptıktan sonra devam ediyoruz.

C:\Users\T55032\Desktop\Reports\screenshot.1541.jpg

Resim-5

2. aktivite olarak Check Schedule aktivitesini kullanıyoruz. Amacımız da iş akışının bizim belirlediğimiz zaman diliminde çalışmasıdır. Özelliklerine geldiğimizde bizden hazırlanmış bir Schedule seçmemiz isteniyor.

C:\Users\T55032\Desktop\Reports\screenshot.1542.jpg

Resim-6

Bunun için öncelikle bir schedule oluşturmalıyız. Orchestrator Console sol menüden Global Settings ->Schedules kısmına gelip New-> Schedule diyerek devam ediyoruz.

C:\Users\T55032\Desktop\Reports\screenshot.1554.jpg

Resim-7

General kısmında schedule’a bir isim verdikten sonra devam ediyoruz.

C:\Users\T55032\Desktop\Reports\screenshot.1555.jpg

Resim-8

Details sekmesinde zaman aralığı belirliyoruz. Ben iş akışlarının her ayın 2. ve 4. Cuma’sı çalışmasını istediğimden bu şekilde ayarlıyorum. Ayar sonrasında Finish diyerek işlemi tamamlıyoruz.

C:\Users\T55032\Desktop\Reports\screenshot.1556.jpg

Resim-9

İşlem sonrasında schedule template hazır durumdadır. Artık aktivite içerisinden seçebiliriz.

C:\Users\T55032\Desktop\Reports\screenshot.1570.jpg

Resim-10

Yeniden iş akışına gelip “Check Schedule” aktivitesi özelliklerinden oluşturduğumuz template’ı seçerek devam edebiliriz.

C:\Users\T55032\Desktop\Reports\screenshot.1543.jpg

Resim-11

Aktiviteleri sürükle bırak yöntemi ile birbirine linkliyor yani bağlıyoruz. Bu bağlantı linkleri genelde default olarak bırakılsa da kimi zaman custom ayar yapmak gerekebiliyor. Bu bağlantı linklerine çift tıklayıp özelliklerine baktığımızda, bir önceki aktivitenin hangi durumda bitmesi ile bir sonraki aktiviteye geçilmesinin kriterlerini belirleyebildiğimizi görebiliriz.

Check Schedule aktivitesinden sonra bizim belirlediğimiz zaman dilimi gelmişse iş akışının bir sonraki aktivite ile devam etmesi için aktivite sonucunu kontrol etmemiz gerekiyor. Bunun için bağlantı linkine tıklayarak kriteri girmek için devam ediyoruz.

Resim-12

Gelen Link Properties ekranında, General sekmesinde bağlantı linkine bir isim vererek Include sekmesine geçiyoruz.

C:\Users\T55032\Desktop\Reports\screenshot.1545.jpg

Resim-13

Include sekmesinde Check Schedule aktivitesinin “Conforms to Schedule” sonucunu kontrol ettireceğiz. Bu değer, aktivite belirlediğimiz zaman diliminde çalıştığında “True” olarak geri dönüyor. Dolayısı ile de biz de bu kriteri belirliyor ve devam ediyoruz.

C:\Users\T55032\Desktop\Reports\screenshot.1544.jpg

Resim-14

Bir sonraki aktivite olan Get Collection Members aktivitesini SC Configuration Manager aktiviteleri arasından seçerek kullanıyoruz. Bu aktiviteyi kullanmak için SC Configuration Manager Integration Pack’ini Orchestator’a import etmeniz ve sonrasında Runbook Designer Console üst menüden Options kısmına gelerek kullandığınız SCCM ile ilgili connection bağlantılarını girmeniz gerekiyor.

Resim-15

SCCM connection ayarlarını yaptıktan sonra aktiivteden ilgili connection’ı seçiyoruz. Alt kısımda Visio Uninstall için hazırladığımız Collection ID veya Collection Name ‘i yazarak devam ediyoruz. Ben ID yazdım. Siz isim de yazabilirsiniz.

Resim-16

Get Collection Members aktivitesinden sonra hangi aktivite ile devam edileceğine karar vermemiz gerekiyor. Durumu şöyle açıklayalım:

Eğer bu iş akışı ilk defa çalışacak ve halihazırda oluşturulan uninstall collection’ı içerisinde herhangi bir üye henüz yok ise o zaman “Not Usage for Microsoft Visio” iş akışı ile devam edierek collectiona programı kullanmayan makineler eklenecek.

Süreç daha önce çalışmış ve collection içerisinde makineler var ise o zaman uninstallation deployment işlemi başarılı olan makinelerin collection’dan silinmesi için “Delete Member from Collection” iş akışı çalışarak sonrasında diğer aktiviteye geçilecek.

Detaylı bilgileri paylaşıtıktan sonra link özelliklerinden kriterleri ayarlamak için devam ediyoruz.

Resim-17

Üst linkin özelliklerinden,Collection Member Count’unu kontrol edip 0 (sıfır) değilse “Delete Member from Collection” aktivitesi ile devam etmesi için gerekli ayarı giriyor ve devam ediyoruz.

C:\Users\T55032\Desktop\Reports\screenshot.1549.jpg

Resim-18

Alttaki linki de tam tersi kriterde olacak şekilde ayarlayarak bir sonraki aktivite ile devam ediyoruz.

Burada “Invoke Runbook” aktivitesini kullarak linklerden sonra hangi Runbook’un çalışması tetiklenecekse onu seçiyor ve iş akışını tamamlıyoruz.

Resim-19

Birinci iş akışından sonra şimdi de ikinci Runbook’ta kullandığımız aktivitelerin detaylarına birlikte bakalım.

    1. Delete Member from Collection

Resim-20

İlk olarak “Initialize Data” aktivitesi ile Runbook’a başlıyoruz. Bu aktiviteyi herhangi bir parametre girmeniz gerekiyorsa kullanabileceğiniz gibi standard runbook başlangıcında da kullanabilirsiniz. Herhangi bir ayar yapmadan default haliyle bırakabilir ve devam edebiliriz.

C:\Users\T55032\Desktop\Reports\screenshot.1559.jpg

Resim-21

İkinci aktivite yine standard “Qery Database” aktivitesi olacak. Burada Visio Uninstall collection içerisindeki makinelerden, programın başarılı olarak kaldırıldığı makinelerin listesini alabileceğimiz bir sorgu yazıyoruz.

C:\Users\T55032\Desktop\Reports\screenshot.1560.jpg

Resim-22

Bu aktivitede Connection sekmesi de oldukça önemli. Zira aktivitenin hangi SQL Server ve hangi DB’de çalışacağını bu kısımda girmemiz gerekiyor. Aksi takdirde aktivite hata verecektir.

Resim-23

Connection sekmesinde olduğu gibi Timeout sekmesinde de custom ayar yapmak gerekebilir. Bu kısımda yazdığımız sorgunun ne kadar sürede cevap döndüğünü analiz edip ona göre aktivitede bir timeout süresi girmemiz gerekiyor. Bu süre SQL server’ların ve yazılan query’nin detaylarına göre değişiklik gösterebilir.

Resim-24

Aktivite içerisinde kullandığımız Query aşağıdadır. Burada değişken olarak

SiteID: Visio Uninstal Collection ID

Assignment Name: Visio Uninstall programının oluşturulan collection’a deploy edilmesi sonrasında arka planda bir Assignment Name oluşuyor.Bu Assignment Name ‘i bulup yazıyoruz.

Select Name from CollectionMembers where SiteID=’…….’

and Name in

(

SELECT

SYS.Name0

/*CASE

WHEN LEFT(AE.EnforcementState,1) = 1 THEN ‘Success’

WHEN LEFT(AE.EnforcementState,1) = 2 THEN ‘In Progress / Waiting’

WHEN LEFT(AE.EnforcementState,1) = 3 THEN ‘Requirements not met’

WHEN LEFT(AE.EnforcementState,1) = 4 THEN ‘Other / Unknown’

WHEN LEFT(AE.EnforcementState,1) = 5 THEN ‘Failed’

ELSE ‘Other / Unknown’

END AS MESSAGEID

*/

FROM fn_AppDeploymentAssetDetails(1033) AE

JOIN v_ApplicationAssignment AA on AE.AssignmentID = AA.AssignmentID

JOIN v_R_System SYS on SYS.ResourceID = AE.MachineID –AE.ResourceID

where AssignmentName=’………………………………………………’ and LEFT(ae.EnforcementState,1)=1

Group by SYS.Name0,AE.EnforcementState

Tüm deployment’lar sonrasında oluşan Assignment Name’lerin detaylarını aşağıdaki sorgu ile SCCM DB’den çekebilirsiniz.

SELECT

SYS.ResourceID,

SYS.Name0,

AE.AssignmentID,

AA.AssignmentName,

AA.ApplicationName,

AE.EnforcementState,

AE.DTName,

AE.DTCI,

CASE

WHEN LEFT(AE.EnforcementState,1) = 1 THEN ‘Success’

WHEN LEFT(AE.EnforcementState,1) = 2 THEN ‘In Progress / Waiting’

WHEN LEFT(AE.EnforcementState,1) = 3 THEN ‘Requirements not met’

WHEN LEFT(AE.EnforcementState,1) = 4 THEN ‘Other / Unknown’

WHEN LEFT(AE.EnforcementState,1) = 5 THEN ‘Failed’

ELSE ‘Other / Unknown’

END AS Deployment_Status

FROM fn_AppDeploymentAssetDetails(1033) AE

JOIN v_ApplicationAssignment AA on AE.AssignmentID = AA.AssignmentID

JOIN v_R_System SYS on SYS.ResourceID = AE.MachineID

Group by SYS.Name0,AE.AssignmentID,AA.AssignmentName,AA.ApplicationName,AE.EnforcementState,SYS.ResourceID,AE.DTName,AE.DTCI

Bir sonraki “Delete Collection Rule” aktivitesinde SCCM Connection’ı seçtikten sonra alt kısımda bazı ayarlar karşımıza çıkıyor. Burada ;

Collection : Vision Uninstall Collection ID’yi yazıyoruz.

Membership Rule olarak da bir önceki aktiviteden makine isimlerini almamız gerekiyor. Bunun için Membership Rule kriterinde sağ tıklayarak Subscribe->Published Data diyerek devam ediyoruz.

Diğer ayarları default olarak bırakıyoruz.

C:\Users\T55032\Desktop\Reports\screenshot.1562.jpg

Resim-25

Gelen Published Data ekranına baktığımızda bir önceki aktivitenin çalışması sonrasında çıkacak sonuçları görebiliriz. Orchestrator’da aktiviteler arasında bu şekilde verileri alabiliyor ve kullanabiliyoruz.

Bu aktivite sonuçlarından “Full line as a string with field seperated by” seçeneğini seçerek devam ediyoruz.

C:\Users\T55032\Desktop\Reports\screenshot.1563.jpg

Resim-26

Bir sonraki aktivitemiz olan “Junction” aktivitesini default olarak bırakabilir ve devam edebiliriz. Bir önceki aktivitede makineler tek tek alınıp collection’dan silindiği için Delete Collection Rule aktivitesi birçok kez çalışıyor olacak. Bir sonraki aktivite çalışırken bir önceki aktivitenin çalışma sayısı kadar kendisini çalıştırabiliyor. Bu nedenle araya “Junction” koyarak bu durumu engellemiş oluyoruz.

C:\Users\T55032\Desktop\Reports\screenshot.1564.jpg

Resim-27

Bir sonraki aktivite yine “Query Database” aktivitesi ve bu aktivite ile de Visio programı için yapılan uninstallation deployment işleminde hata alınan makinelerin listesini ve detaylarını bir query ile alıyoruz.

C:\Users\T55032\Desktop\Reports\screenshot.1565.jpg

Resim-28

Kullandığımız query’de aşağıdaki gibidir. Burada değişken olarak

Assignment Name gerekiyor. Bir önceki aktivitede bu Assignment Name’leri çekebileceğimiz query’i kullanmıştık. Bu query yardımı ile yine aynı Assignment Name’i elde edebiliriz.

SELECT

SYS.Name0 AS Hostname,

CASE

WHEN LEFT(AE.EnforcementState,1) = 1 THEN ‘Success’

WHEN LEFT(AE.EnforcementState,1) = 2 THEN ‘In Progress / Waiting’

WHEN LEFT(AE.EnforcementState,1) = 3 THEN ‘Requirements not met’

WHEN LEFT(AE.EnforcementState,1) = 4 THEN ‘Other / Unknown’

WHEN LEFT(AE.EnforcementState,1) = 5 THEN ‘Failed’

ELSE ‘Other / Unknown’

END AS Deployment_Status

FROM fn_AppDeploymentAssetDetails(1033) AE

JOIN v_ApplicationAssignment AA on AE.AssignmentID = AA.AssignmentID

JOIN v_R_System SYS on SYS.ResourceID = AE.MachineID –AE.ResourceID

where AssignmentName=’………………………..’ and LEFT(ae.EnforcementState,1)!=1

Group by SYS.Name0,AE.EnforcementState

Hata alınan makinelerin listesini database’den aldıktan sonra bu verileri kontrol etmek ve arşivlemek için “Append Line” aktivitesini kullanıyoruz.

Özelliklerine baktığımızda File olarak herhangi bir paylaşım veya lokalde bir folder altında bir txt oluşturarak verilerin bu txt dosyasına yazılması için ilgili txt file’ı seçiyoruz.

Text kısmında ise bir önceki aktiviteden hangi verilerin txt file’a yazılacağını belirliyoruz.

Sağ tıklayarak Subscribe-> Published Data seçeneğini seçerek devam ediyoruz.

C:\Users\T55032\Desktop\Reports\screenshot.1576.jpg

Resim-29

Bir önceki Query Database aktivite sonuçlarından yine “Full line as a string with field seperated by” seçeneğini seçerek iş akışını tamamlıyoruz.

C:\Users\T55032\Desktop\Reports\screenshot.1578.jpg

Resim-30

Son olarak üçüncü ve son Runbook olan “Not Usage for Microsoft Visio” iş akışının detaylarına bakalım.

    1. Not Usage for Microsoft Visio

Resim-31

Bir önceki iş akışında olduğu gibi iş akışında da “Initialize Data” aktivitesi ile başlıyoruz. Default olarak herhangi bir ayar yapmadan devam edebiliriz.

C:\Users\T55032\Desktop\Reports\screenshot.1523.jpg

Resim-32

Bir sonraki aktivitemiz olan “Query Database” aktivitesi ile Microsoft Visio programının son 3 aydır kullanılmadığı makinelerin güncel listesini SCCM DB’den çekeceğiz. Bu query’i bir önceki makalede sizlerle paylaşmış ve bu makale için kullanacağımızı söylemiştim. İlgili query’i editleyip bu aktivite içerisine kopyalayarak devam ediyoruz.

C:\Users\T55032\Desktop\Reports\screenshot.1524.jpg

Resim-33

Bir sonraki aktivite olan “Append Line” aktivitesi ile yine query ile SCCM DB’den çektiğimiz verileri bir txt file’a yazdırarak arşivliyor ve bir sonraki aktivite ile devam ediyoruz.

C:\Users\T55032\Desktop\Reports\screenshot.1528.jpg

Resim-34

Junction aktivitesi kullanarak yine bir sonraki aktivitenin kendini tekrar etmesini engelliyoruz.

C:\Users\T55032\Desktop\Reports\screenshot.1533.jpg

Resim-35

Junction aktivitesinden sonra Get Collection Members aktivitesi kullanarak Visio Uninstall Collection’ının ID’sini yazıyor ve devam ediyoruz.

C:\Users\T55032\Desktop\Reports\screenshot.1534.jpg

Resim-36

Yine kurtarıcımız olan bir Junction aktivitesi daha kullanıyor ve devam ediyoruz.

C:\Users\T55032\Desktop\Reports\screenshot.1535.jpg

Resim-37

Son aktivitemizde bir powershell script aktivitesi kullanacağız. Bu aktivitede, query ile db’den aldığımız not usage makineleri , powershell script yardımı ile uninstall collection’ı içerisine ekleme işlemini gerçekleştireceğiz.

Aktivite özelliklerine baktığımızda, powershell script’i ilk sekmeye yazacağız/kopyalayacağız.

Hostname olarak bu powershell scriptin hangi server veya makine üzerinde çalışmasını istiyorsak onu yazıyoruz. Ben bu scripti SCCM Primary Site Server üzerinde çalşacak şekilde gerekli ayarı yaptım.İlgili server üzerinde yetkili bir account ve password girdikten sonra script’in detaylarına bakalım.

C:\Users\T55032\Desktop\Reports\screenshot.1536.jpg

Resim-38

Bu arada bunun için kullandığımız aktivite ise “Execute Powershell Script”.

Resim-39

Kullandığımız powershell script, bir txt dosyası içerisindeki makineleri belirli bir collection içerisine import ediyor.

C:\Users\T55032\Desktop\Reports\screenshot.1538.jpg

Resim-40

Aktivite içerisinde kullanılan powershell scripti aşağıda bulabilirsiniz. Script içerisindeki değişkenler

$CMSiteCode SCCM Site Code

$File : Bu iş akışı içerisinde “Append Line” aktivitesi ile query sonucunu yazdırdığımız txt dosyasını kullanabiliriz.

$CMModule=’C:\Program Files\Microsoft Configuration Manager\AdminConsole\bin\ConfigurationManager.psd1′

$CMSiteCode=’…’

$File=”C:\Orchestrator_WorkFlows\Metering\Not_Usage_Lists\Not_Usage_for_MS_Visio\Visio.txt”

$Devices = Get-Content “$File”

$CollectionID=”…….”

$CMSiteCode=$CMSiteCode + “:”

Import-Module $CMModule

Set-Location $CMSiteCode

Foreach ($Device in $Devices)

{

Add-CMDeviceCollectionDirectMembershipRule -CollectionId $CollectionID -resourceid (Get-CMDevice -name $Device).ResourceID

$Client

}

Son aktivitenin de ayarlarını yaptıktan sonra bütün iş akışlarının ve kullanılan aktivitelerin detaylarını tamamladık. Şimdi ilk Runbook’a sağ tıklayak Run diyerek çalıştırmamız yeterli olacak. Bundan sonra belirtilen tarihlerde ilgili iş akışları çalışarak gerekli işlemler otomatik olarak gerçekleşecek.

Resim-41

Sizler de Microsoft Visio programını örnekleyerek yaptığımız bu süreci özellikle kullandığınız farklı uygulamalar için hazırlayabilir, bu sayede lisanslı programlar ile ilgili lisans adetlerinin envanter kontrolünü bu şekilde gerçekleştirebilirsiniz.

Add a Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir