ค้นหาเว็บไซต์

วิธีกำหนดใบอนุญาตผู้ใช้ด้วย 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

คุณสามารถใช้ตัวอย่างก่อนหน้านี้เพื่อรันคำสั่งนี้กับผู้ใช้หลายรายในองค์กรของคุณ

บทความที่เกี่ยวข้อง