Skip to main content

· 4 min read

Artık Automation yazımızın son bölümüne geldik. Oluşturduğumuz iki adet Runbook ( StartVM ve StopVM) içerisine Powershell Workflow kod bloklarımızı yazalım. Bu kısımda ilk olarak "PeakUp-StartVM" adındaki Runbook aktivitesini geliştirmek olacak. Runbook aktivitesinin adında anlaşılacağı gibi, belirlediğimiz Virtual Machine Start etmek için kullanacağımız "Start-AzureVM" cmdletini bir döngü içerisinde kullanıp ve bu cmdlet içerisine parametreler göndererek Workflow içersinde kullanacağınız. Bu parametreler, "Start-AzureVM" cmdlet'ine ait mandatory(zorunlu)olarak adlandırıyoruz. "PeakUp-StartVM" runbook aktivitesinin içerisine girip "Author" sekmesinden Draft bölümüne aşağıdaki bulunan kod bloğunu yapıştıralım ve "Publish" edelim.

100615_2045_AzureAutoma1.png

workflow PeakUp-StartVM { #Check to Day $day = (Get-Date).DayOfWeek if ($day -eq 'Saturday' -or $day -eq 'Sunday'){ exit }

# Static variables taken from Azure Automation Assets
$Credential = Get-AutomationPSCredential -Name 'ServiceAccount'
$SubscriptionId = Get-AutomationVariable -Name 'SubscriptionId'
Write-Output "Subscription Id is: $SubscriptionId \`n"
# Connect to Azure
Add-AzureAccount -Credential $Credential
# Select the Azure subscription to use in this workflow
Select-AzureSubscription -SubscriptionId $SubscriptionId
# TODO : replace with your Azure VMS / Service names
$VMsToStart = @(
@{
Name = "Student"
ServiceName = "studenttest"
},
@{
Name = "VmName2"
ServiceName = "VmName2"
})
Foreach ($VM in $VMsToStart){
Start-AzureVM -Name $vm.Name -ServiceName $vm.ServiceName}

}

Publish ettikten sonra, Kod tarafını biraz açıklama gereği hissediyorum. Bir çok kişinin aklına takılabilecek olan yerler var. İlk önce, "IF" statement içerisinde yazdığımız kısım Runbook aktivitesi hergün çalışacağından dolayı hafta sonuna denk geldiği anda Statement doğru olduğu zaman ilgili kod blok devreye girerek Workflow sonlandıracaktır. "IF" kısmı yazmamızın sebebi, Runbook aktivitesini Schedule ederken hafta sonu gibi bir belirtme şansımız olmadığı için bunu Workflow içerisin de belirttim.

Kod bloğu içerisin de diğer satırların açıklamları şu şekilde

  • Line 9 – 11 : Tanımlamış olduğumuz Asset içerisinden çağırıp değişkenlere atayarak Powershell Workflow'un ilerleyen satırlarında çağırmak için yapılan aksiyondur.
  • Line 13 : Add-AzureAccount cmdlet sayesinde Azure kaynaklarına erişmek için subscription eklenmesi sağlanmıştır.
  • Line 15 : Eklenen hesabın içerisinde birden fazla Subscription olacağından dolayı işlem yapılmak istenen SubscriptionId gönderilerek seçilmiştir.
  • Line 17 : Hashtable oluşturarak, işlem yapılması istediğimiz VM'lerin Name ve CloudService isimlerini bir tablo haline getirerek döngü içerisinde kullanılması hedeflenmiştir.
  • Line 26-28 : Oluşturulan HashTable içerisindeki her Item için foreach döngüsü kullanarak Start-AzureVM cmdlet içerisine parametre gönderilerek Runbook aktivitesinin yapılması istenen iş gerçekleştirilmiştir.

Sıra geldi "PeakUp-StartVM" isimli Runbook aktivitemizi Schedule etmeye işlemine, geliştirilen Runbook aktivitesi herhangi bir şirketin mesai saati başladığı zamanlarda ilgili Virtual Machine otomatik bir şekilde başlatması hedeflenmektedir. Bu schedule işlemini yaparken optimum saatin belirtlenmesi önemlidir. Ben şimdilik hergün "08:00" olarak schedule olarak çalışacak şekilde ayarlayacağım.

100615_2045_AzureAutoma2.png

"PeakUp-StartVM" adlı runbook aktivitesini Schedule bir duruma getirdik. Schedule sekmesine gidelim ve kontrolleri sağlayalım.

Schedule bir şekilde çalışacağını gördükten sonra, "PeakUp-StopVM" adlı Runbook aktivitesinin geliştirme aşamasına geçebiliriz. Yapacağımız aslında çok basit, "PeakUp-StartVM" adlı runbook içerisinde yazdığımız kod bloğunun sadece, Start-AzureVM cmdlet'i yerine "Stop-AzureVM" kullanıp Schedule ederken ilgili değişkeni göstermek. Hemen Runbook editor kısmına gelip Powershell Workflow yazıyorum.

100615_2045_AzureAutoma4.png

workflow PeakUp-StopVM { #Check to Day $day = (Get-Date).DayOfWeek if ($day -eq 'Saturday' -or $day -eq 'Sunday'){ exit }

# Static variables taken from Azure Automation Assets
$Credential = Get-AutomationPSCredential -Name 'ServiceAccount'
$SubscriptionId = Get-AutomationVariable -Name 'SubscriptionId'
Write-Output "Subscription Id is: $SubscriptionId \`n"
# Connect to Azure
Add-AzureAccount -Credential $Credential
# Select the Azure subscription to use in this workflow
Select-AzureSubscription -SubscriptionId $SubscriptionId
# TODO : replace with your Azure VMS / Service names
$VMsTostop = @(
@{
Name = "Student"
ServiceName = "studenttest"
},
@{
Name = "VmName2"
ServiceName = "VmName2"
})
Foreach ($VM in $VMsTostop){
Stop-AzureVM -Name $vm.Name -ServiceName $vm.ServiceName -Force}

}

