Skip to main content

· 2 min read

Microsoft Azure yeni deployment modeli olan Resource Manager kendine özel yeni bir API bizlere sunmaktadır. Azure Resource Explorer developer olan kişiler tarafından bu yeni modeli keşfetmeleri için çok faydalı bir araç. Resource Explorer erişmemizin birden fazla yöntemi bulunmaktadır. Bunların en temeli olan Azure New (Ibıza) Portal üzerinden erişebiliyorsunuz. Mevcut Azure hesabınız ile oturum açtıktan sonra, Resouce Explorer tıkladığınız zaman Resource Manager API bizlere verdiğini Provider kullanarak "GET","PUT","DELETE","POST" methodlarını API içerisine gönderip aksiyonlar alabilir veya veriler çağırabiliriz. Aşağıdaki örnekte Azure New (Ibıza) Portal içerisinde Resouce Explorer sayfasına erişebiliriz.

020116_2123_AzureResour1.png

Resource Explorer bölümüne Azure Portal içerisinde eriştiğiniz zaman JSON formatında olarak kaynaklarımızın detaylarınızı keşfedebilirsiniz.

020116_2123_AzureResour2.png

Bununla beraber dilerseniz, https://resources.azure.com sayfası üzerinden Azure Credentials ile oturum açtığımız zaman karşınıza yukarıdaki gibi bir sayfa gelecektir. Fakat bu sayfa şuan Preview olup bahsetmiş olduğumuz Resource Manager API ile "GET","PUT","DELETE","POST" methodlarını Web sayfası üzerinden gönderme şansımız bulunmaktadır. Biraz daha detaylandırırsak dilerseniz, oluşturulan Resource Group kaynaklarınızı silebilir veya Resource Grouplar arasında geçişler sağlayabiliriz. Resource Manager modelini ile ve sizde danışmanlık süreçlerinizde herhangi bir hizmeti deployment ederken zaman kazanmak istiyorsanız Resource Manager Template yapısını kullanarak çok hızlı bir şekilde provisioning işlemlerinizi gerçekleştirebilirsiniz. Resource Manager ile deployment yaparken arka tarafta bir JSON formatında kullanmak istediğiniz kaynaklarınızı detaylandırmanız gerekiyor. JSON formatının belirli bir syntax ile yazılmış olması ve bu JSON dosyasını Azure Powershell ( Resouce Manager) Modeli ile deployment sürecini başlatma şansınız var.

020116_2123_AzureResour3.png

Bu tarz deployment süreçlerini diğer yazılarımda detaylarına iniyor olacağım. Fakat bu yapının nasıl çalıştığını anlamak için dilerseniz, GitHub üzerinden merakınızı gidebilirsiniz. Eğer biraz daha kestirmeden nirvanaya ulaşmak istiyorsanız aşağıdaki sayfa üzerinden tüm Deployment Template erişebilirsiniz. Hemen bu süreci anlamak adına https://azure.microsoft.com/en-us/ sayfasına girdiğiniz zaman, "Resources" sekmesiden "Templates" kısmına tıklayalım ve karşımıza tüm publish edilen Resource Manager için geliştirilmiş template örneklerini bakalım.

020116_2123_AzureResour4.png

"Templates" sekmesini tıkladıktan sonra karşımıza geliştirilen ve paylaşılan bütün Resource Manager Template örnekleri gelecektir. Aşağıdaki örnek üzerinde herhangi bir template tıklayıp deployment sürecinin nasıl işlediğini anlayalım.

020116_2123_AzureResour5.png

Örnek olarak "Join a VM to an existing domain" yazısının üzerine tıklayarak Developer tarafından geliştirip ve publish konumda olan Resource Manager modeli ile hazırlanmış Deployment Template kullanmaya başlayalım.

020116_2123_AzureResour6.png

Yukarıda görüldüğü gibi, "Deploy to Azure" butonu ile sizi Azure New Portal içerisine yönlendirecek ve geliştirilen Deployment Template içerisine tanımlanan JSON dosyasının içerisindeki parametreleri göndererek provisioning sürecine başlıyor olacaksınız. Resource Manager deployment modelini kullanarak sizde basit bir JSON dosyasına oluşturmak istediğiniz kaynaklarınızın detaylarını belirtip zaman kazanabilirsiniz.

