วิธีอัปเดตเจ้าของกลุ่ม Microsoft 365 จำนวนมากด้วย PowerShell
กลุ่ม Microsoft 365 ต้องมีเจ้าของที่ได้รับมอบหมาย ซึ่งหมายความว่าคุณไม่สามารถสร้างกลุ่มใหม่โดยไม่ต้องมอบหมายเจ้าของได้ ซึ่งจะเป็นเรื่องจริงไม่ว่าคุณจะสร้างกลุ่มผ่าน Microsoft Entra Admin Center หรือผ่าน Microsoft Graph PowerShell
ด้วยความท้าทายในแต่ละวันของการจัดการผู้ใช้ คุณอาจพบว่าตัวเองอยู่ในตำแหน่งที่คุณต้องเปลี่ยนเจ้าของกลุ่มที่มีอยู่หรือหลายกลุ่ม ในโพสต์นี้ ฉันสาธิตวิธีการเพิ่มและลบเจ้าของกลุ่มออกจากกลุ่มด้วย PowerShell รวมถึงสคริปต์ที่จำเป็นในการอัปเดตเจ้าของกลุ่มหลายรายสำหรับทุกกลุ่มในองค์กรของคุณ
หากคุณยังไม่เคยใช้ Microsoft Graph PowerShell โปรดดูแหล่งข้อมูลต่อไปนี้:
- วิธีการติดตั้งโมดูล Microsoft Graph PowerShell
- วิธีค้นหาสิทธิ์สำหรับ Microsoft Graph PowerShell
ดูเจ้าของกลุ่มปัจจุบันด้วย Get-MgGroupOwner
หากต้องการดูเจ้าของปัจจุบันของกลุ่มเป้าหมายของคุณ ขั้นแรก ให้รับและจัดเก็บรายละเอียดของกลุ่มเป้าหมายของคุณ ใช้ Get-MgGroupOwner เพื่อแยก ID ของเจ้าของกลุ่มแต่ละกลุ่ม จากนั้นวนซ้ำผ่านเจ้าของแต่ละราย และใช้ Get-MgUser cmdlet เพื่อส่งออก ข้อมูลผู้ใช้ไปยังเซสชัน PowerShell ของคุณ
group = Get-MgGroup -Filter "DisplayName eq 'GROUP_NAME'"
$owners = Get-MgGroupOwner -GroupId $group.Id
Foreach ($owner in $owners){
Get-MgUser -userid $owner.id | Select DisplayName, ID
}อีกวิธีหนึ่งในการแสดงเจ้าของแต่ละคนอย่างมีความหมาย โดยหลีกเลี่ยงความจำเป็นในการเรียก Microsoft Graph อีกครั้ง คือการสร้างรายงานที่มีข้อมูลที่จัดเก็บไว้ในตัวแปร $owners ซึ่งเพิ่งถูกซ่อนไว้ ดังตัวอย่างด้านล่าง:
$OwnersList = [System.Collections.Generic.List[Object]]::new()
Foreach ($owner in $owners){
$obj = [PSCustomObject][Ordered]@{
"DisplayName" = $owner.AdditionalProperties.displayName
"ID" = $owner.Id
}
$OwnersList.Add($obj)
}
$OwnersListการเพิ่มเจ้าของกลุ่มใหม่
หากต้องการเพิ่มเจ้าของกลุ่มใหม่ในกลุ่มที่มีอยู่ เราสามารถใช้ cmdlet New-MgGroupOwner ต้องกำหนดเจ้าของใหม่ภายในแฮชเทเบิลด้วยลิงก์ OData ด้านล่างนี้ฉันได้กำหนดเจ้าของใหม่ให้กับตัวแปร $owner ตรวจสอบให้แน่ใจว่าคุณแก้ไข OWNER_UPN เป็นชื่อผู้ใช้ของผู้ใช้เป้าหมายของคุณ
$owner = @{
"@odata.id" = "https://graph.microsoft.com/v1.0/users/OWNER_UPN"
}คุณจะต้องทราบ ID ของกลุ่มที่คุณพยายามแก้ไขด้วย วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการใช้ Get-MgGroup cmdlet พร้อมตัวกรองใน DisplayName ดังตัวอย่างด้านล่าง ตรวจสอบให้แน่ใจว่าคุณแก้ไข GROUP_NAME เป็นชื่อกลุ่มเป้าหมายของคุณ
$group = Get-MgGroup -Filter "DisplayName eq 'GROUP_NAME'"เมื่อคุณมีข้อมูลสองส่วนนี้ คุณก็พร้อมที่จะเพิ่มเจ้าของกลุ่มใหม่ในกลุ่มของคุณ
New-MgGroupOwner -GroupId $group.Id -BodyParameter $ownerการลบเจ้าของกลุ่มที่มีอยู่
หากต้องการลบเจ้าของออกจากกลุ่มที่มีอยู่ คุณต้องใช้ cmdlet Remove-MgGroupOwnerByRef สิ่งนี้ช่วยให้เราสามารถลบเจ้าของเฉพาะหรือทั้งหมดออกจากกลุ่มเป้าหมายได้
เช่นเดียวกับเมื่อก่อนเริ่มต้นด้วยการเก็บข้อมูลกลุ่มเป้าหมายของคุณเพื่อให้เรานำไปใช้ในขั้นตอนต่อไป
$group = Get-MgGroup -Filter "DisplayName eq 'GROUP_NAME'"จากนั้นใช้ตัวอย่างใดตัวอย่างหนึ่งข้างต้นเพื่อดูและจัดเก็บเจ้าของกลุ่มปัจจุบัน สำหรับตัวอย่างนี้ เราได้บันทึกเจ้าของกลุ่มเป้าหมายของเราไว้ในตัวแปร $OwnersList เนื่องจากตัวแปรนี้เป็นอาร์เรย์ที่มีเจ้าของกลุ่มปัจจุบันทั้งหมด เราจึงสามารถใช้ 'array slicing' หรือวงเล็บเหลี่ยมเพื่อเลือกผู้ใช้เฉพาะจากอาร์เรย์ได้ ดังตัวอย่างด้านล่าง:
$OwnersList[0]
or
$OwnersList[1]ประเมินกับเจ้าของข้างต้นว่าคุณต้องการลบใคร จากนั้นใช้คำสั่งด้านล่างเพื่อลบเจ้าของนั้นออกจากกลุ่ม
Remove-MgGroupOwnerByRef -GroupId $group.Id -DirectoryObjectID $OwnersList[1].Id การเพิ่มและการแทนที่เจ้าของกลุ่มหลายราย
หนึ่งในข้อจำกัดของ New-MgGroupOwner cmdlet คือคาดว่าเนื้อความของคำขอจะอยู่ในรูปแบบของ hashtable ซึ่งมีคู่คีย์-ค่า ด้วย hashtable แต่ละคีย์จะต้องไม่ซ้ำกัน ดังนั้น hashtable สามารถมีได้เพียงรายการเดียวของคีย์เฉพาะ ซึ่งในกรณีนี้คือตัวระบุ OData ของอ็อบเจ็กต์ผู้ใช้ที่เป็นเจ้าของ
ตัวอย่างเช่น ในกรณีที่คุณต้องการแทนที่เจ้าของกลุ่มที่มีอยู่สองคนด้วยเจ้าของกลุ่มใหม่สองคนสำหรับทุกกลุ่มในผู้เช่าของคุณ คุณจะต้องระบุเจ้าของกลุ่มใหม่แต่ละรายใน แฮชเทเบิลของตัวเองและวนซ้ำผ่านการเพิ่ม เมื่อเพิ่มแล้ว คุณจะสามารถวนซ้ำเจ้าของที่มีอยู่เพื่อลบออกได้ ดังนั้นจึงเป็นการแทนที่เจ้าของ
สคริปต์ด้านล่างมีตรรกะบางอย่างในการแทนที่เจ้าของตามที่อธิบายไว้ข้างต้น โปรดสังเกตว่าฉันใช้ Get-MgGroupOwner เพื่อจัดเก็บเจ้าของกลุ่มเป็นขั้นตอนแรก เนื่องจากกลุ่มต้องการเจ้าของและไม่สามารถปล่อยไว้โดยไม่ได้รับมอบหมาย นี่คือเหตุผลที่เราต้องเพิ่มเจ้าของแล้วลบเจ้าของตามลำดับนั้น
Connect-MgGraph -scope group.readwrite.all
$owner1 = @{
"@odata.id" = "https://graph.microsoft.com/v1.0/users/OWNER1ID"
}
$owner2 = @{
"@odata.id" = "https://graph.microsoft.com/v1.0/users/OWNER2ID"
}
$groups = Get-MgGroup -All
Foreach ($group in $groups){
$owners = $null
$owners = Get-MgGroupOwner -GroupId $group.Id
New-MgGroupOwner -GroupId $group.Id -BodyParameter $owner1
New-MgGroupOwner -GroupId $group.Id -BodyParameter $owner2
Foreach ($owner in $owners) {
Remove-MgGroupOwnerByRef -GroupId $group.Id -DirectoryObjectID $owner.Id
}
}ห่อ
มีความซับซ้อนที่แตกต่างกันมากมายที่เกี่ยวข้องเมื่อเพิ่ม ลบ และแทนที่เจ้าของกลุ่มในกลุ่ม Microsoft 365 ที่มีอยู่และใช้งานอยู่ ตัวอย่างข้างต้นแสดงให้เห็นถึงฟังก์ชันการทำงานหลักในการดำเนินงานเหล่านี้ แต่ไม่ได้แสดงถึงสคริปต์ที่พร้อมสำหรับการผลิต ตรวจสอบโค้ดของผู้อื่นเสมอและแก้ไขให้ตรงตามความต้องการของคุณเอง