"PeakUp-StopVM" isimli Runbook aktivitemizi Publish ediyorum ve Schedule işlemiyle devam edelim. Geliştirilen Runbook aktivitesi herhangi bir şirketin mesai saati bitiği zaman ilgili Virtual Machine otomatik bir şekilde kapatılması istiyoruz. Hatırlarsanız, Schedule değişkenimizi bir önceki yazımızda Powershell ile yaratmıştık ve orada ilgili değerleri hergün "19:00" olarak belirttik. Şimdi Schedule işlemini Powershell aracılığı ile gerçekleştirelim.

100615_2045_AzureAutoma5.png

Runbook aktivitesini Powershell ile Schedule etmek için, "Register-AzureAutomationScheduleRunbook" cmdlet bizlere yardımcı oluyor. Bu cmdlet içerisine "AutomationAccount","RunbookName" ve "Schedule" objesini göndererk register işlemini gerçekleştirdik. Artık yapmamız gereken, Runbook aktivitesini belirtlediğimiz aralıklarda Virtual Machine için gereken aksiyonları yapacaktır. Basit bir Runbook ile maliyet tarafında çok büyük avantajlar sağladık. Yazımıza son olarak bir cümle eklemek istiyorum, Azure Automation da yapabilecekleriniz sizin hayal gücünüze bağlı olduğunu unutmayalım.

· 5 min read

System Center Orchestrator içerisinde kullanılan bir kavram olan Runbook, Service Management Automation ve Azure Automation içerisinde aynı isimle anılmaktadır. Bir Runbook aktivitesi kurumunuz içerisin de tanımlı olan iş süreçlerini, sistem ve yazılım bileşenlerini içeren çeşitli şirket operasyonlarını bir araya getirilerek oluşturulduğu rutin süreçler olarak söylenebilir. İlgili Runbook senaryoları oluşturulurken en uygun çözümleri içeren akış şemaları çizilir. Bu süreçlere örnek verecek olursak, Maintance ve Life Cycle Management, Log Management. söylenebilir.

Azure Automation üzerinde Runbook oluştururken karşımıza birçok yöntem çıkmaktadır. Şimdi bu kısımları sırasıyla inceleyelim.

  • Import Runbook : Kendi ortamınızda hazırlamış olduğunuz Powershell Workflow syntaxına uygun bir şekilde ".ps1" uzantılı dosyalarınızı upload yöntemiyle oluşturduğumuz yöntemdir.
  • Import From Gallery : Powershell ile ilgilenenler Technet Script Center üzerinden ihtiyacımız olan bir çok Powershell Script'lerini bulabilmekteyiz. Azure Automation için paylaşılan tüm hazır Runbook şablonlarına "Import runbooks from the Gallery" tıklayarak ulaşabilirsiniz. Gallery içerisine isterseniz, Automation Dashboard ekranından ulaşabilirsiniz.
  • Quick Create Runbook : Bu yöntem ile Automation hesabınız içerisin de yeni bir Runbook oluşturabilirsiniz. Oluşturduktan sonra, ihtiyacınıza göre Powershell Workflow'unuzu geliştirebilirsiniz.

Yukardakilerin dışında eklenebilecek ufak bir konu daha var. On-Premises yapıda kullanılan Orchestrator üzerinde bulunan mevcut flow chart yapısını Automation içerisine aktarmak istenildiği zaman akıllara Migration senaryoları gelmektedir. Bunun için Microsoft'un geliştirdiği System Center Orchestrator Migration Toolkit sayesinde SMA ve Azure Automation üzerine taşıma senaryolarını desteklemektedir.

Runbook oluşturma yöntemlerinden bahsettikten sonra, Quick Create yöntemiyle bir adet oluşturalım. Bunun için Azure Portal içerisinden "New" Butonua basılır,

Karşımıza gelen ekranda, Runbook > Quick Create tıklanarak, Runbook Name, Description, Automation Account gibi bilgiler belirtilir. Hemen alt kısımda dikkatimizi çekmesini istediğim nokta, "From Gallery" tıklanarak yukarıda bahsetmiş olduğumuz Runbook oluşturma adımlarının "Import From Gallery" buradan da gerçekleştirebilirisiniz.

100515_2128_AzureAutoma2.png

Create butonuna tıkladıktan sonra, "PeakUp – StartVM" adındaki Runbook oluşturma işlemini tamamlayalım.

100515_2128_AzureAutoma3.png

Azure Portal da Runbook oluşturma işlemi tamamlandıktan sonra, Automation Account içerisinden Runbook sekmesi içerisine gittiğimiz zaman artık Runbook içerisine Powershell Workflow yazabiliriz. İsteğe bağlı olarak yukarıda görüldüğü gibi "Edit Runbook" diyerek Runbook içerisine girebilir ve Powershell Workflow geliştirme sürecine başlayabilirsiniz. Şimdi Runbook aktivitesi içerisindeki sekmeleri sırasıyla ne iş yaptıklarını anlayalım.

Dashboard : Runbook içerisinden ulaştığımız bu sayfada görmek istediğiniz Runbook aktivitesi için özet görünüm sunar. Tarafımıza sunulan grafik isteğe bağlı olarak ekranın sağ üst köşesinden zaman aralığını belirtebilirsiniz. Bu gösterilen rapor içerisin de Runbook aktivitesinin "Queued, Failed, Stopped" gibi kavramlar göreceksiniz. Bu sayfayı lütfen Automation Account içerisinde anlattığımız Dashboard sayfası ile karıştırmayalım. Bu ekranda sadece seçtiğiniz Runbook aktivitesinin durumunu görmektesiniz.

Jobs : Seçilen Runbook aktivitesinin Schedule bir şekilde ayarlandıktan sonra çalışan tüm işlerin sonuçları liste halinde görmemizi sağlar. Bu sayfa içerisin Runbook aktivitesi çalıştıktan sonra işin durumunu ve detaylı bilgiyi buradan alabilirsiniz.

Author : Runbook içine girildiği (Author) kısmına "Draft" ve "Published" kavramları bizleri karşılıyor. Bu ekran içerisin de Powershell Workflow syntax yapısına uygun yazılan kod bloklarına "Draft" üzerinde Runbook Editor ile geliştirme yapılabilir veya geliştirilen Powershell Workflow sürecinin istenilirse Runbook Editör üzerinden "Test" işlemleri yapılmaktadır. Geliştirme süreci bittikten sonra, "Publish" tıklanarak ve yayınlanır. "Publish" edilmeden herhangi bir "Schedule" ataması gerçekleşemez. Herhangi bir Runbook "Publish" edildikten sonra, kod blokları içinde düzenlenme gerekir ise tekrar "Draft" bölümüne gelip değiştirilmesi gerekir.