020116_2123_AzureResour7.png

· 3 min read

Azure Automation, Infrastructure as a service (IaaS) ve Platform as a service (PaaS) gibi aldığınız hizmetlerin Azure içerisinde uzun çalışan, hata eğilimi olan ve sık sık tekrarlanan görevleri düzenli olarak gerçekleştiren bir servistir. Bu makale serisi içerisinde Azure Automation hakkında sık sorulan sorulara cevap vermeye ve genel alt yapısını incelemeye çalışacağız. Makale serisine başlamadan önce size Anıl Erduran'ın "Microsoft Automation Dün Bugün ve Yarın" adlı yazısını okumanızı şiddetle tavsiye ederim. Şimdi ise yarını detaylandırmaya başlayabiliriz.

100515_2057_AzureAutoma1.png

Bu servisi kullananlar zaman, maliyet avantajı ve iş güçü kazanır. Bulut ortamlarında düzenli olarak gerçekleştirdiğiniz görevler için, (Provisioning ve Scale VM, Web Sites, Test Environment vb.) hiçbir insan müdahalesi olmadan hatasız, istenilen veya belirli aralıklarla gerçekleşmesini sağlar.

Azure Automation Windows Powershell Workflow söz dizimine uygun olarak yazılmış Runbook aktiviteleri kullanır. İhtiyacımızdan dolayı Workflow yazıldığı zaman bunu arka tarafta Windows Workflow Foundation (WWF) tarafından yürütüldüğünü söylemekte fayda var. Service Management Automation (SMA) ile Azure Automation benzerlik göstermektedir. İkisi de Windows Powershell Workflow ile geliştirilen Runbook aktivite biçimini kullanırlar. Azure Automation içerisindeki Runbook aktiviteleri Public Cloud Resource ve Azure ile ilgili powershell cmdlets ailesine erişim sağlarken, Service Management Automation (SMA) üzerinde bulunan Runbook'lar Windows Azure Pack'in parçalarına ve Azure Pack cmdlet'lere ihtiyaç duyar. Makalemiz içerisin de geliştireceğimiz Runbook aktiviteleri sayesinde, Azure Automation ihtiyaç duyulan zamanlar içerisinde ilgili sunucuların hizmet vermesini sağlayarak aldığımız hizmetin maliyetlerini azaltacak. Kaba bir matematik ile bunlara çok basit örnekler verelim.

100515_2057_AzureAutoma2.jpgAzure, Virtual Machine hizmetini aylık olarak kullanıcılarına sunmakta. Ancak bu hizmetin maliyet hesaplaması gizli bir sır barındırıyor. Maliyet kullanıcılara stabil olarak değil, kullandıkları kadar yansıyor. Geliştirdiğimiz Runbook sayesinde bu sırrı ortaya çıkartacağız. Örnek olarak A3 tipinde bir Virtual Machine alındığında, aylık maliyeti yaklaşık olarak 270($) dolardır. Bir ayda 720 saat olduğunu düşünürsek, bu hizmetin saatlik masrafı kabaca 0,375($) dolara denk gelmektedir. Saatlik masrafı gözünüzde küçük gözükebilir ancak birazdan geçeceğimiz derin hesaplar sonucu maliyetin küçük olmadığını göreceksiniz.(Yaptığımız veya bir sonraki yapacağım hesaplamalarda ay 30 gün olarak alınmıştır.) Örnek aldığımız sanal makinenin şirket içerisinde hizmet verdiği saatlerinin 09:00 – 18:00 arasında olduğunu varsayalım. Kullanılan sanal makinenin günün sadece 9 saati çalışmasına karşın, şirket sanal makineyi Azure üzerinde tüm gün hizmet olarak alıyor, saat ayrımı yapmıyor. Bu sebepten dolayı ödeyeceği 3,375 ($) dolar miktarı, 9 ($) dolara yükseliyor ve bu hesap ise sadece günlük kısmı. Aylık olarak hesaplamada ise, normal ödenmesi gereken miktar 101($) dolardır. Arada oluşan 169($) dolar farkı, yıllık olarak bakıldığında 2.028($) dolara yükseliyor. Geliştireceğimiz Runbook sayesinde, sanal makinenin sadece çalışması gerektiği saatler içerisinde çalışarak, maliyetten tasarruf etmemizi sağlayacaktır.

