Microsoft Graph PowerShell ile Kullanıcı Lisansları Nasıl Atılır


Microsoft 365 lisanslarını atamak, Microsoft 365 yönetim merkezindeki toplu eylem araçlarıyla bile sıkıcı bir iş olabilir; yüzlerce kullanıcıyla uğraşırken bu uygun değildir.

Bu basit ama sıkıcı görevleri tamamlamak PowerShell'i kullanmak her zaman daha iyidir ve yüzlerce kullanıcıyla uğraşırken, özellikle de ihtiyacınız olan komut dosyaları zaten elinizde mevcut olduğunda kesinlikle PowerShell'i öneririm!

Bu eğitimde, Microsoft 365'teki kullanıcılara lisans atamak ve lisansları kaldırmak için Microsoft Graph PowerShell'i nasıl kullanabileceğimize bakacağız.

Önkoşullar

Bu eğitim için Microsoft Graph PowerShell modülünün kurulu olması gerekir. Henüz yüklemediyseniz Microsoft Graph PowerShell Modülü Nasıl Kurulur hakkındaki rehberime göz atın.

Ayrıca kullanıcılarınıza atamak için yeterli sayıda kullanılabilir lisansınızın olması da gereklidir. Burada, Microsoft Graph PowerShell'i kullanarak mevcut ve kullanılmış lisanslarınızın bir listesini dışa aktaracak bir el komut dosyası oluşturdum.

Set-MgUserLicense'ı kullanma

Set-MgUserLicense cmdlet'i Microsoft.Graph.Users.Actions modülünde bulunabilir; komutu kullanmak için minimum izin düzeyi Users.ReadWrite'dır. .Tümü, Directory.ReadWrite.All izin kapsamını da kullanabilirsiniz.

Bu bilgilere Find-MgGraphCommand kullanılarak ulaşılabilir, ayrıca 'Modül' ve 'İzinler' bilgilerini görüntülemeyi seçerek sonuçları sınırlandırabiliriz.

Find-MgGraphCommand -Command Set-MgUserLicense | Select Module, Permissions