Schedule : Bu kısımda Runbook için herhangi bir Schedule ataması gerçekleştirebiliriz. Assets kısmından Schedule tipinde bir değişken tanımlası yaptıysanız buradan link edebilir veya kendiniz bu sayfa içerisinden ilgili değişkeni oluşturup atamasını yapabilirsiniz.

Configure : Configure sekmesini kullanarak mevcut yapılandırmayı değiştirebilirsiniz. Bu sekme içerisin de Runbook özeline ait tüm ayarları yeniden yapılandırabilme şansımız var. Eğer dilerseniz, Runbook başlama ve bitişine kadar ayrıntılı Log detayları görme şansına sahipsiniz. Bunları görmek için, Configure sekmesi içerisinden "Log Verbose Records" ve "Log Progress Records" özelliklerini aktif hale getirmeniz gerekiyor. Akıllara hemen şu soru geliyor olabilir, Log ayrıntılarına nereden bakılabilir? Jobs içerisinden "History" sekmesi sizlere yardımcı olacaktır. Bununla beraber yine bu sekme içerisinden Runbook aktivitenize "Tag(Etiket)"atanabilir.

Runbook aktivitesi içinden "Author" sekmesine gelelim. Runbook Editör olarak adlandırdığımız sayfa bizleri karşılıyor olacak. Bu bölümde Powershell Workflow sürecinizi geliştirdiğiniz yer, Runbook aktivitesini geliştirme söz konusu iken kısa bir not düşelim. Tüm bu Runbook geliştirme süreçlerini Powershell ISE üzerinden geliştirsek çok da güzel olurdu düşünenleriniz olabilir. Kulağa hoş geliyor evet, böyle bir şansımız var. Github üzerinden indireceğiniz Add-on sayesinde dilerseniz Azure Automation için geliştireceğiniz Runbook aktivitelerini Powershell ISE ile yapmanız mümkün.

Bkz : https://github.com/azureautomation/azure-automation-ise-addon

100515_2128_AzureAutoma4.png

Dilerseniz geliştirdiğiniz Runbook aktivitesini nasıl Schedule hale getirebiliriz ondan bahsedelim. Runbook aktivitesi içerisinde geliştirme işlemleri bitti ve "Published" olarak ayarladınız ve gereken "Test" işlemleriniz hepsini yaptınız. Artık aktiviteniz hazır durumda, Schedule tabı içerisine gelip, Mevcut bir Schedule olarak tanımlanmış değişkeniniz var ise onu gösterebilir veya yeni oluşturarak Runbook aktivitesini Schedule edebilirsiniz.

100515_2128_AzureAutoma5.png

"Link to New Schedule" tıklayarak, yeni bir Schedule değişkeni yaratıp atamasını yapabilirsiniz. "Link to an Existing Schedule" ise Assets kısmında daha önceden yarattığınız veya başka bir Runbook için de kullandığınız Schedule değişkenini tekrar bu bölümde kullanabilirsiniz.

100515_2128_AzureAutoma6.png

Günlük, saatlik veya belirlediğiniz bir saatte çalışabilir. Dilerseniz Schedule için bir expire tarihi belirtme şansınızda var. "Complete" butonuna basıyorum ve Runbook aktivitemi Schedule edelim.

100515_2128_AzureAutoma7.png

· 3 min read

Yazımıza Powershell Class yapısı içerisinde Constructors ( Yapıcı Method) kullanımı ile devam ediyoruz. Makale serimizin birinci bölümünde bahsettiğimiz Constructors ( Yapıcı Method) yapısını Powershell içerisin de kullanımı göreceğiz.

Constructors yapısını anlamak için Makale Serimizin 1.bölümünde bulabilirsiniz. Birçok yazılım dilinde herhangi bir class'tan "new" anahtar sözcüğüyle yeni bir nesne oluşturulduğu anda çalışan metottur. Class'tan bir nesne oluştururken biz bunu "new" anahtar sözcüğü kullanarak yapmaktayız. Basit bir örnek verecek olursak; bizim Student adında bir class'ımız olduğunu varsayalım. Student Class'ından oluşturacağımız nesne "Student Std = new Student ();" şekilde kullanmaktayız. Buradan anladığıız her class için biz tanımlamasak da kesinlikle bir Constructor ( Yapıcı Method) vardır. İşte bu olaya varsayılan Constructor method olarak anılmaktadır.

Constructors yapısının özellikleri

  • Constructor oluşturulduğu zaman Class ismiyle aynı olmak zorundadır.
  • Constructor methodlar isteğe bağlı bir şekilde parametre alabilirler.
  • İstenilirse, bir class içerisinde birden fazla Constructor kullanılabilir. Herhangi bir sınır yoktur.

Neden Constructors kullanılır?

  • Constructor kullanarak oluşturulan objelere ilk değer atamaları yapabiliriz.
  • Class içerisine parametre haline getirerek objelere belli değerleri vermesi konusunda zorlanabilir.
  • Constructor ile obje oluşurken arka tarafta yapılacak isteğe bağlı işlemlerin uygulanması sağlanabilir.

Şimdi hemen "Employee" adında bir Powershell Class oluşturalım ve içerisinde "FirstName","LastName","Title","StartYear" objelerimizi yaratalım.

092315_1133_Powershell51.png

"Employee" adında class yaratıktan sonra, artık Class ismini [Employee] yazarak erişebilir durumdayız. Class içerisinden New methodunu çağırdığımız zaman arka tarafta Default Constructor devreye girerek objelerin yaratılmasını sağlayacaktır.

092315_1133_Powershell52.png

Class içerisinden objeleri Constructor sayesinde yaratıldı. Constructor içerisine hiçbir değer göndermedik. Kendi Constructors yazmaya sıra geldi. Burada önemli bir nokta var. Yazımızın başında belirttiğim gibi oluşturacağımız Constructor methodları Class adıyla aynı olmak zorundadır.