Azure Automation içerisinde oluşturduğumuz Runbook'lar ile On-Premises Datacenter yönetmeniz mümkün değil. Şimdiler de ismini çok sıklıkla duyduğumuz Operation Management Suite ile beraber artık Hybrid Runbook Server kavramı hayatımıza girmiş durumdadır. Azure Automation içerisin de buluanan Runbook'lar ile artık On-premises içerisin de Hybrid Runbook Worker olarak belirlenen sunucu tarafından uygulanabilir durumdadır. Operation Management Suite olması şartıyla, yüklenen bir Agent sayesinde gösterdiğiniz sunucuyu Hybrid Runbook Worker olarak belirtebilirsiniz. Aşağıdaki resim ile bu senaryonun kafamızda kısa süreliğine de olsa gerçekleşmesini istiyorum.

100515_2057_AzureAutoma3.png

Azure Atuomation serisine aşağıdaki linklerden ulaşabilirsiniz.

· 3 min read

Azure Automation kullanabilmeniz için Azure Subscription sahip olmanız gerekiyor. Mevcut bir Azure hesabı sizlere Azure üzerindeki kaynaklara erişmenizi sağlar. (Cloud Services, Service Bus, Storage Account, Mobile Services, vd) Azure Automation Account hesabı ise, mevcut hesabınız için tüm otomasyon kaynaklarını tutar. ( Runbook, assets)

Yeni bir Automation Account oluşturmak için birçok yöntemimiz bulunur. Bunlardan en basit ve en kolayı mevcut Azure Portal içerisinden veya Preview Portal üzerinden yeni bir Azure Automation Account yaratabilmektir. Azure üzerinde ihtiyaçtan dolayı birçok Automation Account yaratılabilir. Farklı Azure Region üzerindeki IT Operasyonel işleri yöneten kişilere ait farklı Automation hesapları oluşturulabilir. Bir subscription içerisinde 30 adet farklı Automation Account yaratılabilir.

Automation Account oluşturulması

Azure Management Portal üzerinde oturum açılır. Portal içerisinden sol tarafta Automation kısmına gelip "Create an Automation Account" seçilir.

100415_1851_AzureAutoma1.png

Karşımıza gelen ekran içerisinde Automation Account hangi Region üzerinde yaratılacağını ve geçerli bir isim verilerek "Complete" butonu tıklanır.

100415_1851_AzureAutoma2.png

Hesabımızın başarıyla oluştuğunu gördükten sonra, artık Automation Account içerisindeki kavramları incelemeye başlayabiliriz. Automation Account içerisine girdiğim zaman karşımıza bizi "Get Started" sayfası karşılıyor olacak.

100415_1851_AzureAutoma3.png

Karşımıza gelen "Get Started" dışında yan taraflarında birçok sekme var. "Get Started" sayfası içerisinde yeni bir runbook oluşturmak, Technet Gallery üzerinden geliştirip paylaşılan hazır runbook'lara erişmeniz mümkün. Automation Account içerisindeki sekmeleri sırasıyla inceleyelim ve neler yaptığını anlayalım.

  • Dashboard : Otomasyon süreçleri için diagnostic, job state ve usage information gibi bilgileri gösterir. Bununla beraber, 30 gün veya istenilirse bir saatlik detaya kadar Account içinde gerçekleşen farklı işlerin durumunu ( başarısız, durdu, tamamlanmış ve çalışan) gibi bilgileri gösterir. Son olarak da mevcut Automation Account içerisinde runbook sayısını ve değişkenlerinin toplam sağ alt kısımdan rakamlarını görebilirsiniz. 100415_1851_AzureAutoma4.png
  • Runbooks : Mevcut yazdığınız veya Gallery üzerinden indirdiğiniz tüm Runbook bu ekran içerisinde gözükmektedir. Belirli tarihler ve saatler ile runbook durumunu için filtreleme yapabilirsiniz. Dilerseniz kendiniz geliştirdiğiniz Runbook Import edebilir yada başkasına göndermek amacıyla export edebilirsiniz.