Yukarıdaki komutun çıktısı aşağıdaki gibi görünecektir. (standart (v1.0) profil ve beta profil için bilgileri görüntülerken 2 sonuç göreceksiniz.

Filtrelerle lisanssız kullanıcıları bulun

Başlangıç olarak kiracınızdaki lisanssız kullanıcı hesaplarını gözden geçirmek isteyebilirsiniz. Lisanssız kullanıcıları bulmak için Get-MgUser cmdlet'ini kullanırken, atanan lisanslar özelliğine bir filtre uygulayabilirsiniz.

Örneğin, aşağıdaki komutu kullanarak lisans sayısının 0'a eşit olduğu tüm kullanıcıları bulmak için:

Get-MgUser -Filter 'assignedLicenses/$count eq 0' -ConsistencyLevel eventual -CountVariable CountVar -All

Bunun tüm lisanssız kullanıcı hesaplarını bulacağını ve kiracınızda ücretsiz lisansları otomatik olarak atayan dinamik gruplarınız varsa bunun sonuçlarınızda görünmeyeceğini unutmayın.

Set-MgUserLicense ile kullanıcı lisansı atama

Öncelikle gerekli modülleri PowerShell oturumumuza aktarıp gerekli izinlerle Microsoft Graph'a bağlanmamız gerekiyor.

Import-Module Microsoft.Graph.Users, Microsoft.Graph.Users.Actions
Connect-MgGraph -Scope User.ReadWrite.All

Artık bağlandık, atamak istediğimiz lisans SKU'sunun kimliğine ihtiyacımız var. Bunu Get-MgSubscribeSku cmdlet'ini çalıştırarak çözebiliriz.

Get-MgSubscribedSku | Select SkuPartNumber, SkuId

Çıktıda, Set-MgUserLicense cmdlet'ini kullandığımızda ihtiyaç duyacağımız SkuId'nin yanı sıra mevcut tüm lisansların bir listesini göreceksiniz.

Buradan hedef lisansımızı bir değişkende saklayabiliriz, aşağıda E5 Developer lisansımızın bilgilerini $license değişkeninde saklıyoruz.

$license = Get-MgSubscribedSku | `
Where-Object {$_.SkuPartNumber -eq "DEVELOPERPACK_E5"}

Bilmemiz gereken bir diğer şey de hedef kullanıcımızın nesne kimliğidir. Bunun için kullanıcı bilgilerimizi bir değişkende saklamak için benzer bir taktik kullanıyoruz. Aşağıda 'Adele Vance'ın kullanıcı bilgilerini $user değişkeninde saklıyoruz.

$user = Get-MgUser | Where-Object {$_.DisplayName -eq "Adele Vance"}

Artık değişkenlerimizi Set-MgUserLicense cmdlet'i ile -UserId ve -AddLicense parametreleriyle kullanabiliriz.

Set-MgUserLicense -UserId $user.Id `
-AddLicenses @{SkuId = ($license.SkuId)} -RemoveLicenses @()

-RemoveLicenses parametresini de boş bir değerle tanımladığımı fark etmişsinizdir. -RemoveLicenses parametresini tanımlamadan aşağıdaki hatayı alırsınız:

Set-MgUserLicense : İstek yükünde 'signLicense' işleminin bir veya daha fazla parametresi eksik. Eksik parametreler şunlardır: RemoveLicenses.

Aşağıda tam komut dosyasını bulabilirsiniz, böylece kopyalayıp yapıştırabilirsiniz!

Aynı anda birden fazla lisans atayın

Import-Module Microsoft.Graph.Users
Connect-MgGraph -scope User.ReadWrite.All
$license = Get-MgSubscribedSku | Where-Object {$_.SkuPartNumber -eq "DEVELOPERPACK_E5"}
$user = Get-MgUser | Where-Object {$_.DisplayName -eq "Adele Vance"}

Set-MgUserLicense -UserId $user.Id -AddLicenses @{SkuId = ($license.SkuId)} -RemoveLicenses @()

-AllLicenses parametresi, bir karma tablosuna birden fazla lisans ekleyerek aynı anda birden fazla lisans atamanıza da olanak tanır. Bunu başarabilmemizin birkaç yolu var…

FÖncelikle tek bir kullanıcıya atanmış tüm lisansları (şablon olarak) alıp başka bir kullanıcıya atayabiliriz. Atanan lisansı bir değişkene depolamak için Get-MgUserLicenseDetail cmdlet'ini kullanarak başlayın.

$lic = Get-MgUserLicenseDetail -UserId $ID

Daha sonra Set-MgUserLicense komutumuza dahil edebileceğimiz bir hastable dizisi oluşturmamız gerekir.

$addlicense = @()
ForEach ($L in $Lic) {
	$addlicense += @{SkuId = ($($L.SkuId))}
}

Gelelim yaptıklarımıza, öncesi ve sonrası:

Yukarıdakilerden, önceden her lisans için bir nesne listesine sahip olduğumuzu, ancak daha sonra her lisans için anahtar değer çiftlerini içeren bir hastable dizisine sahip olduğumuzu görebilirsiniz. Bir kullanıcıya veya kullanıcılara birden fazla lisans atamak için komutumuza dahil etmemiz gereken şey budur.

Set-MgUserLicense -UserId $id -AddLicenses $addlicense -RemoveLicenses @()

Hashtable'ınızı oluşturmanın farklı yolları vardır; bazı durumlarda, birden fazla kullanıcıya belirli lisanslar atamayı planlıyorsanız hashtable dizinizi manuel olarak oluşturmak daha kolay olabilir. Örneğin:

$AADSku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'AAD_PREMIUM'
$IntSku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'INTUNE_A'
$addLicenses = @(
  @{SkuId = $AADSku.SkuId},
  @{SkuId = $IntSku.SkuId}
)

Microsoft Graph PowerShell ile birden fazla kullanıcıya lisans nasıl atanır?

Birden fazla kullanıcıya bir lisans atamak için öncelikle kullanıcılarımızı depolamalı ve ForEach komutunu kullanarak bunlar arasında geçiş yapmalıyız.

Kullanıcılarınıza birden çok yolla ulaşılabilir; kullanıcı listenizi tanımlamak için Get-MgUser cmdlet'ini kullanabilirsiniz; bu listeden komut dosyası için gerekli kullanıcı niteliklerini kolayca elde edebilirsiniz.

Veya kullanıcı listenizi içeren bir CSV'niz zaten varsa, CSV'yi içe aktarabilir ve ardından döngünün içinden kullanıcı kimliğini alabilirsiniz.

Burada, e-posta özniteliklerinde '@ourcloudnetwork.com' içeren, onlara dayalı bir kullanıcı listesi sakladığım ve ardından her kullanıcıya bir DEVELOPERPACK_E5 lisansı atadığım bir örnek var.

Import-Module Microsoft.Graph.Users, Microsoft.Graph.Users.Actions
Connect-MgGraph -scope User.ReadWrite.All

$users = Get-MgUser | Where-Object {$_.Mail -match "@ourcloudnetwork.com"}
$license = Get-MgSubscribedSku | Where-Object {$_.SkuPartNumber -eq "DEVELOPERPACK_E5"}

ForEach ($user in $users) {
    Write-host "Assigning license: $($license.SkuPartNumber) to $($user.DisplayName)"
    Set-MgUserLicense -UserId $user.Id -AddLicenses @{SkuId = ($license.SkuId)} -RemoveLicenses @()
}

Veya aynı görevi gerçekleştirmek istiyorsanız ancak bu sefer CSV'ye kaydettiğiniz mevcut kullanıcı listesini kullanmak istiyorsanız aşağıdaki betiği kullanabilirsiniz.

Import-Module Microsoft.Graph.Users, Microsoft.Graph.Users.Actions
Connect-MgGraph -scope User.ReadWrite.All

$users = Import-Csv "C:\temp\userlist.csv"
$license = Get-MgSubscribedSku | Where-Object {$_.SkuPartNumber -eq "DEVELOPERPACK_E5"}

ForEach ($user in $users) {
    Write-host "Assigning license: $($license.SkuPartNumber) to $($user.DisplayName)"
    $userid = $null
    $userid = (Get-MgUser -UserId [email ).Id
    Set-MgUserLicense -UserId $user.Id -AddLicenses @{SkuId = ($license.SkuId)} -RemoveLicenses @()
}

Tek kullanıcı lisansını kaldırma

Tek bir kullanıcı lisansını kaldırırken, -RemoveLicenses parametresi bir hash tablosu beklemez, bunun yerine yalnızca lisansın SkuId dizesini bekler. Örneğin bir kullanıcıdan tek bir lisansı kaldırmak için aşağıdaki komutu kullanabiliriz:

$lic = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'INTUNE_A'

Set-MgUserLicense -UserId $ID -AddLicenses @() -RemoveLicenses $lic.SkuId

Parametrede sadece SkuId string değerini sağladığımızda bu komutun başarılı olduğunu görebiliriz.

Birden fazla lisansı kaldırın

Birden fazla lisansı aynı anda kaldırmanın konsepti, birden fazla lisans eklemeye benzer. Birden fazla lisansı kaldırmak için komuta bir dizi SkuId değeri tanımlayabiliriz.

Daha önce olduğu gibi, dizinizi oluşturmanın birden fazla yolu vardır; dizinizi komut dosyanızda manuel olarak tanımlayabilir veya mevcut bir kullanıcının değerlerine veya mevcut herhangi bir lisansa göre oluşturabilirsiniz.

Örneğin, belirli SkuId'lerden oluşan bir dizi listesi oluşturmak için aşağıdakileri kullanabilirsiniz:

$AADSku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'AAD_PREMIUM'
$IntSku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'INTUNE_A'
$Lics = "$($AADSku.SkuID)", "$($IntSku.SkuId)"

Dizi aşağıdaki gibi görünecektir:

Belirtilen lisansları tek bir kullanıcıdan kaldırmak için bu dizi daha sonra aşağıdaki şekilde komutunuza dahil edilebilir.

Set-MgUserLicense -UserId $ID -AddLicenses @() -RemoveLicenses $lics

Bu komutu kuruluşunuzdaki birden fazla kullanıcıya karşı çalıştırmak için önceki örneği kullanabilirsiniz.

İlgili makaleler