092315_1133_Powershell53.png

Class adı ve oluşturacağımız Constructor adını aynı yaptıktan sonra, parantez içerisinde bir "String" tipinden bir "$FirstName" adında değişkeni tanıtmış bulunuyorum. Bu değişken Constructor için bir parametre gönderebileceğimiz anlamına gelmektedir. Bu kısımda dikkatinizi çekmenizi istediğim bir nokta daha var. Süslü parantezler içerisinde "$this.FirstName" adında değişken kullanılmış ve bunun karşısına "$FirstName" atanmış durumdadır. Bu kısımdaki "$this" değişkeninin bizlere sağladığı özellik, Class içerisindeki nesnelere erişmemizi sağlıyor. Bu Constructor methodu kullandığımız zaman parametre olarak bizden "FirstName" isteyecektir. Bu değeri gönderdikten sonra Method içerisinde ne şekilde atamasını gerçekleştirdiysek obje yaratılması o şekilde olacaktır.

092315_1133_Powershell54.png

Yukarıda görüldüğü gibi [Employee]::New şeklinde yazıp çalıştırdığım zaman karşımıza Class içerisinde tanıtmış olduğumuz Constructor Methodumuz gelmiş durumdadır. Bununla beraber Constructor için tanımlamış olduğum "String" tipinde parametremi görüyorum. Açıklamamız gereken başka bir nokta ise, "Overload" kelimesi Türkçe olarak düşündüğümüz de "Aşırı Yük" anlamına denk geliyor. Herhangi bir class içerisin de aynı isimle Constructor var ise bunlar overload edilerek farklı parametreler ile birden fazla tanımlanabiliyor. Bazen Constructors aynı işi farklı parametreler ile yapabilirler.

Şimdi bunun kullanımı görelim.

092315_1133_Powershell55.png

[Employee]::New("Engin") olarak Constructor methodumu çalıştırdığım zaman gönderdiğim parametre sayesinde ilgili objeye ataması gerçekleşip obje yaratılmış durumdadır. Class içerisine yeni bir Constructor tanıtalım.

092315_1133_Powershell56.png

Tanımlamış olduğum Constructor'ları "[Employee]::New" yazarak methodları tekrar listeyelim.

092315_1133_Powershell57.png

Class içerisinde yazdığımız gibi tüm Constructors hepsini görüyorum ve farklı parametreler almaktalar. Şimdi Constructor çağıralım ve içerisinde iki adet parametre göndererek objemizin yaratılmasını sağlayalım.

092315_1133_Powershell58.png

Görüldüğü gibi, Constructor içerisine iki adet "String" tipinde parametre göndererek objelerimizin oluşturulmasını sağladık. Constructor yapısını Powershell Class içerisin de kullanımı inceledik.

· 3 min read

Yazımızın ikinci serisi ile devam ediyoruz. Class yapısını detaylı bir şekilde incelemeye devam edelim. Şimdi ise Class yapısı içerisin de Enum (Enumarator) kullanacağız fakat önce yapısından bahsedelim.

Enum (Enumaration) Nedir ?

Bu yapı yazılım dilinde enum, enumaration ya da enum sabitleri olarak adlandırılır. Değişkenlerin alabileceği değerlerin sabit (belli) olduğu durumlarda programı daha okunabilir hale getirmek için kullanılır. Programda birçok değişkene tek tek sayısal değer vermek yerine "Enum" kullanılabilir. Özet olarak "enum" yapısı sayıları anlamlı şekilde isimlendirerek kullanabilmeye izin verir.

Bu yapıya her yazılım eğitimin de verilen örnek ile kolayca ilerleyelim. SehirPlakalari isimli Enum yapısı içerisinde birkaç sehir ve bunlara atanan sayısal değerler (Plaka Numarası) tanımlanabilir. Ben Istanbul'u çağırdığım zaman karşıma ilgili Plaka Numarasının gelmesini isteyebilirim. Enum yapısının içindeki tanımlamaları yaptıktan sonra Class yapısı içerisin de kullanmayı göreceğiz. Ama şimdi hemen Enum ( Enumaration) tanımlamasını yapalım.

Hatırlarsanız, Class tanımlarken keyword olarak" Class" kullanıyorduk. Enum ( Enumaration) tanımlarken keyword olarak "Enum" ve daha sonra EnumName şeklinde kullanacağınız.

Yukarıdaki örnek içerisin de SehirPlakaları adında bir Enum oluşturdum ve içerisine üyelerimi tanıttım. Şimdi artık yapmam gereken bu Enum listesi içerisinden istediğim değeri çağırarak çıkan sonucu görmek.

Enum yapısını çağırmak için, " [EnumAdı]::Name " şeklinde kullanmanız gerekiyor. Fakat bu şekilde çağırdığınız zaman ilgili seçilen karşınısındaki değere ( Örnek : Ankara seçtiğimiz zaman 6 değerinin gelmesini istiyoruz.) sahip olmanız için aşağıdaki şekilde kullanmanız gerekiyor.

Yukarıdaki örnek içerisin de [SehirPlakalari]::Ankara içerisindeki değere ulaşmak için Enum yapısı içerisindeki değeri çağırdık. "[SehirPlakalari]::Ankara.Value__" şeklinde değeri ekrana döndürdük. Şimdi Enum yapısını Class içerisinde kullanımına geçelim. Basit bir Araba adında Class oluşturacağım ve bunun için de Model, Manufacturer, Year ve Color gibi nesneler tanımlaması yapacağım. Daha sonrasında burada Color nesnesini sabit değer alabileceğini varsayıp Enum yapısına çevirelim.

Yukarıda görüldüğü gibi, Class tanımlamasını yaptık. Şimdi burada Color nesnesini Enum yapısına dahil edelim.

Class ve Enum detaylarını yukarıdaki gibi görebilirsiniz. Bu kısımda dikkatinizi çekmek istediğim bir nokta var, bir önceki resim de "Color" nesnesinin veri tipi "String" olarak tanımlanmış durumdaydı. Fakat ben bu nesneyi Enum yapısı içerisine alarak veri tipi kısmına tanımlamış olduğum Enum adını yazmış bulunuyoruz.