100415_1851_AzureAutoma5.png

  • Assets : Runbook içerisinde kullanılan değişkenlerin yönetimi bu bölümden sağlanır. Variables, Connection, Schedule isteğe bağlı olarak bu değişkenler eklenir. Eklenen bu değişkenler, Automation Account içerisindeki tüm runbooklar tarafından erişilebilir. Integration Module sayesinde ilgili cmdlet ailesini Azure Automation içerisine yükleme şansına sahipsiniz. Bildiğimiz gibi Powershell içerisin de Module mantığı vardır. Azure Automation tarafında bir workflow geliştirdiğinizi hayal edelim. Bu Workflow içerisin de örnek olarak Active Directory veya Office 365 ile ilgili cmdlet bulunduğu varsayalım. İşte bu cmdletlerin Azure Automation tarafından bilinmesi için ilgili modülleri Azure Automation hesabının içine atılması gerekiyor. İstediğiniz Powershell Modulünü buradan "Import Module" tıklayarak ekleyebilirsiniz.

100415_1851_AzureAutoma6.png

  • Scale : Free veya Basic olarak Automation planınızı seçmenize olanak verir. Bu kısımda önemli ve atlanmaması gereken bir nokta var, seçtiğiniz plan Azure Subscription içerisindeki tüm Automation hesapları için geçerlidir. Ücretsiz plan ayda 500 dakikaya izin verir ve fatura edilmez. Eğer kullanımı sınırsız dakika gerekiyorsa, Basic planını seçin. 100415_1851_AzureAutoma7.png

· 3 min read

Bir önceki yazımızda, Automation Account oluşturma adımlarından bahsettik ve Assets kavramını kısa bir açıklamasını önceki yazımızda yapmıştık. Bu yazımızda Assets kavramını detaylandırmaya çalışacağız. Assets bölümü Azure Automation hesabı içerisin de en önemli kısımlardan biridir. Assets bölümünde Azure Automation Account hesabı için Integration Module ve Settings kısmı bulunmaktadır. Açıkcası bu kısma Settings demek pek hoşuma gitmiyor. Portal içerisinde bu şekilde ekleyeceğiz ama değişkenler demek bundan sonra daha doğru gibi gözüküyor.

Runbook aktivitelerinizin içerisin de kullandığınız cmdlet eğer ilgili Automation Account içerisinde yok ise Assets içerisinde Integration Module ile yükleme şansına sahipsiniz. Bu işlem bizim için oldukça basit. Assets bölümünü kullanmamızdaki diğer temel amaç eklediğimiz Settings ( Değişkenlerden) oluşmaktadır. Tüm script dillerinde olduğu gibi PowerShell içerisinde de string ya da integer tabanlı nesneler istenilen değişkenlere atanarak, scriptin devam eden bölümünde ihtiyaç olduğunda rahatlıkla kullanılabilir. Biz portal içerisinden "Add Settings" tıklayarak değişkenler oluşturarak Runbook içerisinden bu değişkenlere erişim sağlayarak Workflow'un devam eden bölümünde ihtiyaç olduğunda kullanabileceğiz.

Assets kısmında bulunan değişkenlere ve Integration Modüllere erişim noktasında önemli bir bölüm var. Tanımlamış olduğunuz değişkenleriniz veya eklediğiniz Integration Modülleriniz geliştirdiğiniz farklı Runbook aktiviteleri içerisinden tekrar erişilebilir durumdadır. Bu kısma örnek verecek olursak aşağıdaki resimden ilerleyelim.

100515_2118_AzureAutoma1.png

