PowerShell Komut Dosyalarını Microsoft Graph PowerShell SDK'ya Yükseltmek için GitHub Copilot'u Kullanma
GitHub Copilot'a Giriş
Microsoft, Azure AD, Azure AD Preview ve MSOL gibi eski PowerShell modüllerine güvenmek yerine Microsoft 365 kiracı yapılandırmasına, uygulamalarına ve kullanıcı verilerine programlı erişim için Microsoft Graph API'yi standartlaştırıyor. Aslında bu üç modül kullanımdan kaldırılıyor. Kullanımdan kaldırılma tarihi geçmiş olsa da kuruluşlar, artık bu modüllere bağımlı olmayacak şekilde komut dosyalarını güncellemeyi planlamalıdır.
GitHub Copilot yükseltme konusunda yardımcı olabilir. GitHub Copilot, GitHub tarafından ChatGPT'nin yaratıcıları OpenAI ile işbirliği içinde geliştirilen, yapay zeka destekli bir kod tamamlama ve öneri aracıdır. Gerçek zamanlı kod önerileri ve doğal dil yorumlarına ve kod düzenleyicilerdeki bağlama dayalı otomatik tamamlama sağlayarak herkesin kod yazmasına yardımcı olur. Kod önerileri ve Copilot'un PowerShell anlayışının birleşimi, kiracı yöneticilerinin eski komut dosyalarını Microsoft Graph PowerShell SDK'daki cmdlet'leri kullanacak şekilde dönüştürmelerine yardımcı olabilir. GitHub Copilot'un yalnızca bir araç olduğunu unutmamak önemlidir. Microsoft Graph'ın nasıl çalıştığına ilişkin temel anlayışın yerini alamaz. Microsoft Graph SDK'yı anlamak isteyenler için Practical 365, Microsoft Graph PowerShell SDK'nın kullanımını kapsayan kapsamlı bir makale koleksiyonuna sahiptir.
Github Copilot için bu Hızlı Başlangıç, Visual Studio Code için kaydolma ve eklentiyi yükleme konusunda size yol gösterir. Henüz kaydolmadıysanız 30 günlük ücretsiz deneme süresi vardır. 30 günden sonra ücret aylık 10,00 ABD dolarıdır. 30 günde yapabileceğiniz çok şey var, bu yüzden GitHub Copilot'u test etmeye değer.
Bir Komut Dosyasını Güncellemeye Başlamadan Önce
Bir betikteki herhangi bir koda dokunmadan önce yapılması gereken iki şey vardır:
- Komut dosyasının ne yaptığını anlayın.
- Komut dosyasının ne yaptığını test edin.
Belki senaryo siz organizasyona katılmadan önce üretime geçmiştir. Belki senaryo yazarı yakın zamanda organizasyondan ayrılmıştır. Senaryonun ne yaptığını bilmiyorsanız ve değişiklik yaparsanız, yine de yapması gerekeni yapıp yapmadığını nasıl bilebilirsiniz? Komut dosyası, kodu güncellemeden önce her 10 çalıştırılışında bir hata mı verdi yoksa bu yeni bir sorun mu?
Bir dizi test, betiğin yapması gereken her şeyi yaptığından emin olmak için basit bir kontrol listesi görevi görebilir. Komut dosyasına bağlı olarak, kontrol etmek ve yapmaması gereken hiçbir şeyi yapmadığından emin olmak akıllıca olabilir. Testleri otomatikleştirmekle ilgileniyorsanız Pester'ı kullanmayı düşünün. Testler otomatik olsun ya da olmasın, beklenen sonuçların ne olduğunu bilmeniz gerekir, böylece bunları güncellenmiş komut dosyalarınızın sonuçlarıyla karşılaştırabilirsiniz.
Sonuç olarak, kodu güncellemeye başladığınızda, herhangi bir değişiklik yapmadan önce neyin işe yarayıp neyin yaramadığını bilmeniz gerekir.
GitHub Copilot ile Komut Dosyası Kodunu Güncelleme
Bir betiği güncellemek için kodun tamamını CoPilot'a atıp "Bunu Microsoft Graph PowerShell SDK'yı kullanarak yeniden yazın" demeyin. Bunun yerine kodu gözden geçirin ve eski modüllerdeki cmdlet'lerin nerede kullanıldığını öğrenin. Oradan bu kod satırlarını değiştirmek için Copilot'u kullanın.
Microsoft 365 kiracısı için bir lisans envanter raporu oluşturan "PowerShell için Microsoft Graph SDK'sını Kullanarak Microsoft 365 Lisans Raporu Nasıl Oluşturulur"a benzer bir komut dosyasına sahibim. Komut dosyası MSOL modülünü kullanır, Connect-MSOLService cmdlet'ini kullanarak Microsoft 365'e bağlanır, ürün SKU'larını alır ve kullanılabilir lisans sayısına göre bir rapor oluşturur. Bu script yaklaşık 350 satır koddan oluşmaktadır. Ancak değişmesi gereken şeyin özü yalnızca yaklaşık 10 satır koddu. Bu kod satırlarını geçici bir komut dosyasına kopyaladım ve Copilot ile etkileşime girmeye başladım.
Aşağıdaki kod orijinal kodun bir kısmının özetidir. Bu kod parçası, tam bir HTML raporu oluşturmak yerine değişkenleri yazıyor, böylece eski sürümün çıktısını test edip yeni sürümle karşılaştırabiliyorum.
Connect-MSOlService
$licenses = Get-MSOlAccountSku
Foreach ($license in $licenses)
{
if($license.AccountSkuId -eq "andylanddev:SPE_E3")
{
$spe3Active = $license.ActiveUnits
$spe3Warning = $license.WarningUnits
$spe3Consumed = $license.ConsumedUnits
}
if($license.AccountSkuId -eq "andylanddev:SPE_E5")
{
$spe5Active = $license.ActiveUnits
$spe5Warning = $license.WarningUnits
$spe5Consumed = $license.ConsumedUnits
}
}
$spe3Warning
$spe3Active
$spe3Consumed
$spe5Warning
$spe5Active
$spe5ConsumedGithub Copilot için Hızlı Başlangıç işlemini tamamladıktan sonra, Copilot Chat Visual Studio Code uzantısını yüklemiş olmalısınız.
Şekil 1’de yukarıda gösterilen kodu seçip Copilot Chat’e “Bu kodu MSOL Modülü yerine Microsoft.Graph PowerShell Modülünü kullanacak şekilde güncelleyin” diyerek yönlendirdim.
Copilot, kodu yükseltmek için çeşitli eylemler gerçekleştirdi. Öncelikle Get-MSOLAccountSku cmdlet'ini Get-MgSubscribeSku ile değiştirdi. Copilot ayrıca AccountSkuId özelliğinin SkuPartNumber ile değiştirilmesi gerektiğini de biliyordu.
Çıktıyı karşılaştırmayı kolaylaştırmak için yeni kodu demoscript.ps1'deki eski kodun altına kopyaladım (Şekil 2)
Bu ekran görüntüsünden belli değil ama karşılaştığım sorunlardan biri Copilot'un kullandığı kapsamın doğru olmamasıydı. Copilot Directory.Read.All kullanılmasını önerdi. Ancak Abone Olunan SKU'ları Listele API'sine ilişkin belgeler, bu API çağrısının Organization.Read.All iznini gerektirdiğini belirtir. Resmi Microsoft belgelerine ek olarak, Cmdlet'ler için gerekli kapsamların belirlenmesine ilişkin ayrıntılı bir açıklama için Hangi Microsoft Graph İzinlerine İhtiyacınız Olduğunu Nasıl Anlayabilirsiniz başlıklı bu makaleyi okuyun.
Kendimi GitHub Copilot ile adeta bir çift programlama ortağıymış gibi "sohbet ederken" buluyorum. Bir dahaki sefere sorduğumda doğru kapsamı sağlayacağından emin olmak istedim.
Doğru kapsamlara sahip olmama rağmen Github Copilot, Şekil 2'de gösterilen kapsamın tam URI'sini yazdı. Bunu daha kısa sürümü kullanmak için Organizasyon.Read.All (Şekil 3) olarak değiştirdim. Betik grafiğe bağlandığında çıktıyı en aza indirmek için "NoWelcome" parametre anahtarını da ekledim. Bunun dışında eski ve yeni scriptlerin çıktısı aynıydı. Testlerin başarılı olduğunu düşündüğünüzde, betiğin tamamını Microsoft Graph PowerShell SDK'ya yükseltmek için test etmeye başlayabilirsiniz.
Orijinal kodun bir kopyası ve güncellenmiş sürüm bu Github Gist'te bulunabilir.
Github Copilot Sürekli İyileşiyor
GitHub Copilot'u bir yıldan biraz daha uzun bir süre önce kullanmaya başladığımda, yaklaşık bir hafta oynadıktan sonra vazgeçtim. Sevimli bir oyuncaktı ama çözdüğünden daha fazla soruna neden oldu. Yaklaşık 6 ay önce tekrar denemeye karar verdim ve kod tamamlamadaki gelişmeler inanılmazdı. Öneriler %90 oranında yerindeydi.
Ancak sonunda ayda 10 ABD doları ödemeye başlamamı sağlayan özellik, bu yılın başlarında Microsoft Build'de duyurulan GitHub Copilot Chat oldu ve artık herkesin kullanımına sunuldu. Duyuruyla ilgili ayrıntılar için bu makaleye göz atın. Copilot Chat'in kullanıma sunulmasıyla birlikte, kodu yeniden düzenlemek için artık bir dizi klavye kısayolunu ezberlememe veya IDE'mdeki menüleri kazmaya ihtiyacım yok. Copilot Chat'ten "Bu işleve yoruma dayalı yardım ekle" komutunu isteyebilirim ve bu, yardımı otomatik olarak ekler ve yazdığım işlevin açıklaması ve özeti için harika bir başlangıç noktası sağlar (Şekil 4).
Kapsamın bir parametre olmasını istemiyorum bu yüzden Copilot Chat'ten onu kaldırmasını rica ediyorum (Şekil 5).
GitHub Copilot benim için o kadar çok sıradan iş yapıyor ki, kod yazarken GitHub Copilot'a erişimi olmayan bir IDE'de çalışırken kendimi hayal kırıklığına uğramış buluyorum.
GitHub Copilot mükemmel mi? Kesinlikle hayır. Ürettiği her şey test edilmeli ve doğrulanmalıdır. Test senaryolarının geliştirilmesi ve uygulanması her zaman senaryo geliştirmenin bir parçası olmalıdır.
Her ne kadar incelikli olsa da, kod yazma şeklimi değiştirdiğini söyleyebilirim, benim için kesinlikle ayda 10 dolar değerinde. En az haftada bir PowerShell kodu yazarsanız GitHub Copilot'un değerli bir yatırım olduğunu söyleyebilirim. Henüz tam olarak orada değilseniz, 3 ila 6 ay sonra bir şans daha verin; muhtemelen hoş bir sürpriz yaşayacaksınız.
Active Directory için Siber Güvenlik Risk Yönetimi
Bu Siber Güvenlik Risk Yönetimi Çözümleri aracılığıyla AD saldırılarını nasıl önleyeceğinizi ve bu saldırılardan nasıl kurtulacağınızı keşfedin.




