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

Microsoft Forces ย้ายจาก Azure AD Cmdlets เพื่อการจัดการใบอนุญาต


Cmdlet บางตัวหยุดทำงานในปี 2022

บางครั้งความโชคดีก็ปะทุขึ้น แม้แต่ในโลกแห่งเทคโนโลยี เช่นนี้เป็นกรณีของเซสชัน TEC 2021 ของฉันเกี่ยวกับการใช้ Microsoft Graph เพื่อจัดการผู้เช่า Office 365 (พร้อมใช้งานออนไลน์) เมื่อฉันพูดคุยเกี่ยวกับ Microsoft Graph PowerShell SDK ทีมผู้จัดงานบันทึกเซสชัน TEC ไว้ล่วงหน้าเพื่อให้แน่ใจว่าการประชุมดำเนินไปอย่างราบรื่น ดังนั้นฉันจึงใช้ตัวอย่างที่ตกบนตักไม่ได้เมื่อ Microsoft ประกาศว่า Azure AD cmdlets สำหรับการจัดการใบอนุญาตจะหยุดทำงานในวันที่ 30 มิถุนายน 2022 ( อัปเดตวันที่ 15 มีนาคม 2022: Microsoft ได้เลื่อนวันยุติการให้บริการออกไปเป็นวันที่ 26 สิงหาคม 2022)

นี่เป็นการติดตามผลจาก Head-up ที่ Microsoft ให้ไว้เกี่ยวกับอนาคตของ Azure AD Graph ในเดือนมิถุนายน โดยสรุป Azure AD Graph เป็นองค์ประกอบเก่าที่แยกจาก Microsoft Graph และกำลังจะเลิกใช้งาน โมดูล Azure AD และ Microsoft Online Services ซึ่งขึ้นอยู่กับกราฟ Azure AD เข้าสู่สถานะที่ไม่รองรับในปี 2565 cmdlets ส่วนใหญ่ในโมดูลจะยังคงทำงานต่อไป แต่ cmdlets การจัดการสิทธิ์การใช้งานจะหยุดส่งคืนข้อมูลในวันที่ 30 มิถุนายน 2565 เนื่องจาก Microsoft ย้ายไปยังแพลตฟอร์มการจัดการใบอนุญาตใหม่

อัปเดต: Microsoft ได้เลื่อนวันที่เลิกใช้งานสำหรับโมดูล Azure AD และ MSOL ไปเป็นสิ้นปี 2022

แน่นอนว่าการเลิกใช้งานมีผลกระทบต่อสคริปต์จำนวนมากที่ผู้คนใช้เพื่อจัดการแง่มุมต่างๆ ของ Azure AD โดยจำเป็นต้องเปลี่ยน cmdlets การจัดการใบอนุญาตทันทีก่อนที่จะหยุดทำงาน คำแนะนำของ Microsoft คือการใช้ assignLicense Graph API หรือ Set-MgUserLicense cmdlet จาก Microsoft Graph PowerShell SDK

การอัปเกรดเป็น Microsoft Graph PowerShell SDK

การสลับ Azure AD cmdlet และแทนที่ด้วย SDK cmdlet นั้นยากเพียงใด เมื่อมองจากภายนอก การเปลี่ยนควรจะตรงไปตรงมา แต่ตามปกติแล้ว การรับรู้นั้นจะใช้เวลาประมาณห้านาที อย่างน้อยนั่นคือสิ่งที่ฉันค้นพบเมื่ออัปเกรดสคริปต์เพื่อลบแผนบริการเดียวออกจาก Office 365 SKU (ผลิตภัณฑ์) สำหรับหลายบัญชี สคริปต์นี้ใช้การเรียก Azure AD เพื่อประมวลผลข้อมูลสิทธิ์การใช้งาน ดังนั้นจึงเป็นตัวอย่างที่ดีของสคริปต์ประเภทที่ได้รับผลกระทบจากกำหนดเวลาที่กำลังจะมาถึงในเดือนมิถุนายนปีหน้า

