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

วิธีใช้ 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:

  1. ดาวน์โหลด สคริปต์ส่งออกกลุ่มโฆษณาที่สมบูรณ์จาก Github ของฉัน
  2. เปิด PowerShell และนำทางไปยังสคริปต์
  3. เรียกใช้สคริปต์ส่งออก: 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 ของคุณ ด้วยความช่วยเหลือของตัวกรองและ/หรือพารามิเตอร์ฐานการค้นหา คุณสามารถเลือกเฉพาะกลุ่มที่คุณต้องการได้อย่างรวดเร็ว

หากคุณมีคำถามใด ๆ เพียงแค่แสดงความคิดเห็นด้านล่าง

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