Microsoft, Lisans Yönetimi için Azure AD Cmdlet'lerinden Taşınmayı Zorluyor
Bazı Cmdlet'ler 2022'de Çalışmayı Durduracak
Bazen teknoloji dünyasında bile kutsanmış bir şans patlak verir. Microsoft Graph PowerShell SDK'sını tartıştığımda, Office 365 kiracılarını (çevrimiçi olarak mevcuttur) yönetmek için Microsoft Graph'ı kullanmayla ilgili TEC 2021 oturumumda da durum böyleydi. Organizasyon ekibi, konferansın sorunsuz bir şekilde ilerlemesini sağlamak için TEC oturumlarını önceden kaydetti, bu nedenle Microsoft, lisans yönetimi için Azure AD cmdlet'lerinin 30 Haziran 2022'de çalışmayı durduracağını açıkladığında kucağıma düşen örneği kullanamadım. ( Güncelleme 15 Mart 2022: Microsoft, kullanımdan kaldırılma tarihini 26 Ağustos 2022'ye erteledi).
Bu, Microsoft'un Haziran ayında Azure AD Grafiğinin geleceği hakkında verdiği bilgilendirmenin devamıydı. Özetle, Azure AD Graph, Microsoft Graph'tan ayrı, daha eski bir bileşendir ve kullanımdan kaldırılmaktadır. Azure AD Grafiğine bağımlı olan Azure AD ve Microsoft Çevrimiçi Hizmetler modülleri, 2022'de desteklenmeyen bir duruma giriyor. Modüllerdeki cmdlet'lerin çoğu çalışmaya devam edecek, ancak Microsoft'un devre dışı kalması nedeniyle lisans yönetimi cmdlet'leri 30 Haziran 2022'de veri döndürmeyi durduracak. yeni bir lisans yönetimi platformuna geçiyoruz.
Güncelleme: Microsoft, Azure AD ve MSOL modüllerinin kullanımdan kaldırılma tarihini 2022'nin sonuna itti.
Açıkçası, kullanımdan kaldırmanın, insanların Azure AD'nin farklı yönlerini yönetmek için kullandıkları birçok komut dosyası üzerinde zincirleme bir etkisi var ve lisans yönetimi cmdlet'leri çalışmayı bırakmadan önce bunların yerine hemen bir yedek bulma ihtiyacı ortaya çıkıyor. Microsoft'un rehberliği, Microsoft Graph PowerShell SDK'sındaki questLicense Graph API'sini veya Set-MgUserLicense cmdlet'ini kullanmaktır.
Microsoft Graph PowerShell SDK'sına yükseltme
Bir Azure AD cmdlet'ini çıkarıp bir SDK cmdlet'iyle değiştirmek ne kadar zor olabilir? Görünüşte değiştirmenin basit olması gerekir, ancak genellikle olduğu gibi bu algı yaklaşık beş dakika sürer. En azından, birden çok hesap için Office 365 SKU'sundan (ürün) tek bir hizmet planını kaldırmak üzere komut dosyamı yükselttiğimde bunu keşfettim. Bu betik, lisans bilgilerini işlemek için Azure AD çağrılarını kullanıyor; dolayısıyla önümüzdeki Haziran ayında yaklaşan son teslim tarihinden etkilenen betik türüne iyi bir örnek.
Karşılaştığım ilk konu SDK cmdlet'lerinin belgeleriydi. Durumu anladığım kadarıyla Microsoft, belgelerin çoğunu koddan oluşturuyor; bu da metnin bazı tuhaf ifadelere ve tamamen anlaşılmaz doğasına neden oluyor. Doğal olarak acı bir şekilde inledim ve biraz araştırdıktan sonra beni doğru yöne yönlendirecek bazı yararlı ipuçları keşfettim.
Yükseltme Adımları
Microsoft Graph PowerShell SDK, temsilci ve yalnızca uygulama kimlik doğrulamasını destekler. Bu örnekte, çoğunlukla betiğin Azure AD tabanlı sürümünde olanın bu olması nedeniyle Azure AD'den bir erişim belirteci almak için temsilci erişimi kullanacağız. Özet olarak, kodu yükseltmek için attığım adımlar şunlardır:
Grafiğe Bağlan. Connect-MgGraph cmdlet'i Grafiğe bağlanır. Bağlantı isteği, verilerle etkileşim kurmak için gereken izinleri belirtebilir. Örneğin, bu bağlantı, dizin bilgilerini okuma ve yazma izinlerini ister.
Connect-MgGraph -Scopes "User.ReadWrite.All","Directory.ReadWrite.All"Beta profilini seçin. Grafik API'leri farklı sürümlerde gelir (tipik olarak tam üretim için V1.0 ve geliştirme için Beta). Kullanıcı hesaplarına ilişkin lisans yönetimi bilgilerine yalnızca Beta profilini seçerseniz Get-MgUser cmdlet'i kullanılarak ulaşılabilir. Bu kod, yüklenen profili kontrol eder ve ayarlanmamışsa Beta'yı seçer.
$Profile = (Get-MgProfile).Name
If ($Profile -ne "beta") { Select-MgProfile Beta }
Kiracıdaki ürün lisanslarını (SKU'lar) getirin. Komut dosyası, yöneticinin bir SKU'dan (Office 365 E3 gibi) kaldırmak üzere bireysel bir hizmet planı (Formlar, Beyaz Tahta veya Planlayıcı gibi) seçmesine olanak tanır. Yöneticinin seçim yapmasına izin vermek için Get-MgSubscribeSku cmdlet'ini kullanarak kiracıda bulunan SKU'ların listesini getiriyoruz.
[array]$Skus = (Get-MgSubscribedSku)Daha sonra SKU bilgilerini, yöneticinin kaldırılacak hizmet planını seçmesi için SKU menülerini ve hizmet planlarını sunmak üzere kullanabiliriz. Sonuç, her ikisi de GUID olarak tanımlanan seçilmiş bir SKU ve seçilmiş hizmet planıdır.
İşlenecek kullanıcı hesaplarını seçin. Get-MgUser cmdlet'i, işlenmek üzere bir dizi Azure AD hesabı seçmenin iyi bir yoludur. Örneğin, belirli bir SKU'ya atanmış tüm hesapları bulmak için aşağıdaki gibi bir komut kullanabilirsiniz:
[array]$Users = Get-MgUser -Filter "assignedLicenses/any(x:x/skuId eq $SelectedSkuId)" -allAncak bu komut dosyası, filtreleme yetenekleri üstün olduğundan Get-ExoMailbox'ı kullanır. Önemli olan, kod lisans bilgilerini güncellediğinde girdi olarak kullanılacak bir dizi hesap GUID'sine veya kullanıcı asıl adına sahip olmaktır. Get-ExoMailbox bu bilgiyi sağlayabilir, dolayısıyla kodun bu bölümünü yükseltmedim.
Hesaplara ilişkin lisans bilgilerini işleyin. Komut dosyası, geçerli lisans bilgilerini almak (Get-MgUser'i kullanarak) ve daha sonra zaten hizmet planları hakkında bilgi içeren bir lisans nesnesi (MicrosoftGraphAssignedLicense) oluşturmak için seçilen hesaplar kümesinde döngü yapar. hesap ve şimdi kaldırmak istediğimiz hizmet planı için devre dışı bırakıldı. Lisans nesnesini doldurduktan sonra güncellemeyi uygulamak için Set-MgUserLicense'i çağırıyoruz.
$ExistingDisabledPlans = $Null
ForEach ($S in $User.AssignedLicenses) { # Check for existing disabled licenses
If ($S.SkuId -eq $SelectedSkuId) {
$ExistingDisabledPlans = $S.DisabledPlans }
}
$ExistingDisabledPlans += $ServicePlanId # Add the plan we want to remove to the set of disabled plans
$LicenseToRemove = New-Object -TypeName Microsoft.Graph.PowerShell.Models.MicrosoftGraphAssignedLicense
$LicenseToRemove.SkuId = $SelectedSkuId
$LicenseToRemove.DisabledPlans = $ExistingDisabledPlans
$Status = Set-MgUserLicense -UserId $User.id -AddLicenses $LicenseToRemove -RemoveLicenses @()
}
Set-MgUserLicense sözdiziminin biraz tuhaf olduğunu söyleyen ilk kişi ben olurum. Bir hesaba yeni bir SKU ekleme sözdiziminin şöyle olduğu göz önüne alındığında:
$User = Get-MgUser -UserId Imran.Khan@office365itpros.com
$NewSkuId ="8c4ce438-32a7-4ac5-91a6-e22ae08d9c8b"
Set-MgUserLicense -UserId $User.id -AddLicenses @{SkuId = $NewSkuId} -RemoveLicenses @()
Lisans nesnesini AddLicenses yerine RemoveLicenses parametresiyle kullanmayı bekliyordum, ancak lisans nesnesini RemoveLicenses'e bilgi ileterek güncellemeyi beklediğim yol bu değildi. parametresini AddLicenses yerine kullanabilirsiniz, ancak işler böyle yürümez. Bir hesaba yeni bir SKU eklemek, SKU'da yer alan tüm hizmet planlarını etkinleştirir. Bu durumda, Grafiğe belirtilen hizmet planlarını belirtilen SKU'dan devre dışı bırakmasını bildirmek için güncellenmiş lisans bilgilerini iletiriz. Bu konuyla ilgili belgeler daha açık olsaydı iyi olurdu.
Cmdlet'in mutlu olması için RemoveLicenses'e boş bir dizi aktarmanın gerekli olduğunu unutmayın. Parametre boş olsa bile bir değer gerektirir ve aktarılan hiçbir şey bulamazsa itiraz eder.
Hesaplardan Lisansları Kaldırma
Bir hesaptan bir veya daha fazla ürün lisansını (SKU) kaldırmak için süreç şu şekildedir:
- Kaldırılacak ürün lisanslarının bir dizisini oluşturun. Aynı anda birden fazla ürün lisansını kaldırabilirsiniz. Dizi, kaldırılacak ürün SKU'larını tanımlayan GUID'leri içerir.
- Set-MgUserLicense komutunu çalıştırın ve diziyi RemoveLicenses parametresi olarak iletin. Bu sefer cmdlet içeriğini oluşturmak için AddLicenses parametresine boş bir dizi aktarıyoruz. Bu örnek, bir hesaptan iki ürünü kaldırır:
[array]$SkuToRemove = "1f2f344a-700d-42c9-9427-5cea1d5d7ba6", "4016f256-b063-4864-816e-d818aad600c9"
Set-MgUserLicense -UserId $User.id -RemoveLicenses $SkuToRemove -AddLicenses @()
Hizmet Planı Kaldırmanın Doğrulanması
Her şeyin işe yaradığını test etmek için, MyAnalytics hizmet planını (Microsoft, Viva Insights olarak yeniden adlandırıyor) bir dizi Office 365 E3 hesabından kaldırmak için komut dosyasını kullandım. Hesaplara ilişkin lisans atamalarını güncellemek için her şey sorunsuz gitti. Atamaları PowerShell ile veya Microsoft 365 yönetim merkezi aracılığıyla kullanıcı bilgilerini görüntüleyerek doğrulayabilirsiniz (Şekil 1).
Yükseltme Süresi Ne Kadar Sürer?
İnsanların 30 Haziran'da çekiç gelmeden önce PowerShell komut dosyalarını yükseltmek için gereken süre konusunda endişe duyacaklarından eminim. Aşağıdakiler de dahil olmak üzere çeşitli değişkenler mevcuttur:
- Geliştiricinin Microsoft Graph PowerShell SDK'sına aşinalığı.
- Microsoft, SDK'yı ve belgelerini ne kadar hızlı geliştiriyor?
- Mevcut betiklerin karmaşıklığı ve kaç Azure AD veya Microsoft Çevrimiçi Hizmetler lisans yönetimi cmdlet'inin değiştirilmesi gerektiği.
- Komut dosyalarının çalıştırıldığı ortam (örneğin, kullanılan kimlik doğrulama yöntemi).
Eski cmdlet'lerin çalışmayı bırakmasına dokuz aydan biraz fazla zamanımız kaldı. Bir kiracıdaki etkilenen komut dosyalarının sayısı muhtemelen azdır ve her şeyi sıfırdan yeniden yazmanıza gerek yoktur. Yani, kendi lisans yönetimi çözümünüzü oluşturmadığınız sürece. Eğer durum buysa, yapmanız gereken bazı işler var. Değilse, çoğu komut dosyasının güncellenmesi haftalar yerine günler meselesi olmalıdır.
Modülün Kullanımdan Kaldırılmasından Önce Keşfedin ve Keşfedin
Senaryomun bir kopyasını GitHub'dan alabilirsiniz. Bir hatırlatma olarak, bu kod, üretim kalitesinde bir çözüm olmaktan ziyade bir prensibi keşfetmek ve göstermek için yazılmıştır. Microsoft Graph PowerShell SDK aracılığıyla lisans yönetimini öğrenmek, keşfetmek ve etkileşimde bulunmak için kodu kullanın. SDK ile çalışmak zamanla kolaylaşacaktır. En azından böyle olmazsa, kullanımdan kaldırma gerçekleştiğinde Microsoft'un bazı mutsuz müşterileri olabilir. Kodlama almanın zamanı geldi.
