Recherche de site Web

SharePoint Online : rechercher tous les sous-sites dotés d'autorisations uniques à l'aide de PowerShell


Exigence : Recherchez tous les sites SharePoint Online avec des autorisations uniques à l'aide de PowerShell.

Comment vérifier si un site (Web) utilise des autorisations uniques ou hérite des autorisations du parent ?

Cherchez-vous un moyen de vérifier rapidement si un sous-site SharePoint Online dispose d’autorisations uniques ? PowerShell facilite la recherche de tous les sites dotés d'autorisations uniques ! Cet article de blog vous montrera comment utiliser PowerShell pour rechercher tous les sous-sites dotés d'autorisations uniques.

Pour vérifier si un site a des autorisations non autorisées, procédez comme suit :

  1. Accédez au site, puis accédez à Paramètres du site >> Autorisations du site >> Paramètres d'autorisations avancés.
  2. La page « Autorisations avancées » vous indique si le site dispose ou non d'autorisations uniques. Si le site dispose d'autorisations uniques,
    vous obtiendrez le texte "Ce site dispose d'autorisations uniques", sinon "Ce site hérite des autorisations de son parent".

SharePoint Online : PowerShell pour obtenir tous les sites Web (sous-sites) avec des autorisations uniques

Ce PowerShell vous permet d'obtenir tous les sous-sites d'une collection de sites, qui utilisent des autorisations uniques :


#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"

#Define Parameter values
$SiteURL="https://crescent.sharepoint.com"

#Setup Credentials to connect
$Cred= Get-Credential
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)

Try {
    #Function to check if site has unique permissions
    Function Check-SPOWebUniquePermissions($SiteURL)
    {
        #Set up the context
        $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
        $Ctx.Credentials = $credentials
 
        $Web = $Ctx.Web
        $Ctx.Load($Web)
        $Ctx.Load($Web.Webs)
        $Ctx.ExecuteQuery()

        #Check if the site has unique permissions
        $Web.Retrieve("HasUniqueRoleAssignments")
        $Ctx.ExecuteQuery()

        if ($Web.HasUniqueRoleAssignments -eq $true)
        {        
            Write-Host -f Green "Site '$($Web.URL)' has Unique Permissions"
        }
        else
        {
            Write-Host -f Yellow "Site '$($Web.URL)' is inhering Permissions from the Parent"
        }
 
        #Process Each subsite in current site
        ForEach($Web in $Web.Webs)
        {
            #call the function recursively
            Check-SPOWebUniquePermissions $Web.Url
        }
    } 
    #call the function 
    Check-SPOWebUniquePermissions $SiteURL
}
Catch {
    write-host -f Red "Error Checking Unique Permissions!" $_.Exception.Message
}

PnP PowerShell pour obtenir des sous-sites avec des autorisations uniques

Vérifions le statut d'autorisation unique de tous les sous-sites à l'aide de PnP PowerShell :


#Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/marketing"

Try {
    #Connect to PnP Online
    Connect-PnPOnline -Url $SiteURL -Interactive

    #Get All subsites from the SharePoint Online site collection
    $WebsCollection = Get-PnPSubWeb -Recurse -Includes HasUniqueRoleAssignments
    
    #Get Unique Permission status of each subsite
    $WebsCollection | Select Title, URL, HasUniqueRoleAssignments
}
catch {
    write-host "Error: $($_.Exception.Message)" -foregroundcolor Red
}

Articles connexes