Şimdi kullanım şekline geçelim hemen, Aşağıdaki görüldüğü gibi Class yaratmak için New-Object Cmdlet kullanarak Class adını yazdım ve "A" isimli değişkene atamış durumdayım. "A" değişkenini çağırdığım zaman karşıma Class içerisindeki objeleri görmekteyim.

"A" değişkenini Color object içerisine değer atarken yukarıdaki dikkat ettiyseniz "1" yazmış bulunmaktayım. Bu rakam bana Enum içerisin de karşına tanımladığım değere denk gelmektedir. Enum içerisin de "1" değerinin karşına geldiği kısım "Red" değeri olduğu için, artık Class içerisindeki objeye içerisine "Red" ataması gerçekleşecektir.

Bununla beraber artık ilgili objeye Enum dışında tanımlanmış herhangi bir değer atama şansını bulunmuyor. Aşağıdaki örnekte Enum içerisinde olmayan bir değeri ilgili objeye atamaya çalıştığınız da aldığımız hatayı görebilirsiniz.

· 4 min read

Blog içerisinde Powershell v5.0 ile yeni gelen özellikleri paylaşmıştım. Eğer Windows 10 kullanıyorsanız, Powershell v5.0 sürümüne sahipsiniz demektir. Microsoft tarafından Powershell v5.0 için Windows Management Framework Production Preview sürümünü indirip, Windows 10 olmayan cihazlarınızda ilgili sürüme sahip olabilirsiniz.

Powershell v5.0 ile gelen hayatımıza, Desired State Configuration ciddi seviyede iyileştirmeler, Package Management ile deployment süreçlerinin inanılmaz sürelerde kısalması, Network Switch cmdlets ailesi sayesinde Microsoft sertifikalı switchleri yönetebilmek gibi birçok yenilik bizleri bekliyor. Bu yazımız da Powershell v5.0 ile gelen yeni özellik olan Nesne Yönelimli Programlama dillerin deki gibi Class yapılarını oluşturarak devam edeceğiz. Birçok PowerShell kullanıcıları bu kavramlara aşina olabilir. Class yapısının gelmesindeki en büyük avantaj Desired State Configuration tarafında olduğunu söyleyebiliriz.

Powershell'in artık Object Oriented Programming (Nesne Yönelimli Programlama) dil olduğunu üstüne basa basa söylemekte fayda var. Object Oriented Programming (Nesne Yönelimli Programlama) 1960 yılların başlarında geliştirilen bir programlama tekniğidir. Bu programlama tekniği bizlere ne sağlıyor? Bu programlama tekniği programı geliştirirken daha hızlı, daha esnek olması, bakımının ve diğer geliştirme yöntemlerine daha fazla açık olmasını anlamına gelmektedir. OOP (Object Oriented Programming) bütün olaylara birer Object(Nesne) olarak bakmaktadır.

Object ( Nesne ) Nedir?

OPP(Object Oriented Programming) avantajlarından bahsettik. Şimdi ise Object kavramını açıklayalım. Normal fiziksel nesne ile karıştırmamız gerekiyor. Fiziksel bir nesne dediğimiz zaman, uzayda yer kaplayan hacmi olan kütlesi olan bir yapıdır. Kodlama tekniklerinde bir nesne dendiği zaman olayları olan, olaylara karşı reaksiyon gösterebilen ve işlevi olan yapılar anlamına gelmektedir.

Object(Nesne) içerisin de Properties (Özellikler ), Methods (Method) ve Events(Olaylar) barındırırlar. Bunları kısaca açıklayalım.

  • Properties : Bir nesne tarafından temsil edilen veri özellikleridir.
  • Method : Objenin davranışlarını temsil eder.
  • Event : Nesne ile arasındaki iletişimi kurarlar.

Class (Sınıf) Nedir?

Object kavramından sonra, Class yapısını cover etmemiz gerekiyor. Peki Class nedir?

Nesne Yönelimli Programlama ile geliştireceğimiz programlarda sadece objeler vardır. Bu objeler, veri alışverişi yaparak, birbirleriyle haberleşirler. Objeler OOP(Object Oriented Programming) de sınıf olarak ifade edilen şablonlardan yaratılır. Her Class içinde, o Class içerisinden üretilecek objelerin özelikleri, davranışları tespit edilir. Örneğin Araba isminde bir sınıf yaratabiliriz. Bu sınıftan üretilecek objelerin ortak yani, bir Marka, Model ve Renk gibi özellikleri olacaktır. Class yapısı obje üretmenin yanında Class yapıları arasında ilişki kurmak mümkündür.

Constructor ( Yapıcı Method ) Nedir?

Objelerin sınıflardan yapıldığını öğrendik. Objeler üretilirken, sahip oldukları değişkenlerin farklı değerlerde olması gerekir. Araba örneğinde olduğu gibi, Marka ve Model isimli iki objenin değişik değerlere sahip olmaları gerekir. Bu demek oluyor ki, objeler üretilirken, onlara değişik kimlikler verecek bir mekanizmaya ihtiyacımız var. Bu görevi sınıf içinde Constructor üstlenir. Objeler Constructor aracılığıyla üretilir. Constructor bir obje üretmeden önce, obje için gerekli değişken değerleri belirlenir ve bu değerler parametre olarak Constructor gönderilir. Constructor bu değerleri kullanarak, objeyi üretir. Her sınıf içinde, obje üretmek için bir Constructor vardir. Bu kullanım şekline örnek verecek olursa, "System.Net.Http.HttpClient" class içerisinde 3 farklı Constructor görebilirsiniz; Diğer 2 tanesi parametre farklı değerler alırken sizde MSDN sayfası üzerinden görebileceğiniz gibi bir tanesi hiçbir parametre almaz. Constructor "overloading" yapısını desteklemekte. Bu şekilde birçok Constructor yaratılabilmekteyiz.

Genel anlamlarıyla Class, Object, Properties, Method gibi kavramları açıkladık. Şimdi Powershell içerisinden Class oluşturmak için neler yapmamız gerekiyor onlardan bahsedelim. Yapmamız gereken bu kısımda aynı Powershell içerisin de function veya Workflow yazar gibi Class keyword ile başlayıp ClassName belirtmeniz gerekiyor.