ปัญหาแรกที่ฉันพบคือเอกสารสำหรับ SDK cmdlets ตามที่ฉันเข้าใจสถานการณ์นี้ Microsoft จะสร้างเอกสารประกอบส่วนใหญ่จากโค้ด ซึ่งอธิบายถึงการใช้ถ้อยคำแปลก ๆ และลักษณะของข้อความที่ไม่เข้าใจโดยรวม แน่นอนว่าฉันคร่ำครวญอย่างขมขื่น และหลังจากการซักถาม ฉันก็ค้นพบคำแนะนำที่เป็นประโยชน์เพื่อชี้ทิศทางที่ถูกต้องให้กับฉัน

ขั้นตอนในการอัพเกรด

Microsoft Graph PowerShell SDK รองรับการตรวจสอบสิทธิ์ที่ได้รับมอบหมายและเฉพาะแอปเท่านั้น ในตัวอย่างนี้ เราจะใช้การเข้าถึงที่ได้รับมอบหมายเพื่อดึงโทเค็นการเข้าถึงจาก Azure AD ส่วนใหญ่เป็นเพราะนี่คือสิ่งที่เกิดขึ้นในสคริปต์เวอร์ชันที่ใช้ Azure AD โดยสรุป ต่อไปนี้คือขั้นตอนที่ฉันดำเนินการเพื่ออัปเกรดโค้ด:

เชื่อมต่อกับกราฟ Connect-MgGraph cmdlet เชื่อมต่อกับกราฟ คำขอเชื่อมต่อสามารถระบุสิทธิ์ที่จำเป็นในการโต้ตอบกับข้อมูล ตัวอย่างเช่น การเชื่อมต่อนี้ร้องขอสิทธิ์ในการอ่านและเขียนข้อมูลไดเร็กทอรี

Connect-MgGraph -Scopes "User.ReadWrite.All","Directory.ReadWrite.All"

เลือกโปรไฟล์เบต้า Graph API มีเวอร์ชันที่แตกต่างกัน (โดยทั่วไปคือ V1.0 สำหรับการผลิตเต็มรูปแบบและเบต้าสำหรับการพัฒนา) ข้อมูลการจัดการใบอนุญาตสำหรับบัญชีผู้ใช้จะพร้อมใช้งานโดยใช้ Get-MgUser cmdlet หากคุณเลือกโปรไฟล์เบต้าเท่านั้น รหัสนี้จะตรวจสอบโปรไฟล์ที่โหลดและเลือกเบต้าหากไม่ได้ตั้งค่า

$Profile = (Get-MgProfile).Name
If ($Profile -ne "beta") { Select-MgProfile Beta }

ดึงข้อมูลใบอนุญาตผลิตภัณฑ์ (SKU) ในผู้เช่า สคริปต์ช่วยให้ผู้ดูแลระบบสามารถเลือกแผนบริการแต่ละรายการ (เช่น แบบฟอร์ม ไวท์บอร์ด หรือเครื่องมือวางแผน) ที่จะลบออกจาก SKU (เช่น Office 365 E3) เพื่อให้ผู้ดูแลระบบสามารถเลือก เราจะดึงรายการ SKU ที่มีอยู่ในผู้เช่าโดยใช้ Get-MgSubscribedSku cmdlet

[array]$Skus = (Get-MgSubscribedSku)

จากนั้นเราสามารถใช้ข้อมูล SKU เพื่อแสดงเมนูของ SKU และแผนบริการแก่ผู้ดูแลระบบเพื่อเลือกแผนบริการที่จะลบออก ผลลัพธ์คือ SKU ที่เลือกและแผนการบริการที่เลือก ซึ่งทั้งคู่ระบุเป็น GUID

เลือกบัญชีผู้ใช้ที่จะประมวลผล Get-MgUser cmdlet เป็นวิธีที่ดีในการเลือกชุดบัญชี Azure AD สำหรับการประมวลผล ตัวอย่างเช่น หากต้องการค้นหาบัญชีทั้งหมดที่กำหนด SKU เฉพาะ คุณสามารถใช้คำสั่งดังนี้:

