SharePoint Online: Site Koleksiyonundaki Tüm Active Directory Güvenlik Gruplarını Bulun


Gereksinim: Tüm AD Güvenlik Gruplarını bir SharePoint Çevrimiçi Sitesine Alın.

PowerShell, SharePoint Online'daki Tüm AD Gruplarını Bulacak:

Birçok kuruluşta, SharePoint Online siteleri ve içeriğine erişimi ve izinleri yönetmek için Active Directory grupları kullanılır. Çoğunlukla ihtiyaç duyuldukça yeni gruplar oluşturulur ve eski gruplar kullanılmayabilir, hatta unutulabilir. Dolayısıyla, SharePoint Online kiracılığınızdaki tüm AD gruplarını bulmak ve sorun giderme veya denetim amacıyla üyeliklerini belirlemek isteyebilirsiniz. Neyse ki bu görev PowerShell kullanılarak kolayca gerçekleştirilebilir. Bu blog gönderisi, SharePoint Online kiracılığınızdaki tüm AD gruplarını bulmak için PowerShell'i nasıl kullanacağınızı gösterecektir.

SharePoint Online site koleksiyonundan tüm aktif dizin etki alanı gruplarını almak için PowerShell buradadır:


#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
   
#Set Variables for Site URL
$SiteURL= "https://crescent.sharepoint.com/sites/marketing/"
$ADGroupCollection= @()
 
#Setup Credentials to connect
$Cred = Get-Credential
 
Try {
    #Setup the context
    $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
    $Ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.UserName,$Cred.Password)
 
    #Get all Users
    $Users=$Ctx.Web.SiteUsers
    $Ctx.Load($Users)
    $Ctx.ExecuteQuery()
 
    #Filter AD Groups from Users collection
    $ADGroups  = $Users | Where {$_.PrincipalType -eq "SecurityGroup"}

    #Get Each AD Group details
    Foreach($Group in $ADGroups)
    {
        #Get SharePoint Groups of the AD Group
        $Ctx.Load($Group.Groups)
        $Ctx.ExecuteQuery()
        $GroupNames = $Group.Groups | Select -ExpandProperty Title

        #Getting the members
        $ADGroup = new-object psobject
        $ADGroup | add-member noteproperty -name "AD Group Name" -value $Group.Title
        $ADGroup | add-member noteproperty -name "SP Group Membership" -value ($GroupNames -join "; ")
        #Add to Array
        $ADGroupCollection+=$ADGroup 
    }
    #Get the results
    $ADGroupCollection
}
Catch {
    write-host -f Red "Error getting AD Groups:" $_.Exception.Message
}

SharePoint Çevrimiçi Yönetim Kabuğu'nu kullanarak Site Koleksiyonunda AD Grupları edinin:

Bu sefer SharePoint Online yönetim kabuğunun yardımıyla AD güvenlik gruplarını alalım.


#Set Config Variables
$AdminCenterURL = "https://crescent-admin.sharepoint.com"
$SiteURL = "https://crescent.sharepoint.com/sites/marketing"
$ADGroupCollection= @()

#Connect to SharePoint Online
Connect-SPOService -URL $AdminCenterURL

#Get All AD Security Groups from the site collection
$ADGroups = Get-SPOUser -Site $SiteUrl -Limit All | Where { $_.IsGroup -and $_.DisplayName -ne "Everyone" -and $_.DisplayName -ne "Everyone except external users" }
 
#Iterate through each AD Group
Foreach($Group in $ADGroups)
{
        #Send Data to an object array
        $ADGroup = new-object psobject
        $ADGroup | add-member noteproperty -name "Group Name" -value $Group.DisplayName
        $ADGroup | add-member noteproperty -name "SharePoint Groups" -value ($Group.Groups -join ",")
        #Add to Array
        $ADGroupCollection+=$ADGroup          
}
#Get the Data
$ADGroupCollection

Betiği çalıştırmadan önce istemci makinenizde SharePoint Online Yönetim Kabuğu'nun kurulu olduğundan emin olun.

PowerShell kullanarak Tüm Site Koleksiyonlarının Active Directory Gruplarını Dışa Aktarma:

Şimdi, kiracıdaki tüm site koleksiyonlarından AD gruplarını çıkarmak ve bunları bir CSV raporuna aktarmak için yukarıdaki betiği biraz değiştirelim.


#Set Config Variables
$AdminCenterURL = "https://crescent-admin.sharepoint.com"
$ADGroupCollection= @()
$ReportPath ="C:\Temp\ADGroups.csv"