Yukarıdaki örnekte görüldüğü gibi Powershell içerisin de herhangi bir Function, Workflow veya Configuration elementleri ile başladığımız gibi keyword olarak Class yazarak ve ClassName belirterek oluşturma işlemini gerçekleştiriyorum.

Şimdi ise Class içerisine "String","Int" ve "DateTime" tipinde objeler tanımladım. Artık bu Class çağırıldığı zaman bunlar benim için birer objedir. Class çağırmak için neler yapmam gerekiyor hemen ondan bahsedelim. Bu kısımda karşımıza "New-Object" adında bir cmdlet çıkıyor. Bu cmdlet içerisine Class Adını göndererek kullanabileceğim.

"A" adında bir değişken oluşturdum ve karşına New-Object ClassName şeklinde atayıp çalıştırdım. Daha sonra "A" değişkenine çağırdığım zaman karşımıza Class içerisin de tanımladığım objelerim gelmektedir. Şimdi Bu objeler içerisine değer atama işlemlerine bakalım.

Yukarıda görüldüğü gibi Class içerisinde tanımlamış olduğum objelerime değer atayıp çalıştırdıktan sonra, Class içerisindeki objelerin yeni değerlerini görebilir durumdayım. Bir sonraki yazımızda Class yapısını incelemeye devam edeceğiz.

· 2 min read

Yazımızın ilk bölümünde Powershell içerisinden PowerBI içerisine erişebilmek için ilgili modülü kurulumu ve bu modül ile gelen cmdlet detaylarını inceledik. Şimdi ise, Powershell içerisinden aldığımız sonuçları PowerBI üzerindeki dashboard içerisinde anlık olarak gönderebilmemiz için bir PowerBI hesabına ihtiyacımız bulunuyor. Hesap bilgileri ile alınan Token sayesinde PowerBI REST API'dan faydalanıp erişimi gerçekleştirebileceğiz.

Powershell ile PowerBI Authentication işlemleri

PowerBI API kullanıcının kimliğini doğrulamak için Azure Active Directory ve OAuth 2.0 kullanır. Power BI client app sayesinde kimlik doğrulama işlemini gerçekleştirebiliriz. PowerBI REST API faydalanabilmek için Azure Active Directory üzerinden authentication işlemlerini gerçekleştirmemiz gerekiyor. Azure Active Directory tarafında PowerBI Client app tanıtıp, gerekli kullanıcılara izin verdikten sonra, ClientId ve Token sayesinde Power BI REST API kullanmaya başlayabiliriz.

Register Power BI Client App

