Get-ADGroupMember: ค้นหาผู้ใช้ AD อย่างรวดเร็วด้วย PowerShell
การใช้ PowerShell ที่ได้รับความนิยมคือการทำงานร่วมกับ Active Directory Directory Services (AD) PowerShell สามารถช่วยประหยัดเวลาได้มากมายกับออบเจ็กต์ AD การใช้ PowerShell Get-ADGroupMember cmdlet และ cmdlet อื่นๆ สามารถช่วยประหยัดเวลาได้มาก
กลุ่ม Active Directory เป็นวิธีที่ดีในการแบ่งกลุ่มบัญชีผู้ใช้ กลุ่มอนุญาตให้ผู้ดูแลระบบกำหนดการเข้าถึงทรัพยากรในหลายระบบ
ในบทความนี้ ลองใช้ PowerShell เพื่อรับสมาชิกกลุ่ม AD และส่งออกสมาชิกกลุ่ม AD จากนั้นคุณสามารถใช้ข้อมูลนี้เพื่อสร้างรายงานที่น่าสนใจมากมาย
ข้อกำหนดเบื้องต้น
หากคุณต้องการปฏิบัติตามบทความนี้ โปรดแน่ใจว่าคุณมีคุณสมบัติตามข้อกำหนดต่อไปนี้:
- ทำงานบนคอมพิวเตอร์ Windows 10 ที่เข้าร่วมโดเมน
- เข้าสู่ระบบด้วยผู้ใช้ที่สามารถอ่านกลุ่มโฆษณาและบัญชีผู้ใช้ได้
- ติดตั้งโมดูล PowerShell Active Directory แล้ว
การเรียนรู้พื้นฐาน
หากต้องการสอบถามกลุ่ม AD และสมาชิกกลุ่ม คุณมี PowerShell cmdlets สองรายการให้เลือก ได้แก่ Get-AdGroup และ Get-AdGroupMember
Get-ADGroup สอบถามตัวควบคุมโดเมนและส่งกลับวัตถุกลุ่มโฆษณา Get-AdGroupMember ค้นหาภายในแต่ละกลุ่มและส่งคืนบัญชีผู้ใช้ กลุ่ม ผู้ติดต่อ และออบเจ็กต์อื่น ๆ ทั้งหมดที่มีอยู่ในกลุ่มนั้น
รับกลุ่มโฆษณา
หากต้องการค้นหากลุ่มโฆษณาด้วย PowerShell คุณสามารถใช้ Get-ADGroup cmdlet เมื่อไม่มีพารามิเตอร์ Get-ADGroup จะสอบถาม AD และส่งคืนกลุ่ม ทั้งหมด ในโดเมนโดยใช้พารามิเตอร์ Filter จำเป็นต้องมีพารามิเตอร์ Filter มีอยู่เพื่อจำกัดกลุ่มที่ส่งคืนตามเกณฑ์ต่างๆ
ตัวอย่างเช่น หากต้องการค้นหากลุ่มทั้งหมดโดยไม่คำนึงถึงเกณฑ์ใดๆ ให้ใช้ Get-ADGroup และระบุไวด์การ์ด (เครื่องหมายดอกจัน) สำหรับพารามิเตอร์ Filter คุณสามารถดูตัวอย่างด้านล่าง การเลื่อนดูกลุ่มเหล่านี้ทั้งหมดอาจใช้เวลาสักครู่ถ้าคุณมีโดเมนเป็นร้อยหรือเป็นพัน
Get-ADGroup -Filter *หากคุณต้องการค้นหากลุ่มเดียว คุณสามารถใช้พารามิเตอร์ Identity
พารามิเตอร์ Identity เป็นพารามิเตอร์ทั่วไประหว่าง Active Directory PowerShell cmdlets ทั้งหมด ช่วยให้คุณสามารถจำกัดการค้นหาของคุณให้เหลือเพียงออบเจ็กต์ AD เดียว ตัวอย่างเช่น หากคุณต้องการตรวจสอบว่ามีกลุ่มชื่อ HR อยู่หรือไม่ คุณสามารถค้นหาได้ด้วยการรันคำสั่งด้านล่าง
Get-ADGroup -Identity 'HR'การรับสมาชิกกลุ่ม AD ด้วย Get-AdGroupMember
การใช้ PowerShell เพื่อแสดงรายการสมาชิกของกลุ่ม AD ต้องใช้ cmdlet Get-ADGroupMember cmdlet นี้รับวัตถุผู้ใช้ กลุ่ม และคอมพิวเตอร์ในกลุ่มใดกลุ่มหนึ่ง บางทีคุณอาจต้องค้นหาสมาชิกทั้งหมดของกลุ่ม ผู้ดูแลระบบ ในรูปแบบที่ง่ายที่สุด คุณเพียงใช้พารามิเตอร์ Identity อีกครั้งโดยระบุชื่อของกลุ่มดังต่อไปนี้
Get-ADGroupMember -Identity 'Administrators'โปรดทราบว่า
Get-AdGroupMemberจะส่งคืนการเป็นสมาชิกกลุ่มสำหรับผู้ใช้ กลุ่ม และคอมพิวเตอร์เท่านั้น มันจะไม่ส่งคืนวัตถุ AD อื่น ๆ เช่นผู้ติดต่อ
การแจกแจงสมาชิกกลุ่มภายในสมาชิกกลุ่ม
ดังที่คุณอาจทราบแล้วว่ากลุ่มโฆษณาไม่เพียงแต่มีบัญชีผู้ใช้เท่านั้น แต่ยังมีกลุ่มอื่นๆ ที่เรียกว่าการซ้อนอีกด้วย เมื่อกลุ่มซ้อนอยู่ภายในกลุ่มอื่น สมาชิกของกลุ่ม นั้น จะได้รับสิทธิ์แบบเดียวกันที่มอบหมายให้กับกลุ่มหลัก
ตามค่าเริ่มต้น PowerShell Get-AdGroupMember cmdlet จะไม่ส่งคืนสมาชิกกลุ่มที่ซ้อนกัน หากต้องการแก้ไข คุณสามารถใช้พารามิเตอร์ Recursive ตัวอย่างเช่น คุณสามารถค้นหาสมาชิกของกลุ่มที่ซ้อนอยู่ภายในกลุ่ม HR โดยใช้พารามิเตอร์ Recursive ดังที่แสดงด้านล่าง
Get-ADGroupMember -Identity 'HR' -Recursiveรับหลายกลุ่ม/สมาชิกพร้อมกัน
หากคุณต้องการสืบค้น AD สำหรับกลุ่มหรือสมาชิกกลุ่มต่างๆ จำนวนมากในคราวเดียว คุณสามารถทำได้โดยใช้ PowerShell foreach loop foreach loop รันคำสั่งหรือโค้ด สำหรับแต่ละรายการ ในคอลเลกชัน ในกรณีนี้ คอลเลกชันนั้นจะเป็นรายการชื่อกลุ่ม
บางทีคุณอาจต้องค้นหาสมาชิกกลุ่มทั้งหมดในกลุ่ม HR, การบัญชี และ IT หากต้องการทำเช่นนั้น คุณต้องสร้างคอลเลกชันหรืออาร์เรย์ของชื่อกลุ่มเหล่านี้ก่อน ตัวอย่างด้านล่างกำหนดคอลเลกชันนี้เป็น $groupNames จากนั้น สำหรับแต่ละ ชื่อในคอลเลกชันนั้น ให้รัน Get-ADGroupMember โดยระบุชื่อของกลุ่ม each ให้กับ Identity พารามิเตอร์.
$groupNames = 'HR','Accounting','IT'
foreach ($group in $groupNames) {
Get-ADGroupMember -Identity $group
}คุณสามารถใช้
ForEach-Objectcmdlet เพื่อวนซ้ำกลุ่ม
การใช้ข้อมูลรับรองสำรอง
เช่นเดียวกับ PowerShell cmdlet อื่นๆ cmdlet ของกลุ่ม AD มีพารามิเตอร์ ข้อมูลรับรอง ตามค่าเริ่มต้น เมื่อใดก็ตามที่คุณเรียกใช้ cmdlet กลุ่มโฆษณา ระบบจะใช้ข้อมูลประจำตัวในการเข้าสู่ระบบของคุณเพื่อสอบถาม Active Directory ลักษณะการทำงานนี้กำหนดว่าคุณต้องอยู่ในคอมพิวเตอร์ที่เข้าร่วมโดเมนซึ่งเข้าสู่ระบบในฐานะผู้ใช้ Active Directory ที่มีสิทธิ์
แต่ถ้าคุณใช้คอมพิวเตอร์เวิร์กกรุ๊ปหรือจำเป็นต้องตรวจสอบสิทธิ์ AD ในฐานะผู้ใช้รายอื่นล่ะ ในกรณีนั้น คุณสามารถใช้พารามิเตอร์ ข้อมูลรับรอง ได้ พารามิเตอร์นี้อนุญาตให้คุณระบุชื่อผู้ใช้และรหัสผ่านเพื่อใช้สำหรับการตรวจสอบสิทธิ์
ตัวอย่างเช่น บัญชีผู้ใช้ของคุณอาจไม่มีสิทธิ์ทำงานโฆษณา คุณมีบัญชีบริการที่มีสิทธิ์เพิ่มเติม คุณสามารถเข้าสู่ระบบในฐานะผู้ใช้มาตรฐาน แต่ยังคงตรวจสอบสิทธิ์กับบัญชีบริการดังที่แสดงด้านล่าง
cmdlet Get-Credential จะแจ้งให้ระบุชื่อผู้ใช้/รหัสผ่านเพื่อสร้างข้อมูลรับรอง ข้อมูลประจำตัวนี้จะถูกส่งไปยัง Get-AdGroup cmdlet เพื่อตรวจสอบสิทธิ์
Get-ADGroup -Identity 'HR' -Credential (Get-Credential)พารามิเตอร์
Credentialแพร่หลายใน PowerShell สำหรับการให้ข้อมูลรับรองการตรวจสอบสิทธิ์ สำหรับข้อมูลเพิ่มเติม โปรดอ่านการใช้ PowerShell Get-Credential cmdlet และข้อมูลประจำตัวทั้งหมด
รับสมาชิกกลุ่มด้วย Get-ADGroup หรือไม่
อาจฟังดูขัดกับสัญชาตญาณ แต่คุณยังสามารถรับสมาชิกกลุ่มด้วย Get-ADGroup cmdlet ได้เช่นกัน
ปรากฎว่า Get-ADGroup ส่งคืนคุณสมบัติสำหรับแต่ละกลุ่มที่เรียกว่า members นี่คือคอลเลกชันของวัตถุ AD ที่เป็นสมาชิกของกลุ่ม
ตัวอย่างเช่น หากต้องการค้นหาสมาชิกกลุ่มในกลุ่ม HR นั้นอีกครั้งโดยไม่ต้องใช้ Get-ADGroupMember คุณสามารถดำเนินการดังนี้:
Get-ADGroup -Identity 'HR' -Properties membersเหตุใดจึงใช้วิธีนี้มากกว่าวิธีอื่น? ข้อแตกต่างที่สำคัญคือคุณสมบัติ สมาชิก มีออบเจ็กต์ AD ทั้งหมด ไม่ใช่แค่ผู้ใช้ คอมพิวเตอร์ และกลุ่มอื่นๆ
บางทีคุณอาจมีผู้ติดต่อภายในกลุ่มต่างๆ เมื่อคุณเรียกใช้ Get-ADGroupMember ผู้ติดต่อเหล่านั้นจะไม่แสดงขึ้นมา แต่ถ้าคุณบอก Get-ADGroup ให้ส่งคืนสมาชิกทั้งหมดในกลุ่มนั้นพร้อมกับขยายคอลเลกชันนั้นดังที่แสดงด้านล่าง คุณจะเห็นผู้ติดต่อ
Get-ADGroup -Identity 'HR' -Properties members | Select-Object -ExpandProperty membersค้นหาคุณลักษณะโฆษณาเฉพาะ
ในส่วนพื้นฐานข้างต้น คุณเพียงแค่ส่งคืนกลุ่มและสมาชิกกลุ่มทั้งหมด ข้อมูลที่ส่งคืนสำหรับแต่ละกลุ่มและสมาชิกกลุ่มเป็นเพียงส่วนย่อยของแอตทริบิวต์ AD ที่เกี่ยวข้องกับออบเจ็กต์แต่ละประเภท
บางทีคุณอาจต้องการดูที่อยู่อีเมลของบัญชีผู้ใช้ วันที่เข้าสู่ระบบครั้งล่าสุด หรือแอตทริบิวต์โฆษณาอื่นๆ ที่เกี่ยวข้อง หากต้องการทำเช่นนี้ คุณจะต้องใช้ความคิดสร้างสรรค์
บางทีคุณอาจพบสมาชิกกลุ่มทั้งหมดในกลุ่ม HR แต่จำเป็นต้องดูที่อยู่อีเมลของบัญชีผู้ใช้แต่ละบัญชีด้วย
$groupMembers = (Get-ADGroup -Identity 'HR' -Properties members).members
$groupMembers | Select-Object -Property Name, @{Name='Member';exp={Get-AdUser -Identity $_.Name -Properties emailAddress,lastlogonDate}}การกรองผลลัพธ์
ถึงจุดนี้ คุณพบกลุ่มและสมาชิกกลุ่ม ทั้งหมด แล้ว แต่ในสภาพแวดล้อมการทำงานในแต่ละวัน คุณแทบจะไม่จำเป็นต้องทำเช่นนี้เลย เป็นไปได้ว่าคุณจะต้องค้นหาสินค้าแต่ละรายการในจำนวนจำกัดเท่านั้น cmdlet ของกลุ่มโฆษณามีหลายวิธีที่คุณสามารถจัดการสิ่งนี้ได้
พารามิเตอร์ ตัวกรอง
ตามที่กล่าวไว้ก่อนหน้านี้ cmdlet ทั้งสองมีพารามิเตอร์ Filter พารามิเตอร์นี้ช่วยให้คุณสามารถจำกัดสิ่งที่ส่งคืนด้วยวิธีต่างๆ มากมายที่อยู่นอกขอบเขตของบทความนี้
การใช้พารามิเตอร์ ตัวกรอง คุณสามารถจำกัดผลลัพธ์ตามแอตทริบิวต์โฆษณาใดๆ เช่น ชื่อ ประเภทกลุ่ม ที่อยู่อีเมล การเข้าสู่ระบบครั้งล่าสุดสำหรับผู้ใช้ และอื่นๆ
ตัวอย่างเช่น บางทีคุณอาจต้องการค้นหาเฉพาะกลุ่มความปลอดภัย ในกรณีนั้น คุณจะต้องระบุแอตทริบิวต์ GroupCategory และตั้งเงื่อนไขเพื่อให้แน่ใจว่าจะแสดงเฉพาะกลุ่ม Security เท่านั้น
Get-ADGroup -Filter 'GroupCategory -eq "Security"'บางทีคุณอาจต้องการค้นหากลุ่มความปลอดภัยทั้งหมด แต่ต้อง ไม่ เป็นกลุ่มภายในโดเมน จากนั้น คุณจะต้องเพิ่มเงื่อนไขอื่น (คราวนี้ใช้ตัวดำเนินการ -ne) เพื่อป้องกันไม่ให้ส่งคืนกลุ่มท้องถิ่นของโดเมน
Get-ADGroup -Filter 'GroupCategory -eq "Security" -and GroupScope -ne "DomainLocal"'หากคุณต้องการเรียนรู้วิธีสร้างตัวกรองคำค้นหา อย่าลืมลองดูการเรียนรู้ Active Directory และตัวกรอง LDAP ใน PowerShell
การจำกัดผลลัพธ์ของกลุ่มตามหน่วยองค์กร (OU)
บางทีคุณอาจมีกลุ่มต่างๆ ซ้อนอยู่ใน OU คุณไม่จำเป็นต้องค้นหากลุ่ม ทั้งหมด แต่ต้องการเฉพาะกลุ่มใน OU ที่ระบุเท่านั้น ในกรณีนั้น คุณสามารถใช้พารามิเตอร์ SearchBase ได้
พารามิเตอร์ SearchBase ช่วยให้คุณสามารถระบุชื่อเฉพาะ (DN) ของ OU เพื่อเริ่มค้นหากลุ่ม ตัวอย่างเช่น บางทีคุณอาจมี OU ชื่อ ตำแหน่ง ที่รากของ โดเมน. ใน สถานที่ OU คุณได้สร้างสถานที่แต่ละแห่ง OU ที่สร้างขึ้น เช่น ออสติน, NYC, และ ลอสแอนเจลิส คุณกำลังมองหาเฉพาะกลุ่มใน NYC OU และจำเป็นต้องจำกัดการมองเห็นกลุ่มอื่นๆ
ตัวอย่างโครงสร้าง AD OU แสดงอยู่ด้านล่าง โปรดสังเกตว่ามีกลุ่มอื่นๆ อยู่นอกหน่วยขององค์กร ตำแหน่ง
company.local
- Locations
- Austin
- NYC
- Group 1
- Group 2
- Los Angeles
- Computers
- Group 3
- Group 4
- Service Accountsบางทีคุณอาจต้องค้นหากลุ่มโฆษณาทั้งหมดที่อยู่ใน NYC OU เท่านั้น หากต้องการจำกัดการค้นหา คุณจะต้องใช้พารามิเตอร์ SearchBase ที่ระบุ DN ดังที่แสดงด้านล่าง กลุ่มทั้งหมดภายใน ตำแหน่ง OU จะถูกส่งคืน
Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,OU=NYC,DC=company,DC=pri'แต่ตอนนี้ คุณต้องค้นหากลุ่ม ทั้งหมด ใน OU ทั้งหมด ภายใต้ ตำแหน่ง OU Get-ADGroup ส่งคืนเฉพาะกลุ่มใน ตำแหน่ง OU เท่านั้น - ไม่ใช่ใน OU ลูก
หากต้องการส่งคืนกลุ่มภายใน OU ย่อย คุณจะต้องใช้พารามิเตอร์ SearchScope พารามิเตอร์นี้คล้ายกับพารามิเตอร์ Recursive โดยจะตรวจสอบวัตถุลูกด้วย
ตัวอย่างเช่น หากต้องการค้นหากลุ่มทั้งหมดใน ใดๆ OU ภายใต้ Locations OU ให้ระบุ Subtree หรือ 2 ค่านี้สำหรับ SearchScope จะบอก Get-ADGroup ให้ค้นหารายการลูกๆ หลานๆ และ OU ทั้งหมดแบบวนซ้ำ
Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,DC=company,DC=pri' -SearchScope 2สำหรับรายละเอียดทั้งหมดของตัวเลือกพารามิเตอร์ SearchScope โปรดดูเอกสารประกอบ Get-ADGroup
การส่งออกกลุ่ม AD และสมาชิก
ในที่สุดคุณก็รู้วิธีค้นหาและส่งคืนกลุ่มและสมาชิกกลุ่มที่คุณต้องการ ข้อมูลทั้งหมดนี้ถูกส่งไปยังคอนโซล PowerShell แต่ตอนนี้คุณต้องรับข้อมูลนี้ในรูปแบบไฟล์ CSV หรือแผ่นงาน Excel
สิ่งเดียวที่คุณต้องทำตอนนี้คือส่งข้อมูลทั้งหมดนั้นไปยังไฟล์
ส่งออกเป็น CSV
รูปแบบหนึ่งที่ได้รับความนิยมในการส่งออกข้อมูล AD คือ CSV PowerShell มี cmdlet ที่มีประโยชน์ซึ่งช่วยให้คุณสามารถสร้างไฟล์ CSV จากเอาต์พุต PowerShell ที่เรียกว่า Export-Csv ได้อย่างง่ายดาย
คุณสามารถสร้างไฟล์ CSV จากคำสั่งใดๆ ที่ครอบคลุมในบทความนี้ได้โดยการไพพ์ไปที่ Export-Csv จากตัวอย่างด้านล่างนี้ จะเปลี่ยนเส้นทางเอาต์พุตทั้งหมดที่ Get-AdGroup จะต้องกลับไปยังคอนโซลเป็นไฟล์ CSV แทน
Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,DC=company,DC=pri' -SearchScope 2 | Export-Csv -Path 'departmental_groups.csv' -NoTypeInformationสำหรับข้อมูลเพิ่มเติมเกี่ยวกับ cmdlet ที่มีประโยชน์นี้ โปรดดูที่ Export-Csv: วิธี PowerShell ในการจัดการไฟล์ CSV ในฐานะพลเมืองชั้นหนึ่ง
คุณยังสามารถส่งออกผลลัพธ์เป็น CSV ได้อย่างง่ายดายผ่านทาง cmdlet Get-AdGroupMember
ส่งออกไปยัง Excel
PowerShell ไม่มีวิธีดั้งเดิมในการส่งออกข้อมูลไปยัง Excel แต่คุณสามารถดาวน์โหลดโมดูลชุมชนฟรีที่เรียกว่า ImportExcel ได้ตลอดเวลา โมดูลนี้นำความสามารถในการส่งออกแบบ CSV ไปยังแผ่นงาน Excel โดยตรง หากต้องการติดตั้งโมดูล PowerShell ให้รัน Install-Module ImportExcel -Scope CurrentUser
จากตัวอย่างด้านบน แทนที่จะใช้ไฟล์ CSV คุณต้องส่งออกกลุ่มไปยังแผ่นงาน Excel คุณจะต้องใช้ cmdlet Export-Excel ดังที่แสดงด้านล่าง
ค้นหารหัสผ่านที่รั่วไหลและไม่ปลอดภัยใน Active Directory ของคุณโดยตรวจสอบกับรายการรหัสผ่าน NCSC
Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,DC=company,DC=pri' -SearchScope 2 | Export-Excel -Path 'departmental_groups.csv'โมดูล ImportExcel มีฟังก์ชันมากมายที่จะทำงานร่วมกับ Excel หากคุณต้องการแผ่นงานที่หรูหรากว่านี้ ก็อาจมีฟังก์ชันที่เหมาะกับคุณ
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้โมดูล ImportExcel โปรดอ่านบทความนี้ โดยเป็นการแนะนำที่ดีเกี่ยวกับกรณีการใช้งานทั่วไปบางกรณีที่สามารถจัดการได้
บทสรุป
ด้วยการใช้ PowerShell cmdlets เพียง 2 cmdlets คุณสามารถทำอะไรก็ได้กับกลุ่ม AD บทความนี้เป็นเพียงการแนะนำฟังก์ชันการทำงานที่คุณสามารถใช้ได้ ใช้ความรู้ที่รวบรวมไว้ที่นี่ ตามลิงก์บางส่วนไปยังหัวข้อเจาะลึกในบทความ และดูว่าคุณสามารถสร้างอะไรได้บ้าง!
