Microsoft Entra’da Lisanslı Grupları Listeleme Yöntemleri
Kurumsal çevrenizde lisans yönetimi kritik bir rol oynar. Lisansların hangi gruplara atanıp hangilerinde kullanılmadığının bir raporunu oluşturmak, maliyet optimizasyonu ve kaynak yönetimi açısından oldukça faydalı olabilir. Bu yazıda, Microsoft Entra üzerinde PowerShell ve Microsoft Graph API kullanarak lisans etkinleştirilmiş grupları nasıl listeleyeceğinizi öğreneceksiniz.
Neden Lisans Etkin Gruplarını Bulmalısınız?
Günümüzde birçok kuruluş, grup tabanlı lisanslama modelini kullanarak lisanslarını yönetmektedir. Bu modelde, lisanslar gruplara atanır ve o gruptaki tüm kullanıcılara otomatik olarak uygulanır. Ancak, zamanla bu grupların sayısı arttıkça, hangi gruplara hangi lisansların atandığını takip etmek zorlaşabilir. İşte bu noktada PowerShell devreye giriyor. PowerShell ile yazacağımız basit bir betik sayesinde, lisans etkinleştirilmiş tüm grupları hızlı ve kolay bir şekilde tespit edebiliriz.
Gereksinimler
Lisanslı grupları listelemek için aşağıdaki gereksinimleri karşılamanız gerekir:
- PowerShell Modülleri: İş istasyonunuzda
Microsoft.Graph.Authentication
veMicrosoft.Graph.Groups
modüllerinin yüklü olması gerekmektedir.- Kurulum:
Install-Module Microsoft.Graph -Scope CurrentUser
- Kurulum:
- Yönetici İzni: Microsoft Graph’ta
Group.Read.All
veOrganization.Read.All
izinlerine sahip bir yönetici hesabı gereklidir.
PowerShell Betiği ile Lisanslı Grupları Bulma
Aşağıdaki adımları izleyerek lisanslı grupları bulabilirsiniz:
- Microsoft Graph’a Bağlanın: İlk olarak, gerekli izinlerle Microsoft Graph’a bağlanmanız gerekiyor.
Microsoft Graph API Bağlantısı: Connect-MgGraph -Scopes Organization.Read.All, Group.Read.All
Lisans Atanmış Grupları Listeleme
Bu komut sayesinde, sadece lisans atanılmış gruplar listelenir.
Get-MgGroup -Filter "assignedLicenses/`$count ne 0" `
-ConsistencyLevel eventual -Property "displayName,assignedLicenses"
Get-MgGroup -All -Property Id, MailNickname, DisplayName, GroupTypes, Description, AssignedLicenses | Where-Object {$_.AssignedLicenses -ne $null }
Lisansları olan Gruplar için İstatistikleri Alma
Aşağıdaki betik, lisans atanan gruplar hakkında detaylı bilgiler almanızı sağlar:
# Import User Graph Module
Import-Module Microsoft.Graph.Users
# Authenticate to MS Graph
Connect-MgGraph -Scopes "User.Read.All", "Directory.Read.All", "Group.ReadWrite.All"
#get all groups with licenses
$groups = Get-MgGroup -All -Property LicenseProcessingState, DisplayName, Id, AssignedLicenses | Select-Object displayname, Id, LicenseProcessingState, AssignedLicenses | Select-Object DisplayName, Id, AssignedLicenses -ExpandProperty LicenseProcessingState | Select-Object DisplayName, State, Id, AssignedLicenses | Where-Object {$_.State -eq "ProcessingComplete"}
$groupInfoArray = @()
# Filter the groups to only include those that have licenses assigned
$groups = $groups | Where-Object {$_.AssignedLicenses -ne $null}
# For each group, get the group name, license types, total user count, licensed user count, and license error count
foreach ($group in $groups) {
$groupInfo = New-Object PSObject
$groupInfo | Add-Member -MemberType NoteProperty -Name "Group Name" -Value $group.DisplayName
$groupInfo | Add-Member -MemberType NoteProperty -Name "Group ID" -Value $group.Id
$groupInfo | Add-Member -MemberType NoteProperty -Name "License Types" -Value ($group.AssignedLicenses | Select-Object -ExpandProperty SkuId)
$groupInfo | Add-Member -MemberType NoteProperty -Name "Total User Count" -Value (Get-MgGroupMember -GroupId $group.Id -All | Measure-Object).Count
$groupInfo | Add-Member -MemberType NoteProperty -Name "Licensed User Count" -Value (Get-MgGroupMember -GroupId $group.Id -All | Where-Object {$_. LicenseProcessingState -eq "ProcessingComplete"} | Measure-Object).Count
$groupInfo | Add-Member -MemberType NoteProperty -Name "License Error Count" -Value (Get-MgGroupMember -GroupId $group.Id -All | Where-Object {$_.LicenseProcessingState -eq "ProcessingFailed"} | Measure-Object).Count
$groupInfoArray += $groupInfo
}
# Format the output and print it to the console
$groupInfoArray | Format-Table -AutoSize
Detaylı Raporlama
Bir grup için atanmış lisans SKU’larının çözülmüş halini almak için aşağıdaki betiği kullanabilirsiniz:
Connect-MgGraph -Scopes Organization.Read.All, Group.Read.All
$skus = Get-MgSubscribedSku
$groups = Get-MgGroup -Filter "assignedLicenses/`$count ne 0" -Property "displayName,assignedLicenses"
$groups | ForEach-Object {
$licenses = @()
foreach ($license in $_.AssignedLicenses.SkuId) {
$skuName = ($skus | Where-Object { $_.SkuId -eq $license }).SkuPartNumber
$licenses += $skuName
}
[PSCustomObject]@{
GroupName = $_.DisplayName
Licenses = $licenses -join ", "
}
} | Format-Table -AutoSize
Sonuçları bir CSV dosyasına aktarmak için:
$groups | Export-Csv -Path "C:\LisansliGruplar.csv" -NoTypeInformation -Encoding UTF8
Sonuç
Microsoft Graph PowerShell kullanarak Microsoft Entra’da lisans etkinleştirilmiş grupları nasıl bulacağınızı adım adım anlattım. Bu yöntem, büyük ölçekli ortamlar için performansı korurken, lisansların nasıl dağıtıldığını anlamanızı sağlar.
Düzenli olarak bu raporu çalıştırarak, lisans yönetiminizi optimize edebilir ve maliyetleri kontrol altında tutabilirsiniz. Lisans yönetimi, kurumsal IT yönetiminin kritik bir parçasıdır. Bu tür otomasyonlar, hem zamandan tasarruf etmenize hem de uyumluluk risklerini azaltmanıza yardımcı olur.
Bu bilgilerin faydalı olması dileğiyle..