วิธีกำหนดใบอนุญาตผู้ใช้ด้วย Microsoft Graph PowerShell
การมอบหมายใบอนุญาต Microsoft 365 อาจเป็นงานที่น่าเบื่อ แม้ว่าจะมีเครื่องมือการดำเนินการแบบกลุ่มในศูนย์การจัดการ Microsoft 365 แต่เมื่อคุณติดต่อกับผู้ใช้หลายร้อยรายก็ไม่สะดวก
การทำภารกิจง่ายๆ แต่น่าเบื่อเหล่านี้ให้สำเร็จจะดีกว่าเสมอโดยใช้ PowerShell และฉันขอแนะนำอย่างแน่นอนเมื่อต้องรับมือกับผู้ใช้หลายร้อยคน โดยเฉพาะอย่างยิ่งเมื่อสคริปต์ที่คุณต้องการพร้อมให้คุณใช้งานแล้ว!
ในบทช่วยสอนนี้ เราจะดูวิธีที่เราสามารถใช้ Microsoft Graph PowerShell เพื่อมอบหมายและลบใบอนุญาตออกจากผู้ใช้ใน Microsoft 365
ข้อกำหนดเบื้องต้น
สำหรับบทช่วยสอนนี้ คุณต้องติดตั้งโมดูล Microsoft Graph PowerShell หากคุณยังไม่ได้ติดตั้ง โปรดดูคำแนะนำของฉันใน วิธีการติดตั้ง Microsoft Graph PowerShell Module
จำเป็นอย่างยิ่งที่คุณจะต้องมีสิทธิ์การใช้งานเพียงพอที่จะมอบหมายให้กับผู้ใช้ของคุณ ฉันได้สร้างสคริปต์มือที่นี่ซึ่งจะส่งออกรายการใบอนุญาตที่มีอยู่และใช้งานของคุณโดยใช้ Microsoft Graph PowerShell
ใช้ชุด MgUserLicense
Set-MgUserLicense cmdlet สามารถพบได้ในโมดูล Microsoft.Graph.Users.Actions ในขณะที่ระดับสิทธิ์ขั้นต่ำในการใช้คำสั่งคือ Users.ReadWrite .ทั้งหมด คุณยังสามารถใช้ขอบเขตการอนุญาต Directory.ReadWrite.All ได้
ข้อมูลนี้สามารถพบได้โดยใช้ Find-MgGraphCommand นอกจากนี้เรายังสามารถจำกัดผลลัพธ์โดยเลือกที่จะแสดงข้อมูล 'โมดูล' และ 'สิทธิ์'
Find-MgGraphCommand -Command Set-MgUserLicense | Select Module, Permissionsผลลัพธ์ของคุณจากคำสั่งด้านบนจะมีลักษณะดังนี้ (คุณจะเห็นผลลัพธ์ 2 รายการในขณะที่กำลังแสดงข้อมูลสำหรับโปรไฟล์มาตรฐาน (v1.0) และโปรไฟล์เบต้า
ค้นหาผู้ใช้ที่ไม่มีใบอนุญาตด้วยตัวกรอง
ในการเริ่มต้น คุณอาจต้องการตรวจทานบัญชีผู้ใช้ที่ไม่มีสิทธิ์การใช้งานในผู้เช่าของคุณ หากต้องการค้นหาผู้ใช้ที่ไม่มีใบอนุญาต คุณสามารถใช้ตัวกรองในคุณสมบัติที่ได้รับมอบหมายใบอนุญาตในขณะที่ใช้ Get-MgUser cmdlet
ตัวอย่างเช่น หากต้องการค้นหาผู้ใช้ทั้งหมดที่จำนวนใบอนุญาตเท่ากับ 0 โดยใช้คำสั่งต่อไปนี้:
Get-MgUser -Filter 'assignedLicenses/$count eq 0' -ConsistencyLevel eventual -CountVariable CountVar -Allโปรดทราบว่าการดำเนินการนี้จะค้นหาบัญชีผู้ใช้ที่ไม่มีใบอนุญาตทั้งหมด และหากคุณมีกลุ่มไดนามิกที่มอบหมายใบอนุญาตฟรีให้กับผู้เช่าของคุณโดยอัตโนมัติ สิ่งนี้จะไม่ปรากฏในผลลัพธ์ของคุณ
กำหนดใบอนุญาตผู้ใช้ด้วย Set-MgUserLicense
ขั้นแรก เราต้องนำเข้าโมดูลที่จำเป็นลงในเซสชัน PowerShell ของเรา และเชื่อมต่อกับ Microsoft Graph ด้วยสิทธิ์ที่จำเป็น
Import-Module Microsoft.Graph.Users, Microsoft.Graph.Users.Actions
Connect-MgGraph -Scope User.ReadWrite.Allตอนนี้เราเชื่อมต่อกันแล้ว เราจำเป็นต้องมี ID ของ SKU ใบอนุญาตที่เราต้องการมอบหมาย เราสามารถแก้ไขได้ด้วยการเรียกใช้ Get-MgSubscribedSku cmdlet
Get-MgSubscribedSku | Select SkuPartNumber, SkuIdจากผลลัพธ์ คุณจะเห็นรายการใบอนุญาตที่มีอยู่ทั้งหมด รวมถึง SkuId ที่เราต้องการเมื่อเราใช้ Set-MgUserLicense cmdlet
จากที่นี่ เราสามารถจัดเก็บใบอนุญาตเป้าหมายของเราไว้ในตัวแปร ด้านล่างเราจะจัดเก็บข้อมูลใบอนุญาต E5 Developer ของเราไว้ในตัวแปร $license
$license = Get-MgSubscribedSku | `
Where-Object {$_.SkuPartNumber -eq "DEVELOPERPACK_E5"}อีกสิ่งหนึ่งที่เราต้องรู้ก็คือรหัสวัตถุของผู้ใช้เป้าหมายของเรา สำหรับสิ่งนี้ เราใช้กลยุทธ์ที่คล้ายกันในการจัดเก็บข้อมูลผู้ใช้ของเราไว้ในตัวแปร ด้านล่างนี้เรากำลังจัดเก็บข้อมูลผู้ใช้ของ 'Adele Vance' ไว้ในตัวแปร $user
$user = Get-MgUser | Where-Object {$_.DisplayName -eq "Adele Vance"}ตอนนี้เราสามารถใช้ตัวแปรของเรากับ Set-MgUserLicense cmdlet พร้อมด้วยพารามิเตอร์ -UserId และ -AddLicense
Set-MgUserLicense -UserId $user.Id `
-AddLicenses @{SkuId = ($license.SkuId)} -RemoveLicenses @()
คุณอาจสังเกตเห็นว่าฉันได้กำหนดพารามิเตอร์ -RemoveLicenses ด้วยค่าว่างด้วย หากไม่ได้กำหนดพารามิเตอร์ -RemoveLicenses คุณจะได้รับข้อผิดพลาดต่อไปนี้:
Set-MgUserLicense : พารามิเตอร์อย่างน้อยหนึ่งรายการของการดำเนินการ 'assignLicense' หายไปจากเพย์โหลดคำขอ พารามิเตอร์ที่ขาดหายไปคือ: RemoveLicenses
ด้านล่างนี้คือสคริปต์ฉบับเต็มเพื่อให้คุณสามารถคัดลอกและวางได้!
มอบหมายใบอนุญาตหลายใบพร้อมกัน
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 ยังช่วยให้คุณสามารถมอบหมายใบอนุญาตหลายใบในเวลาเดียวกัน โดยเพิ่มใบอนุญาตหลายใบลงในตารางแฮช มีสองวิธีที่เราสามารถบรรลุเป้าหมายนี้...
Fประการแรก เราสามารถนำใบอนุญาตทั้งหมดที่มอบหมายให้กับผู้ใช้รายเดียว (เป็นเทมเพลต) และมอบหมายใบอนุญาตเหล่านี้ให้กับผู้ใช้รายอื่น เริ่มต้นด้วยการใช้ Get-MgUserLicenseDetail cmdlet เพื่อจัดเก็บใบอนุญาตที่ได้รับมอบหมายให้กับตัวแปร
$lic = Get-MgUserLicenseDetail -UserId $IDจากนั้นเราจำเป็นต้องสร้างอาร์เรย์ของ hastables ซึ่งเราสามารถรวมไว้ในคำสั่ง Set-MgUserLicense ของเรา
$addlicense = @()
ForEach ($L in $Lic) {
$addlicense += @{SkuId = ($($L.SkuId))}
}มาดูกันว่าเราได้ทำอะไรไปบ้าง นี่คือก่อนและหลัง:
คุณสามารถดูได้จากด้านบนว่าก่อนที่เราจะมีรายการออบเจ็กต์สำหรับแต่ละใบอนุญาต แต่หลังจากที่เรามีอาร์เรย์ของ hastables ที่มีคู่ค่าคีย์สำหรับแต่ละใบอนุญาต นี่คือสิ่งที่เราจำเป็นต้องรวมไว้ในคำสั่งของเราเพื่อมอบหมายใบอนุญาตหลายใบให้กับผู้ใช้หรือผู้ใช้
Set-MgUserLicense -UserId $id -AddLicenses $addlicense -RemoveLicenses @()
คุณสามารถสร้างแฮชเทเบิลได้หลายวิธี ในบางกรณี การสร้างอาร์เรย์แฮชเทเบิลด้วยตนเองอาจง่ายกว่าในกรณีที่คุณวางแผนจะมอบหมายใบอนุญาตเฉพาะให้กับผู้ใช้หลายราย ตัวอย่างเช่น:
$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
หากต้องการมอบหมายใบอนุญาตให้กับผู้ใช้หลายราย ก่อนอื่นเราต้องจัดเก็บผู้ใช้ของเราและวนซ้ำผู้ใช้เหล่านั้นโดยใช้คำสั่ง ForEach
สามารถรับผู้ใช้ของคุณได้หลายวิธี คุณสามารถใช้ Get-MgUser cmdlet เพื่อกำหนดรายชื่อผู้ใช้ของคุณ ซึ่งคุณจะสามารถรับแอตทริบิวต์ผู้ใช้ที่จำเป็นสำหรับสคริปต์ได้อย่างง่ายดาย
หรือหากคุณมี CSV ที่มีรายชื่อผู้ใช้อยู่แล้ว คุณสามารถนำเข้า CSV แล้วรับ ID ผู้ใช้จากภายในลูปได้
นี่คือตัวอย่างที่ฉันจัดเก็บรายชื่อผู้ใช้โดยอิงจากผู้ใช้ที่มี ‘@ourcloudnetwork.com’ ในแอตทริบิวต์อีเมล จากนั้นฉันจะมอบหมายใบอนุญาต DEVELOPERPACK_E5 ให้กับผู้ใช้แต่ละราย
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 @()
}หรือหากคุณต้องการทำงานเดิม แต่คราวนี้ ใช้รายชื่อผู้ใช้ที่มีอยู่ที่คุณบันทึกไว้ในรูปแบบ CSV คุณสามารถใช้สคริปต์ด้านล่างได้
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 @()
}ลบใบอนุญาตผู้ใช้รายเดียว
เมื่อนำใบอนุญาตผู้ใช้รายเดียวออก พารามิเตอร์ -RemoveLicenses จะไม่คาดว่าจะมีแฮช แต่จะเป็นเพียงสตริง SkuId ของใบอนุญาตแทน ตัวอย่างเช่น หากต้องการลบใบอนุญาตเดียวออกจากผู้ใช้ เราสามารถใช้คำสั่งด้านล่าง:
$lic = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'INTUNE_A'
Set-MgUserLicense -UserId $ID -AddLicenses @() -RemoveLicenses $lic.SkuIdเราจะเห็นได้ว่าคำสั่งนี้ประสบความสำเร็จในขณะที่ระบุเฉพาะค่าสตริง SkuId ในพารามิเตอร์เท่านั้น
ลบใบอนุญาตหลายใบ
แนวคิดนี้คล้ายคลึงกับการลบใบอนุญาตหลายใบในคราวเดียว เมื่อเปรียบเทียบกับการเพิ่มใบอนุญาตหลายใบ เราสามารถกำหนดค่าอาร์เรย์ของค่า SkuId ลงในคำสั่งเพื่อลบใบอนุญาตหลายใบได้
เช่นเดียวกับก่อนหน้านี้ มีหลายวิธีในการสร้างอาร์เรย์ของคุณ คุณสามารถกำหนดด้วยตนเองภายในสคริปต์ของคุณ หรือสร้างตามค่าของผู้ใช้ที่มีอยู่หรือใบอนุญาตที่มีอยู่
ตัวอย่างเช่น หากต้องการสร้างรายการอาร์เรย์ของ SkuId's เฉพาะ คุณสามารถใช้สิ่งต่อไปนี้:
$AADSku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'AAD_PREMIUM'
$IntSku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'INTUNE_A'
$Lics = "$($AADSku.SkuID)", "$($IntSku.SkuId)"อาร์เรย์จะมีลักษณะดังนี้:
อาร์เรย์นี้สามารถรวมไว้ในคำสั่งของคุณดังต่อไปนี้เพื่อลบใบอนุญาตที่ระบุออกจากผู้ใช้รายเดียว
Set-MgUserLicense -UserId $ID -AddLicenses @() -RemoveLicenses $licsคุณสามารถใช้ตัวอย่างก่อนหน้านี้เพื่อรันคำสั่งนี้กับผู้ใช้หลายรายในองค์กรของคุณ