#Connect to SharePoint Online
Connect-SPOService -URL $AdminCenterURL

#Get All Site Collections from the tenant
$Sites  = Get-SPOSite -Limit ALL

#Iterate through each site collection
ForEach($Site in $Sites)
{
    Write-host "Processing Site Collection:"$Site.URL -f Yellow

    #Get All AD Groups / Office 365 Groups from the site collection
    $ADGroups = Get-SPOUser -Site $Site.Url -Limit All | Where { $_.IsGroup -and $_.DisplayName -Notin ("Everyone","Everyone except external users", "Company Administrator", "SharePoint Service Administrator","All Users `(windows`)") }
 
    #Iterate through each AD Group
    Foreach($Group in $ADGroups)
    {
            #Send Data to an object array
            $ADGroup = new-object psobject
            $ADGroup | add-member noteproperty -name "Site Name" -value $Site.Title
            $ADGroup | add-member noteproperty -name "URL" -value $Site.URL
            $ADGroup | add-member noteproperty -name "Group Name" -value $Group.DisplayName
            $ADGroup | add-member noteproperty -name "SharePoint Groups" -value ($Group.Groups -join ",")
            #Add to Array
            $ADGroupCollection+=$ADGroup          
    }
}
#Export Data to CSV
$ADGroupCollection
$ADGroupCollection | export-csv $ReportPath -notypeinformation
Write-host "SharePoint Online Domain Groups data exported to a CSV file at:"$ReportPath -ForegroundColor Cyan

Tüm site koleksiyonlarına ilişkin izinlere sahip olduğunuzdan emin olun; aksi halde şu mesajı alabilirsiniz: “Erişim reddedildi. Bu eylemi gerçekleştirme veya bu kaynağa erişme izniniz yok." hata!

Tüm sitelerde belirli bir AD Grubunu arayabilir miyim? Elbette, 18. satırı şu şekilde değiştirin:


$ADGroups = Get-SPOUser -Site $Site.Url -Limit All | Where { $_.IsGroup -and $_.DisplayName -ne "Everyone" -and $_.DisplayName -ne "Everyone except external users" -and $_.DisplayName -like '*ADSecurityGroupName*' }

PnP PowerShell, SharePoint Online'daki Tüm Active Directory Gruplarını ve Office 365 Gruplarını Bulacak

SharePoint Online sitelerindeki Office 365 grupları da dahil olmak üzere tüm AD Gruplarını ayıklamak için PnP PowerShell komut dosyası sürümünü burada bulabilirsiniz.


#Parameters
$AdminCenterUrl = "https://Crescent-admin.sharepoint.com"
$CSVPath = 'c:\Temp\ADGroupsInSPO.csv'

#Connect to SharePoint admin center
Connect-PnPOnline -Url $AdminCenterUrl -Interactive

#Get all SharePoint sites
$Sites = Get-PnPTenantSite
$Report = @()

#Loop through each site
ForEach ($Site in $Sites)
{
    Try {
        Write-host "Processing Site:"$Site.URL -f Yellow
        Connect-PnPOnline -Url $Site.Url -Interactive
        $ADGroups = Get-PnPUser | Where { $_.PrincipalType -eq "SecurityGroup" -and $_.Title -Notin ("Everyone","Everyone except external users", "Company Administrator", "SharePoint Service Administrator","All Users `(windows`)") }

        ForEach ($Group in $ADGroups)
        {
            $Report += New-Object Pscustomobject -Property @{
            SiteURL = $Site.URL
            GroupName = $Group.Title
            LoginName = $Group.LoginName
            GroupEmail = $Group.Email
            }
        }        
    }
    Catch {
        continue;
   }
}

$Report
 
#Generate a CSV file from the data
$Report | Export-Csv $CSVPath -NoTypeInformation

Özetle, yöneticiler PowerShell komut dosyalarını kullanarak bir SharePoint Online site koleksiyonuyla ilişkili tüm Active Directory güvenlik gruplarını bulabilirler. Bu bilgiler denetim amacıyla, bir grup kullanıcının erişimini iptal etmek veya diğer yönetim görevleri için kullanılabilir. SharePoint Online site koleksiyonundaki tüm Active Directory güvenlik gruplarını bulmak, SharePoint ortamlarının güvenliğini ve bütünlüğünü korumak isteyen yöneticiler için önemli bir araçtır.

İlgili makaleler