Yukurdaki resimde üç adet "Asset 1", "Asset 2", "Asset 3" adında değişkenlerim bulunuyor. Bu değişkenler, sırasıyla "Integer", "String" ve "Credential" olduğunu varsayalım. "AA" adında bir Azure Automation Account içerisinde tanımlı olarak gözükmektedir. Bununla beraber bu Automation Account içerisinde iki adet Runbook aktivitem var. Bunlar "A" ve "B" adında gözükmektedir. Bu Runbook aktivitelerinde yazılan Powershell Workflow içerisinde tanımlamış olduğumuz Settings(Değişkenler) "Get-AutomationVariable –Name değişkenadı" şeklinde çağrılır ve geliştireceğiniz Runbook içerisinden erişebilirsiniz.

Azure Portal içerisinden, "Add Settings" tıklanarak herhangi yeni bir değişken oluşturmak istediğiniz zaman, karşımıza gelen değişken tiplerini tanıyalım.

  • Credential Asset : Bu değişkeni eklemek istediğiniz zaman karşınıza iki farklı tip ile geliyor olacak. Bunlar "Certificate ve Powershell Credential" şeklinde gözükecektir. Oluşturulacak olan Credential değikenine isim verdikten sonra, Assets bölümünde gözükecetir. Bu değikenler şifrelenir ve her otomasyon hesabı için oluşturulan benzersiz bir anahtar kullanarak Azure Automation hesabı içinde saklanır. Bu anahtar bir ana sertifika tarafından şifrelenir.
  • Connection Asset : Automation hesabınızda oluşturduğunuz Runbook aktiviteleriniz üzerinden herhangi bir harici hizmete veya uygulamaya bağlanmak için gereken bağlantı bilgileri için tanımlanır.
  • Variable Asset : Runbook aktivitelerini geliştirirken en çok işimiz olacağı yer. Powershell içerisinde tanımladığımız "String","Integer","Boolen","DateTime" tipinde nesneler tanımlanarak değişken haline gelir ve Runbook aktiviteleri içerisinden çağırılır.
  • Schedule : Geliştirdiğimiz Runbook aktivitelerini Schedule bir şekilde çalışmasını sağlamak için oluşturduğumuz değişken yöntemidir.

Assets oluşturmanın birçok yöntemi var. İsterseniz, Azure Portal, Preview Portal ve Azure Powershell ile yaratma şansına sahipsiniz.

Azure Portal içerisinden bir "String" tipinde Variable Asset oluşturalım. Automation Account içerisine girdikten sonra, "Add Settings" tıklanır ve karşınıza yukarıda bahsetmiş olduğumuz Asset tipleri gelmektedir. Bu kısımda "Add Variable" seçilir.

100515_2118_AzureAutoma2.png

Add Variable seçip ilerledikten sonra, karşımıza değişken tipleri gelecektir. Bu ekranda ben "String" tipinde oluşturacağımı söyleyeceğim ve içerisine bir değer gireceğim.

100515_2118_AzureAutoma3.png

Variable Type olarak String seçildi ve değişkenimizin adı "MyNewVariable" olarak belirledik bir sonraki ekrana geçerek değişkenimize değer ataması gerçekleştireceğiz.

100515_2118_AzureAutoma4.png

Yeni bir String tipinde Varriable Asset tanımlamış durumdayız. Artık Automation Account içerisindeki tüm Runbook aktiviteleri üzerinden erişilebilir durumdadır. Tanımladığımız değişkeni Runbook içerisinde yazdığımız Powershell Workflow içerisinden çağırmak için aşağıdaki örnek bizlere yol gösterecektir. Yukarıdaki ekran içerisinde bir yere daha dikkatinizi çekmek istiyorum, "Encrypted" kapalı olarak gelmiş durumdadır. Eğer bu özelliği aktif ederseniz, tanımladığınız değişkenleriniz Automation hesabınız içerisinde Encrypted bir şekilde saklanacaktır.

100515_2118_AzureAutoma5.png

Get-AutomationVariable cmdlet'ini Runbook içerisinde kullanarak tanımladığım Asset adını gönderek değişkenin içerisindeki değere Runbook içerisinden artık erişebilir durumdayım. İsterseniz, Azure Powershell Module ile yeni bir değişken yaratabilirsiniz.

100515_2118_AzureAutoma6.png

100515_2118_AzureAutoma7.png

· 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.