Programlama dillerini (c#, powershell ve diğer) kullanarak PowerBI REST API faydalanmak için Azure Active Directory içerisinden Application eklememiz gerekiyor. Azure Management Portal içerisinden Azure Active Directory tabı içerisine gidelim ve uygulamamızı ekleyelim.

072715_1904_Powershelli1.png

Azure Active Directory tabına geldiğimiz zaman hizmet aldığımız dizin hizmetlerini görmektesiniz. Benim şuna sadece mevcut dizin hizmetimden faydanalacağım. Eğer birden fazla dizin hizmeti alıyorsanız istediğinizi seçebilirsiniz. Azure Active Directory girdikten sonra, Application tabında gelip eklemeye başlayalım.

072715_1904_Powershelli2.png

"Add" butonuna basıktan sonra bu kısımda "Add an application my organization is developing" kısmını seçip "Native Client Application" seçiyoruz. Application bir isim veriyoruz. Ben "PowerBIApp" olarak girdim.

072715_1904_Powershelli3.png

"Native Client Application" seçtikten sonra, bir sonraki adımda karşımıza "Redirect URI" ekranı gelecektir. Bu kısımda dikkat etmemiz gereken yer URI adresinin doğru olmasıdır. Bu sayede authentication işlemleri gerçekleşecektir. 072715_1904_Powershelli4.png

"Redirect URI" ekranında "Azure Active Directory" ile "Oauth 2.0" kullanarak authentication işlemlerini yapabilmemiz için girmemiz gereken adres;

Redirect URI : https://login.windows.net/common/oauth2/authorize

Diğer yöntemler için tıklayınız. Gereken bilgileri doldurduktan sonra "Complete" butonuna basıp Client App ekleme işlemini bitiyoruz.

· 2 min read

Yazımızın ikinci bölümünde Native Application olarak PowerBI Client App işlemlerini gerçekleştirdik. Uygulama eklendiği zaman Azure Management Portal üzerinden aşağıdaki şekilde görmemiz gerekiyor.

072715_1949_Powershelli1.png

"Redirect URI", "ClientId" yukarıdaki gibi görmekteyim. Artık yapmamız gereken bu uygulama için Azure Active Directory içerisindeki hesapların erişebilmesi için gereken yetkileri vermemiz gerekiyor.

072715_1949_Powershelli2.png Eklemiş olduğumuz PowerBI Application içerisinde girip , "Configure" tabına geldiğiniz zaman alt kısımda "Permission" ekranı içerisinden "Add Application butonuna basıyoruz ve bu kısımda alınan token sayesinde yapılacak işlemler için PowerBI tarafı için izin veriyoruz. 072715_1949_Powershelli3.png "PowerBI Service" seçtikten sonra "Complete butonuna basıyoruz ve uygulama için gereken delegation izinlerimizi verelim. 072715_1949_Powershelli4.png

"Delegated Permission", PowerBI Servisi için Azure Active Directory servisi üzerinde bir kullanıcı PowerBI üyeliğini aldıktan sonra, eğer herhangi bir programlama dilinden PowerBI REST API kullanarak erişirse verdiğimiz bu yetkiler doğrultusunda işlemleri yapabilecek.

Şimdi ise artık Azure Active Directory içerisinde yeni bir kullanıcı oluşturup, bu kullanıcı ile bir PowerBI hesabı alma işlemlerini sırasıyla gerçekleştirelim. Azure Management Portal içerisinden, Azure Active Directory tabına gelip daha sonra "Add User" butonuna basıktan sonra, yeni bir kullanıcıyı PowerBI Client App register ettiğimiz dizin hizmetinin altında yaratıyoruz.

072715_1949_Powershelli5.png

Eklemiş olduğumuz hesabı artık Azure Active Directory içerisinde Users tabı altına göremem gerekiyor. Kullanıcı yaratırken bana verilen şifre ile PowerBI üzerinde kayıt olma işlemlerini gerçekleştirelim. PowerBI hesabı oluşturmak için, https://powerbi.microsoft.com adresine girdikten sonra, Azure Active Directory içerisinde oluşturduğumuz hesabımızı yazarak ücretsiz bir şekilde PowerBI hesabını aktif hale getirebiliriz.

072715_1949_Powershelli6.pngÜcretisiz bir şekilde PowerBI üyeliğini artık aldık ve "Sign in" kısmından oturum açabiliriz. PowerBI portalında oturum açtığım zaman, "Dashboard, Report ve Data Set" alanları görmekteyim. Yazımız içerisinde PowerBI derinlemesine inceleme şansımız fazla olmasada, "Veri Al" butonunu tıklayarak kullanabileceğiniz hizmetleri görmeniz açısından bir fikir sahibi olabilirsiniz. 072715_1949_Powershelli7.png

· 3 min read

Artık Powershell ile PowerBI REST API kullanmak için ClientId ve Token alma işlemlerini gerçekleştirebiliriz. PowerBIPS ( PowerBI Powershell Modül) içerisindeki "Get-PBIAuthToken" cmdlet bizlere authentication için yardımcı olup ilgili token almamızı sağlayacaktır.

072715_1958_Powershelli1.pngPowerBI ile üyelik aldığımız kullanıcı adı ve şifresini girerek token alma işlemini gerçekleştirelim. Eğer "Get-PBIAuthToken" komutunu direk çalıştırırsanız sizi "Sign-in" sayfasına gönderecek ve o kısımda gereken kullanıcı ve şifre bilgilerini doldurup token alma işlemini tamamlayabiliriz.

072715_1958_Powershelli2.pngHatırlarsanız, yazımızın ikinci bölümünde PowerBI Powershell modulü ile ilgili cmdlet açıklamalarını görebilirsiniz. Powershell ile herhangi bir cmdlet ile aldığımız sonuçlarımızı Json formatında göndermemiz gerekiyor ve aldığımız cevaplar yine JSON formatında geliyor. Tüm aradaki iletişim HTTP methodları ile sağlanıyor.Bu sayede anlık olarak veri kümeleri oluşturup, Dashboard yaratıp anlık olarak her yerden erişebilme şansımız bulunmaktadır.

Microsoft'un sunduğu şu sayfayı kullanarak, PowerBI REST API ile aklınıza takılan herşeyi test edebilirsiniz.

http://docs.powerbi.apiary.io/#

Şimdi Powershell üzerinden aldığımız bi sonucu PowerBI içerisine gönderelim. Başlangıç olarak "Get-Process" ile başlayalım. "Get-Process" çıkan sutünlardan sadece Process Adı ve Kullanılan Memory bilgisini getirelim ve çıkan sonuçtan, ilk 5 Process bilgilerini gösterelim.

# Bilgisayarınızda çalışan en fazla memory kullanan ilk 5 process Get-Process | Sort WS -Descending | Select-Object Name,WS -First 5

072715_1958_Powershelli3.pngYukarıdaki "Get-Process" cmdlet sayesinde karşımıza listelenen Process Bilgilerini pipeline sürecine dahil ettikten sonra, Sort ve Select komutları ile istediğimiz sonucu elde ediyoruz. Artık yapmamız gereken sadece karşımıza gelen verileri PowerBI içerisine göndermek.

PowerBI Modülü içerisinde bulunan Out-PowerBI cmdlet sayesinde, PowerBI içerisinden aldığımız sonuçları, arka tarafta JSON formatına dönüştürüp ve veri kümesi (DataSets) olarak gönderebiliyor. Bu cmdlet bizim işimizi oldukça kolaylaştırıyor. JSON formatını hazırlamanıza gerek kalmadan gelen veriyi kendisini dönüştürüp veri kümesi(DataSet) ve tabloyu yaratabiliyor.

Kullanımını hemen inceleyelim.

# Out-PowerBI cmdlet ile beraber PowerBI içerisine gönderme Get-Process | Sort WS -Descending | Select-Object Name,WS -First 5 | Out-PowerBI -Verbose

072715_1958_Powershelli4.pngYukarıda yazdığımız satırda "Get-Process" ile alınan sonuçlar pipeline süreci ile "Out-PowerBI" cmdlet içerisine gönderiyor. Cmdlet kullanırken "–Verbose" parametresini aktif hale getirerek çalışırken detayları görmek açısından oldukça faydalıdır. "Out-PowerBI" yazımızın başında aldığımız token(Get-PBIAuthToken) kullanarak, "Get-Process" cmdlet içerisinden gelen veriler için bir veri kümesi(dateset) ve bu veri kümelerinin içinde tablo(table) oluşturma işlemini gerçekleştirip, verileri ekliyor.

072715_1958_Powershelli5.pngPowerBI sayfası üzerinden baktığım zaman, "Veri Kümeleri(DataSets)" altında "PowerBIPS_20150519" adında başlayan yeni bir veri kümesi eklendiğini görmekteyim. Veri kümesinin(DataSet) adını komut satırını çalıştırdığınız yerel bilgisayardaki tarih ve saat bilgilerini alarak belirlemektedir.

"Out-PowerBI" içerisine parametreler göndererek, Dataset ve TableName değerlerini biz belirtme şansımız var.

# Out-PowerBI cmdlet ile beraber PowerBI içerisine gönderme

$ProcessTable = Get-Process | Sort WS -Descending | Select-Object Name,WS -First 5

Out-PowerBI içerisine data,DateSetName ve TableName parametlerini kullanımı

Out-PowerBI -data $ProcessTable -dataSetName "processDataSet" -tableName "processTable" -Verbose

072715_1958_Powershelli6.pngYukarıdaki örnekte ise, "Get-Process" kullanarak Sort ve Select yaptıktan sonra sonucu bir "ProcessTable" adında bir değişkene atadık. Bu değişkeni daha sonra, "Out-PowerBI" içerisinde "-data" parametresi içerisine gönderdim. Bu kısımda "-datasetName" ve "tableName" parametlerine belirtmek istediğimiz veri kümesi ve tablo adını yazmış bulunmaktayım. İlgili satırları çalıştırdıktan sonra, PowerBI tarafında oluşan veri kümesine bir göz gezdirelim.

072715_1958_Powershelli7.pngPowerBI arayüzden Veri Kümeleri kısmına baktığım zaman "Out-PowerBI" içerisine göndermiş olduğumuz parametre değerleri ile veri kümesi ismini almış gözükmektedir. Serimizin diğer yazısında Veri kümelerini kullanıp, DashBoard yaratma süreçlerine bakıyor olacağız.

· 2 min read

Powershell ile aldığımız sonuçları PowerBI içerisine gönderirken neler yapmamız gerektiğinden bahsettik. Şimdi ise gönderdiğimiz veri kümeleri ( DataSet) içerisinde bulunan tabloları yayınlama kısmına geldik. PowerBI içerisinde Dashboard kısmına geldiğimiz zaman boş olarak gözükmektedir. Yeni bir Dashboard ekleyerek daha sonra mevcut veri kümeleriniz(DataSets) içerisinde tabloları kullanıp raporlar oluşturabilir veya raporlar yaratabilirsiniz.

PowerBI portal Dashboard bölümünden hemen yeni bir DashBoard yaratıyorum.

072715_2025_Powershelli1.png

Dashboard(Panolar) kısmında artı(+) işaretine bastıktan sonra oluşturmak istediğim Dashboard bir isim veriyorum. Ben makale serimizin başlığındaki gibi "Real Time Dashboard" ismini veriyorum. İsteğinize göre birden fazla Dashboard yaratılabilir. Oluşturduğum Dashboard işleminden sonra, Veri kümeleri(DataSets) üzerine gittiğim zaman bana ilgili veri kümesi içindeki tabloları(Table) listeyelecek ve istediğim field göre raporlar oluşturabileceğim. Biz örnek olarak "Get-Process" cmdlet kullanarak sonuçları PowerBI içerisine göndermiştik.

072715_2025_Powershelli2.pngOluşturmak istediğimiz veri kümesinin(Data Set) üzerine geldikten sonra, karşımıza tasarım ekranı gelmektedir. Bu kısımda, Veri Kümesi içerisindeki tablolar gözükmektedir. "processTable" içerisinde iki adet sutünüm var. Yukarıdaki resimde mümkün oldukça adımların sırası ve butonların ne işe yaradığını açıkladım.

Rapor tasarımını bitirdikten sonra, Dashboard kısmında "Real Time Dashboard" içerisine girdiğim zaman mevcut raporumu görebilmekteyim.

072715_2025_Powershelli2.pngReal Time Dashboard için Powershell ile alınan sonuçların anlık olarak gönderilebilmesi için dikkat edilmesi gerekenler

  • Powershell ile oluşturulan query düzenli bir şekilde PowerBI içerisindeki veri kümelerini güncellemelidir.
  • İsteğe bağlı olarak yazılan Powershell query herhangi bir service yöntemine bağlanarak çalıştırılır.
  • Cloud-Base bir veri tabanı kullanarak Powershell sorgularını kaydedebilir ve PowerBI eşitlemesini gerçekleştirebilirsiniz.

Yazımızın son kısmında Mobile Phone ile erişimi gerçekleştirelim. IOS işletim sistemi ile App Store indirdiğimiz "PowerBI" uygulamamız ile oturum açalım.

072715_2025_Powershelli4.pngOturum açıktan sonra, oluşturduğumuz Dashboard sayfalarımızı ve Pinned ettiğimiz raporlarımızı görebiliriz.

072715_2025_Powershelli5.png

· 2 min read

Powershell ile ortamımızdaki bulunan sunucu veya istemcileri mevcut Cmdlet, WMI veya CIM teknolojileri sayesinde remote query yöntemlerini kullanarak aldığımız cevaplara göre HTML raporlar oluşturabiliyoruz. Bu oluşturulan HTML raporlar organizasyonun ihtiyaçlarına göre değişiklikler gösterebiliyor.

Biraz daha kod tarafına değinirsek bu HTML raporlarına CSS eklenerek yapılırsa gerçekten çok başarılı sonuçlar elde edebilriz. Powershell ile gerçekleştirip aldığımız sonuçları IT Departmanına notification e-mail olarak gönderme şansımız var. Bu kısımda Monitoring tarafında fazla ulaştırılan notification belli bir süreden sonra bakılmaz hale gelebiliyor, dikkat edilmesi gereken anlamlı değerlerin karşımıza getirilmesi gerekiyor.

Kullanılan third party yazılımların yetemediği noktalarda araya Powershell araya eklenip alınan sonuçları bir şekilde notification haline döndürebiliyoruz. Blog içerisinde bir çok HTML raporlar paylaştım. Fakat hayalimde olan bu bilgilerin tek, her yerden erişebilirlik ve her türlü cihazlardan esnek bir şekilde bakabilmesiydi.

Son zamanlar da Microsoft Power BI hızla yükselen yıldızı ile beraber ve Microsoft'un PowerBI için bizlere sunduğu REST API kullanarak, Powershell tarafında aldığımız sonuçları anlık bir şekilde PowerBI tarafına göndererek Real Time Monitoring sayfaları oluşturulabilir. Microsoft Power BI tarafında oluşturulan Dashboard sayfalarına isterseniz Web Browser veya Mobile uygulamalar sayesinde erişebilir ve oluşturduğunuz sayfalara bakabilirsiniz.

Mobile kısımda PowerBI desteklendiği platformlar; IOS, Windows, Android olduğunu söylemekte fayda var.

Hemen aşağıdaki kısımda yayınlamış olduğum Real Time Dashboard sayfamı Mobile Phone üzerinden görüntüsünü bulabilirsiniz.

072715_1827_Powershelli2.jpg

Bu yazı serimiz de Powershell gücünü kullanarak aldığımız sonuçları PowerBI içerisinde yayınlayarak IT Departmanları için kolay, istenilen veriye istenildiği yerden ulaşılmasını sağlamak.

Yazımızın aşamaları aşağıdaki adımlardan oluşmaktadır.