[array]$Users = Get-MgUser -Filter "assignedLicenses/any(x:x/skuId eq $SelectedSkuId)" -all

อย่างไรก็ตาม สคริปต์นี้ใช้ Get-ExoMailbox เนื่องจากความสามารถในการกรองเหนือกว่า สิ่งสำคัญคือการมีชุดของบัญชี GUID หรือชื่อผู้ใช้หลักเพื่อใช้เป็นอินพุตเมื่อรหัสอัปเดตข้อมูลใบอนุญาต Get-ExoMailbox สามารถให้ข้อมูลนี้ได้ ดังนั้นฉันจึงไม่ได้อัปเกรดโค้ดส่วนนี้

ประมวลผลข้อมูลใบอนุญาตสำหรับบัญชี สคริปต์วนซ้ำชุดบัญชีที่เลือกเพื่อดึงข้อมูลใบอนุญาตปัจจุบัน (โดยใช้ Get-MgUser) จากนั้นสร้างวัตถุใบอนุญาต (MicrosoftGraphAssignedLicense) ที่มีข้อมูลเกี่ยวกับแผนบริการอยู่แล้ว ปิดการใช้งานสำหรับบัญชีบวกกับแผนบริการที่เราต้องการลบตอนนี้ หลังจากเติมออบเจ็กต์ใบอนุญาตแล้ว เราจะเรียก Set-MgUserLicense เพื่อใช้การอัปเดต

$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 นั้นค่อนข้างแปลก เนื่องจากไวยากรณ์ในการเพิ่ม SKU ใหม่ให้กับบัญชีคือ:

$User = Get-MgUser -UserId Imran.Khan@office365itpros.com
$NewSkuId ="8c4ce438-32a7-4ac5-91a6-e22ae08d9c8b"
Set-MgUserLicense -UserId $User.id -AddLicenses @{SkuId = $NewSkuId} -RemoveLicenses @()

ฉันคาดว่าจะใช้วัตถุใบอนุญาตที่มีพารามิเตอร์ RemoveLicenses แทน AddLicenses แต่นั่นไม่ใช่วิธีที่ฉันคาดว่าจะอัปเดตวัตถุใบอนุญาตโดยส่งข้อมูลใน RemoveLicenses แทน AddLicenses แต่นั่นไม่ใช่วิธีการทำงาน การเพิ่ม SKU ใหม่ลงในบัญชีจะเปิดใช้งานแผนบริการทั้งหมดที่มีอยู่ใน SKU ในกรณีนี้ เราจะส่งข้อมูลใบอนุญาตที่อัปเดตเพื่อแจ้งให้กราฟปิดการใช้งานแผนบริการที่ระบุจาก SKU ที่ระบุ คงจะดีไม่น้อยหากเอกสารมีความชัดเจนในเรื่องนี้

โปรดทราบว่าจำเป็นต้องส่งอาร์เรย์ว่างไปยัง RemoveLicenses เพื่อให้ cmdlet ทำงานได้อย่างถูกต้อง พารามิเตอร์ต้องการค่าแม้ว่าจะเว้นว่างไว้ก็ตาม และจะคัดค้านหากไม่พบสิ่งใดที่ส่งผ่าน

การลบใบอนุญาตออกจากบัญชี

หากต้องการลบใบอนุญาตผลิตภัณฑ์ (SKU) หนึ่งรายการขึ้นไปออกจากบัญชี กระบวนการคือ:

  • สร้างอาร์เรย์ของสิทธิ์การใช้งานผลิตภัณฑ์เพื่อลบออก คุณสามารถลบใบอนุญาตผลิตภัณฑ์หลายรายการได้ในคราวเดียว อาร์เรย์เก็บ GUID ที่ระบุ SKU ของผลิตภัณฑ์ที่จะลบ
  • เรียกใช้ Set-MgUserLicense และส่งอาร์เรย์เป็นพารามิเตอร์ RemoveLicenses คราวนี้เราจะส่งอาร์เรย์ว่างไปยังพารามิเตอร์ AddLicenses เพื่อสร้างเนื้อหา cmdlet ตัวอย่างนี้จะลบผลิตภัณฑ์สองรายการออกจากบัญชี:
