วิธีใช้ Get-ADGroup ใน PowerShell
คุณจำเป็นต้องรับกลุ่มทั้งหมดใน Active Directory ของคุณหรือเพียงแค่ต้องการค้นหาตำแหน่งของกลุ่มเดียวที่ซ่อนอยู่ที่ไหนสักแห่งใน OU หรือไม่ ใน PowerShell เราสามารถใช้ Get-ADGroup cmdlet เพื่อดึงข้อมูลทั้งหมดเกี่ยวกับกลุ่มของเราจาก AD ได้อย่างรวดเร็ว
กลุ่มใน Active Directory ของคุณสามารถช่วยให้คุณจัดระเบียบโฆษณาได้อย่างแท้จริง ช่วยให้คุณสามารถกำหนดสิทธิ์หรือใบอนุญาตให้กับผู้ใช้หลายรายที่เป็นสมาชิกของกลุ่มเดียว ตัวอย่างเช่น เมื่อฝ่ายบริหารจำเป็นต้องเข้าถึง PowerBi คุณจะต้องมอบหมายใบอนุญาตให้กับ PowerBi Group เท่านั้น
ในบทความนี้ เราจะดูวิธีใช้ Get-ADGroup cmdlet ใน PowerShell ในตอนท้ายของบทความ คุณจะพบสคริปต์ฉบับสมบูรณ์ที่จะส่งออกกลุ่มทั้งหมดใน Active Directory ของคุณเป็น CSV
ความต้องการ
ก่อนที่เราจะใช้ Get-ADGroup cmdlet คุณจะต้องติดตั้งโมดูล Active Directory ใน PowerShell มีการติดตั้งตามค่าเริ่มต้นบนตัวควบคุมโดเมน แต่ใน Windows 10 หรือ 11 คุณจะต้องติดตั้ง
เรียกใช้คำสั่งต่อไปนี้ใน PowerShell เพื่อติดตั้งโมดูล:
Add-WindowsCapability -online -Name “Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0”การค้นหากลุ่มด้วย Get ADGroup ใน PowerShell
Get-ADGroup cmdlet ช่วยให้เราสามารถค้นหาวัตถุกลุ่มทั้งหมดใน Active Directory และดึงข้อมูลจากวัตถุเหล่านั้น ข้อดีของ cmdlet นี้คือเราสามารถใช้พารามิเตอร์ที่แตกต่างกันเพื่อค้นหากลุ่มในโฆษณาของเรา
เราสามารถใช้พารามิเตอร์ต่อไปนี้เมื่อต้องการค้นหากลุ่ม:
- ตัวตน - ค้นหากลุ่มตามชื่อกลุ่ม สิ่งนี้จะส่งคืนเพียงกลุ่มเดียว
- ตัวกรอง - ดึงข้อมูลหลายกลุ่มตามการค้นหาตัวกรอง
- LDAPFilter - ใช้สตริงการสืบค้น LDAP เพื่อกรองออบเจ็กต์กลุ่ม
- SearchBase - ระบุเส้นทาง Active Directory (OU) เพื่อค้นหา
- SearchScope - ระบุความลึกที่คุณต้องการค้นหา (ระดับฐาน หนึ่งระดับ หรือแผนผังย่อยทั้งหมด)
วิธีทั่วไปในการรับกลุ่มคือการใช้พารามิเตอร์เอกลักษณ์ แต่สำหรับสิ่งนี้คุณจะต้องรู้ชื่อกลุ่มก่อน มันจะส่งคืนกลุ่มเดียวที่มีคุณสมบัติที่สำคัญที่สุด:
Get-ADGroup -identity SG_M365_E5อย่างที่คุณเห็น เฉพาะคุณสมบัติพื้นฐานเท่านั้นที่ส่งคืนจากกลุ่ม เราสามารถใช้พารามิเตอร์ -properties เพื่อดึงคุณสมบัติทั้งหมดของกลุ่ม ฉันจะอธิบายเพิ่มเติมเกี่ยวกับการเรียกคุณสมบัติต่างๆ ในภายหลัง แต่ถ้าคุณต้องการดูข้อมูลทั้งหมดจากกลุ่ม ให้ใช้คำสั่งต่อไปนี้:
Get-ADGroup -identity SG_M365_E5 -properties *การใช้พารามิเตอร์ตัวกรอง
เมื่อคุณค้นหากลุ่มใดกลุ่มหนึ่งและไม่ทราบชื่อที่แน่นอน คุณสามารถใช้พารามิเตอร์ตัวกรองได้ ซึ่งช่วยให้เราสามารถค้นหากลุ่มทั้งหมดตามส่วนหนึ่งของชื่อหรือคุณสมบัติอื่น ๆ
พารามิเตอร์ตัวกรองยังสามารถใช้เพื่อดึงข้อมูลหลายกลุ่มหรือทุกกลุ่มจาก Active Directory
มาดูตัวอย่างที่ใช้กันทั่วไปสองสามตัวอย่างเพื่อค้นหากลุ่ม:
หากต้องการค้นหากลุ่มตามส่วนหนึ่งของชื่อ คุณสามารถใช้ตัวกรอง -like:
Get-ADGroup -Filter "Name -like 'SG_*'" | ftนี่จะส่งคืนกลุ่มทั้งหมดที่ชื่อขึ้นต้นด้วย SG_
หากต้องการรับกลุ่มความปลอดภัยทั้งหมด เราสามารถกรองกลุ่มตามค่า Group Category:
Get-ADGroup -Filter "GroupCategory -eq 'Security'" | ftหากคุณรันคำสั่งด้านบน คุณจะสังเกตเห็นว่ามันส่งคืนกลุ่มบิวท์อินทั้งหมดด้วย โดยส่วนใหญ่แล้วคุณไม่จำเป็นต้องใช้สิ่งเหล่านี้ในการส่งออก ดังนั้นเรามากรองสิ่งเหล่านั้นออก:
Get-ADGroup -Filter "GroupCategory -eq 'Security' -and GroupScope -ne 'Domainlocal'" | ftตอนนี้คุณยังคงเหลือกลุ่มที่มีอยู่แล้วภายในบางกลุ่ม กลุ่มเหล่านี้จะอยู่ในคอนเทนเนอร์ OU ผู้ใช้เริ่มต้นใน Active Directory ของคุณ มีสองตัวเลือกในการกรองออกเช่นกัน คุณสามารถระบุฐานการค้นหา ดูบทถัดไป หรือกรองผลลัพธ์ทั้งหมดที่ DistinguishedName ลงท้ายด้วย OU=Users,DC= โดเมน DC=ท้องถิ่น
# Replace DC=Domain,DC=Local with your AD domain name
Get-ADGroup -Filter "GroupCategory -eq 'Security' -and GroupScope -ne 'Domainlocal'" | Where-Object { $_.DistinguishedName -notlike "*,CN=user,DC=Domain,DC=local" } | ftคุณยังสามารถใช้ cmdlet ต่อไปนี้เพื่อรับเส้นทาง DN ของโดเมนของคุณ:
Get-ADDomain | Select -ExpandProperty DistinguishedNameรับ ADGroup SearchBase
เมื่อคุณต้องการเรียกข้อมูลหลายกลุ่มจาก Active Directory ของคุณ คุณอาจต้องการจำกัดการค้นหาให้แคบลง ดังที่กล่าวไว้ในบทที่แล้ว เมื่อคุณแสดงรายการกลุ่มทั้งหมด กลุ่มที่มีอยู่แล้วภายในทั้งหมดก็จะแสดงรายการเช่นกัน โดยส่วนใหญ่ คุณจะจัดระเบียบกลุ่มใน OU แยกต่างหาก เพื่อให้เราสามารถใช้พารามิเตอร์ SearchBase (distinguishedName) เพื่อระบุ OU ในตำแหน่งที่เราต้องการค้นหา
DistinguishedName คือเส้นทางแบบเต็มของ OU ซึ่งเราเขียนจาก OU ขึ้นไปบนแผนผังไปยังชื่อโดเมน AD
ใช้โครงสร้าง AD ต่อไปนี้ เราต้องการรับคอมพิวเตอร์ทั้งหมดจากไซต์ Amsterdam:
สตริงฐานการค้นหาในกรณีนี้คือ:
1 2 3 4 5
"OU=Computers,OU=Amsterdam,OU=Sites,DC=Lazyadmin,DC=NL"
หากต้องการตัวอย่างกลุ่มทั้งหมดจาก OU Amsterdam เราสามารถใช้เส้นทาง SearchBase ต่อไปนี้:
Get-ADGroup -Filter * -SearchBase "OU=Amsterdam,OU=Sites,DC=Lazyadmin,DC=NL" | ftการใช้ SearchScope
พารามิเตอร์ -SearchBase จะส่งคืนคอมพิวเตอร์ทั้งหมดจาก OU ที่ระบุและซ้อนกัน โดยใช้พารามิเตอร์ -SearchScope เราสามารถระบุความลึกหรือไม่ที่เราต้องการค้นหาผ่านแผนผัง Active Directory
ตัวอย่างเช่น เราต้องการดึงกลุ่มทั้งหมดจากไซต์ Amsterdam ยกเว้นกลุ่มทดสอบ:
หากต้องการรับกลุ่มทั้งหมดจากอัมสเตอร์ดัม ยกเว้นกลุ่มใน OU ย่อย "ทดสอบ" เราสามารถจำกัด searchBase ไว้เฉพาะระดับปัจจุบันได้ โดยใช้พารามิเตอร์ searchScope:
$searchBase = "OU=Groups,OU=Amsterdam,OU=Sites,DC=Lazyadmin,DC=NL"
Get-ADGroup -Filter * -SearchBase $searchBase -SearchScope OneLevelรับผู้จัดการกลุ่ม
กลุ่ม Active Directory สามารถจัดการได้โดยผู้ใช้ วิธีนี้ทำให้ผู้ใช้สามารถเพิ่มหรือลบสมาชิกของกลุ่มได้ ซึ่งมีประโยชน์มากสำหรับกลุ่มการแจกจ่ายหรือเมื่อคุณมีการกลายพันธุ์จำนวนมากในกลุ่ม
ในการรับผู้จัดการของกลุ่มเราสามารถใช้ Get-ADGroup cmdlet และคุณสมบัติ managedBy:
# You can also use a filter or searchbase to get the manager of multiple groups
Get-ADGroup -Identity management -Properties managedby | select name, managedBy | ftดังที่คุณเห็นในภาพหน้าจอด้านบน คุณสมบัติ ManagedBy จะส่งคืนชื่อที่แตกต่างของผู้ใช้ หากคุณต้องการเพียงชื่อ คุณสามารถไพพ์ Get-ADUser cmdlet ด้านหลังได้:
Get-ADGroup -Identity management -Properties ManagedBy | % {Get-ADUser -Identity $_.managedBy} | select nameรับการเป็นสมาชิกกลุ่มของกลุ่ม
กลุ่มยังสามารถเป็นสมาชิกของกลุ่มอื่นๆ ได้ ซึ่งจะมีประโยชน์อย่างยิ่งเมื่อคุณต้องการมอบหมายใบอนุญาตหรือการอนุญาตอื่นๆ ตามการเป็นสมาชิกกลุ่ม ตัวอย่างเช่น ผู้จัดการทุกคนควรมีสิทธิ์เข้าถึง PowerBi ตอนนี้คุณสามารถเพิ่มผู้จัดการแต่ละรายลงในกลุ่ม SG_M365_PowerBi ทีละรายได้ แต่คุณยังสามารถกำหนดให้เป็นสมาชิกการจัดการกลุ่มของ SG_M365_PowerBi ได้อีกด้วย
หากต้องการแสดงรายการกลุ่มทั้งหมดที่กลุ่มเป็นสมาชิกคุณสามารถใช้คุณสมบัติ memberOf:
Get-ADGroup -Identity management -Properties memberOf | select name,memberOfแต่อย่างที่คุณเห็นในภาพหน้าจอด้านบน นี่ไม่ใช่ชื่อที่สามารถอ่านได้จริงๆ เช่นเดียวกับผู้จัดการกลุ่ม เราจะต้องค้นหาแต่ละกลุ่มเพื่อให้ได้ชื่อ
โชคดีที่ยังมีอีกทางเลือกหนึ่ง เราสามารถใช้ cmdlet Get-ADPrincipalGroupMembership เพื่อรับเฉพาะชื่อของกลุ่มที่กลุ่มเป็นสมาชิกของ:
Get-ADPrincipalGroupMembership -identity management | ftส่งออกกลุ่มโฆษณาทั้งหมดเป็น CSV ด้วย PowerShell
หากคุณต้องการดูภาพรวมของกลุ่มทั้งหมดใน Active Directory ของคุณ ให้ส่งออกเป็น CSV หากเป็นวิธีที่ดี ซึ่งช่วยให้คุณสามารถดูกลุ่มทั้งหมดใน Excel และแสดงรายการผู้จัดการกลุ่มหรือการเป็นสมาชิกทั้งหมดได้
ฉันได้เขียนคำแนะนำฉบับสมบูรณ์เกี่ยวกับ Export-CSV cmdlet แล้ว แต่ฉันยังต้องการให้ตัวอย่างที่เป็นประโยชน์สองสามตัวอย่างเมื่อทำงานกับ Get-ADGroup cmdlet
หากต้องการส่งออกออบเจ็กต์ AD Group ทั้งหมด เราสามารถใช้คำสั่งต่อไปนี้:
Get-ADGroup -filter * | Export-csv c:\temp\adgroups.csv -NoTypeInformationซึ่งจะแสดงรายการกลุ่มทั้งหมด รวมถึงกลุ่มที่มีอยู่แล้วภายในที่มีคุณสมบัติเริ่มต้นเท่านั้น โดยส่วนใหญ่แล้วไม่ใช่ข้อมูลที่คุณต้องการจริงๆ
ส่งออกกลุ่มโฆษณาเป็นสคริปต์ CSV ให้สมบูรณ์
ฉันได้สร้างสคริปต์ PowerShell ที่จะส่งออกกลุ่มโฆษณาทั้งหมดเป็น CSV ให้กับคุณด้วยคุณสมบัติที่จำเป็นที่สุด
เมื่อคุณรันสคริปต์ คุณจะระบุตัวเลือกสองสามตัวเลือก:
- ระบุ searchBase (OU) ซึ่งเป็นค่าเริ่มต้นของ Active Directory ทั้งหมด
- รวมหรือยกเว้นกลุ่มที่มีอยู่แล้วภายใน (ไม่รวมค่าเริ่มต้น)
- ส่งออกไฟล์ CSV เส้นทาง (ค่าเริ่มต้นไม่มี เอาต์พุตคอนโซล)
สคริปต์จะรับกลุ่มทั้งหมดจาก Active Directory หากคุณไม่ได้ระบุ searchBase (OU) นอกจากนี้ยังสามารถระบุ OU ได้หลายรายการ:
.\Get-ADGroups.ps1 -searchBase "OU=groups,OU=Amsterdam,DC=LazyAdmin,DC=Local","OU=groups,OU=Oslo,DC=LazyAdmin,DC=Local" -csvpath c:\temp\computers.csvทำตามขั้นตอนเหล่านี้เพื่อส่งออกกลุ่มโฆษณาด้วยสคริปต์ PowerShell:
- ดาวน์โหลด สคริปต์ส่งออกกลุ่มโฆษณาที่สมบูรณ์จาก Github ของฉัน
- เปิด PowerShell และนำทางไปยังสคริปต์
- เรียกใช้สคริปต์ส่งออก: Get-ADGroups.ps1
เมื่อเสร็จแล้ว สคริปต์จะเปิด Excel ให้คุณโดยอัตโนมัติ
param(
[Parameter(
Mandatory = $false,
HelpMessage = "Enter the searchbase between quotes or multiple separated with a comma"
)]
[string[]]$searchBase,
[Parameter(
Mandatory = $false,
HelpMessage = "Include built-in groups or exclude"
)]
[ValidateSet("include", "exclude")]
[string]$builtin = "exclude",
[Parameter(
Mandatory = $false,
HelpMessage = "Enter path to save the CSV file"
)]
[string]$CSVpath
)
Function Get-Groups{
<#
.SYNOPSIS
Get groups from the requested DN
#>
param(
[Parameter(
Mandatory = $true
)]
$dn
)
process{
# Set the properties to retrieve
$properties = @(
'Name',
'CanonicalName',
'GroupCategory',
'GroupScope',
'ManagedBy',
'MemberOf',
'created',
'whenChanged',
'mail',
'info',
'description'
)
# Get all groups, or exclude the builtin groups
# Get the computers
switch ($builtin)
{
"include" {
Get-ADGroup -filter * -searchBase $dn -Properties $properties | select $properties
}
"exclude" {
$builtinUsers = "CN=users,$dn"
$filter = "GroupScope -ne 'Domainlocal'"
Get-ADGroup -filter $filter -searchBase $dn -Properties $properties | Where-Object { $_.DistinguishedName -notlike "*,$builtinUsers" } | select $properties
}
}
}
}
Function Get-ADGroups {
<#
.SYNOPSIS
Get all AD Groups
#>
process {
Write-Host "Collecting groups" -ForegroundColor Cyan
$groups = @()
# Collect groups
if ($searchBase) {
# Get the requested groups
foreach ($dn in $searchBase) {
Write-Host "- Get groups in $dn" -ForegroundColor Cyan
$groups += Get-Groups -dn $dn
}
}else{
# Get distinguishedName of the domain
$dn = Get-ADDomain | Select -ExpandProperty DistinguishedName
Write-Host "- Get groups in $dn" -ForegroundColor Cyan
$groups += Get-Groups -dn $dn
}
# Loop through all computers
$groups | ForEach {
$managedBy = ''
$memberOf = ''
# If the group is managed, get the users name
if ($null -ne $_.ManagedBy) {
$managedBy = Get-ADUser -Identity $_.ManagedBy | select -ExpandProperty name
}
# If the group is member of other groups, get the group names
if ($_.MemberOf.count -gt 0) {
$memberOf = Get-ADPrincipalGroupMembership $_.name | select -ExpandProperty name
}
[pscustomobject]@{
"Name" = $_.Name
"CanonicalName" = $_.CanonicalName
"GroupCategory" = $_.GroupCategory
"GroupScope" = $_.GroupScope
"Mail" = $_.Mail
"Description" = $_.Description
"Info" = $_.info
"ManagedBy" = $managedBy
"MemberOf" = ($memberOf | out-string).Trim()
"Date created" = $_.created
"Date changed" = $_.whenChanged
}
}
}
}
If ($CSVpath) {
# Get mailbox status
Get-ADGroups | Export-CSV -Path $CSVpath -NoTypeInformation -Encoding UTF8
if ((Get-Item $CSVpath).Length -gt 0) {
Write-Host "Report finished and saved in $CSVpath" -ForegroundColor Green
Invoke-Item $CSVpath
}
else {
Write-Host "Failed to create report" -ForegroundColor Red
}
}
Else {
Get-ADGroups
}ห่อขึ้น
Get-ADGroup cmdlet นั้นยอดเยี่ยมเมื่อคุณต้องการรับกลุ่มทั้งหมดจาก Active Directory ของคุณ ด้วยความช่วยเหลือของตัวกรองและ/หรือพารามิเตอร์ฐานการค้นหา คุณสามารถเลือกเฉพาะกลุ่มที่คุณต้องการได้อย่างรวดเร็ว
หากคุณมีคำถามใด ๆ เพียงแค่แสดงความคิดเห็นด้านล่าง