[array]$SkuToRemove = "1f2f344a-700d-42c9-9427-5cea1d5d7ba6", "4016f256-b063-4864-816e-d818aad600c9"
Set-MgUserLicense -UserId $User.id -RemoveLicenses $SkuToRemove -AddLicenses @()

กำลังตรวจสอบการลบแผนบริการ

เพื่อทดสอบว่าทุกอย่างทำงานได้ ฉันใช้สคริปต์เพื่อลบแผนบริการ MyAnalytics (ซึ่ง Microsoft กำลังเปลี่ยนชื่อเป็น Viva Insights) ออกจากบัญชี Office 365 E3 จำนวนมาก ทุกอย่างเป็นไปอย่างราบรื่นในการอัปเดตการมอบหมายใบอนุญาตสำหรับบัญชี คุณสามารถตรวจสอบการมอบหมายด้วย PowerShell หรือโดยการดูข้อมูลผู้ใช้ผ่านทางศูนย์การจัดการ Microsoft 365 (รูปที่ 1)

นานแค่ไหนในการอัพเกรด

ฉันแน่ใจว่าผู้คนจะต้องกังวลเกี่ยวกับเวลาที่ต้องใช้ในการอัพเกรดสคริปต์ PowerShell ก่อนที่ค้อนจะหยุดทำงานในวันที่ 30 มิถุนายน มีตัวแปรหลายตัว รวมถึง:

  • ความคุ้นเคยของนักพัฒนากับ Microsoft Graph PowerShell SDK
  • Microsoft ปรับปรุง SDK และเอกสารประกอบได้เร็วแค่ไหน
  • ความซับซ้อนของสคริปต์ที่มีอยู่และจำนวน cmdlets การจัดการสิทธิ์การใช้งาน Azure AD หรือ Microsoft Online Services ที่จำเป็นต้องเปลี่ยน
  • สภาพแวดล้อมที่สคริปต์ทำงาน (เช่น วิธีการตรวจสอบสิทธิ์ที่ใช้)

เราเหลือเวลาอีกเพียงเก้าเดือนก่อนที่ cmdlet รุ่นเก่าจะหยุดทำงาน จำนวนสคริปต์ที่ได้รับผลกระทบในผู้เช่ามีแนวโน้มน้อย และคุณไม่จำเป็นต้องเขียนใหม่ทั้งหมดตั้งแต่ต้น นั่นคือ เว้นแต่คุณจะสร้างโซลูชันการจัดการใบอนุญาตของคุณเอง หากเป็นเช่นนั้น คุณมีงานที่ต้องทำ หากไม่เป็นเช่นนั้น การอัปเดตสคริปต์ส่วนใหญ่ควรใช้เวลาหลายวันแทนที่จะเป็นสัปดาห์

สำรวจและค้นพบก่อนการเลิกใช้งานโมดูล

คุณสามารถรับสำเนาสคริปต์ของฉันได้จาก GitHub โปรดทราบว่านี่คือโค้ดที่เขียนขึ้นเพื่อสำรวจและสาธิตหลักการ ไม่ใช่เพื่อเป็นโซลูชันด้านคุณภาพการผลิต ใช้โค้ดเพื่อเรียนรู้ สำรวจ และโต้ตอบกับการจัดการสิทธิ์การใช้งานผ่าน Microsoft Graph PowerShell SDK การทำงานกับ SDK จะง่ายขึ้นเมื่อเวลาผ่านไป อย่างน้อยที่สุด หากไม่เป็นเช่นนั้น Microsoft อาจมีลูกค้าที่ไม่พึงพอใจเมื่อการเลิกใช้งานเกิดขึ้น ถึงเวลารับการเข้ารหัสแล้ว

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