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

SharePoint Online: รับระดับสิทธิ์ทั้งหมดโดยใช้ PowerShell


ความต้องการ: รับระดับสิทธิ์ในไซต์ SharePoint Online โดยใช้ PowerShell

วิธีรับระดับสิทธิ์ทั้งหมดในไซต์ SharePoint Online

ใน SharePoint Online คุณสามารถกำหนดระดับสิทธิ์ที่แตกต่างกันให้กับผู้ใช้และกลุ่มเพื่อควบคุมสิ่งที่พวกเขาทำได้และไม่สามารถทำได้บนไซต์ ตัวอย่างเช่น คุณอาจต้องการให้ทีมการตลาดของคุณสามารถเข้าถึงเนื้อหาทั้งหมดบนเว็บไซต์ได้อย่างเต็มที่ ในขณะที่ให้สิทธิ์การเข้าถึงแบบอ่านแก่ผู้ใช้รายอื่น โพสต์ในบล็อกนี้จะแสดงวิธีการรับระดับสิทธิ์ทั้งหมดสำหรับไซต์ใน SharePoint Online

เมื่อต้องการดูระดับสิทธิ์ทั้งหมดในไซต์ SharePoint Online ให้ทำดังต่อไปนี้:

  1. นำทางไปยังไซต์ SharePoint Online ของคุณ >> คลิกที่เฟือง การตั้งค่า >> เลือก การตั้งค่าไซต์ (การอนุญาตไซต์ >> การตั้งค่าการอนุญาตขั้นสูงในไซต์สมัยใหม่)
  2. คลิกลิงก์ การอนุญาตไซต์ บนหน้า การตั้งค่าไซต์ >> คลิกที่ ระดับการอนุญาต จาก Ribbon

  3. หน้าระดับสิทธิ์จะแสดงระดับสิทธิ์ทั้งหมดที่มีอยู่ในไซต์

สิ่งนี้มีประโยชน์หากคุณต้องการดูว่าสิทธิ์ใดบ้างที่มอบหมายให้กับผู้ใช้หรือกลุ่มในสภาพแวดล้อมของคุณ

SharePoint Online: PowerShell เพื่อรับระดับสิทธิ์

ระดับสิทธิ์คือชุดสิทธิ์พื้นฐานที่จัดกลุ่มเพื่อให้สิทธิ์เฉพาะบนไซต์ สคริปต์นี้ส่งคืนชื่อระดับสิทธิ์ทั้งหมด รวมถึงระดับสิทธิ์แบบสำเร็จรูป เช่น “การควบคุมทั้งหมด” และระดับสิทธิ์แบบกำหนดเองใดๆ ที่สร้างขึ้นในคอลเลกชันไซต์ SharePoint Online ที่กำหนด


#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"
 
Function Get-SPOPermissionLevels()
{
  param
    (
        [Parameter(Mandatory=$true)] [string] $SiteURL        
    )
    Try { 
        #Get Credentials to connect
        $Cred= Get-Credential
        $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
 
        #Setup the context
        $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
        $Ctx.Credentials = $Credentials

        #Get all permission levels
        $RoleDefColl=$Ctx.web.RoleDefinitions
        $Ctx.Load($RoleDefColl)
        $Ctx.ExecuteQuery()
    
        #Loop through all role definitions
        ForEach($RoleDef in $RoleDefColl)
        {
            Write-Host -ForegroundColor Green $RoleDef.Name
        }
     }
    Catch {
        write-host -f Red "Error getting permission Levels!" $_.Exception.Message
    }
}
 
#Set parameter values
$SiteURL="https://crescent.sharepoint.com/sites/Ops/"

#Call the function 
Get-SPOPermissionLevels -SiteURL $SiteURL 

สคริปต์นี้รับระดับสิทธิ์ทั้งหมดที่ได้รับการกำหนดค่าในคอลเลกชันไซต์ SharePoint Online

SharePoint Online PowerShell เพื่อรับระดับสิทธิ์

หากคุณต้องการได้รับระดับสิทธิ์เฉพาะในสคริปต์ PowerShell คุณสามารถใช้สิ่งต่อไปนี้:


#Get the permission level
$PermissionLevelName ="Read"
$PermissionLevel = $web.RoleDefinitions.GetByName($PermissionLevelName)
$Ctx.Load($PermissionLevel)
$Ctx.ExecuteQuery()

PnP PowerShell เพื่อรับระดับสิทธิ์ใน SharePoint Online

เมื่อต้องการรับระดับสิทธิ์ของไซต์ SharePoint Online ให้ใช้ cmdlet Get-PnPRoleDefinition


#Set Variables
$SiteURL = "https://crescent.sharepoint.com/sites/Marketing"

#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Credentials (Get-Credential)

#Get Permission levels
Get-PnPRoleDefinition

ในทำนองเดียวกัน หากต้องการรับระดับสิทธิ์เฉพาะ ให้ใช้สิ่งต่อไปนี้:


#Get a Permission level
Get-PnPRoleDefinition -Identity "Read"

หากต้องการรับ ID ของระดับสิทธิ์ทั้งหมด ให้ใช้สิ่งนี้:


#sharepoint online get permission level id
Get-PnPRoleDefinition | Select Name, ID, Hidden, Description

ส่งออกระดับสิทธิ์จากไซต์ทั้งหมดในผู้เช่าโดยใช้ PnP PowerShell

แล้วการตรวจสอบระดับสิทธิ์ที่สร้างขึ้นบนไซต์ทั้งหมดของผู้เช่า SharePoint Online ของคุณล่ะ สคริปต์ PowerShell ด้านล่างจะวนซ้ำแต่ละไซต์คอลเลกชันและส่งออกระดับสิทธิ์ไปยังรายงาน CSV ตรวจสอบให้แน่ใจว่าบัญชีของคุณมีสิทธิ์ผู้ดูแลระบบในทุกไซต์ มิฉะนั้น คุณจะได้รับข้อผิดพลาด “(403) Forbidden”


#Config Variables
$TenantAdminURL = "https://crescent-admin.sharepoint.com"
$CSVOutputPath = "C:\Temp\PermissionLevels.csv"

#Get Credentials to connect
$Cred = Get-Credential

#Connect to Admin Center using PnP Online
Connect-PnPOnline -Url $TenantAdminURL -Credential $Cred

#Get All Site collections - Exclude: Seach Center, Redirect site, Mysite Host, App Catalog, Content Type Hub, eDiscovery and Bot Sites
$SiteCollections = Get-PnPTenantSite | Where {$_.Template -NotIn ("SRCHCEN#0", "REDIRECTSITE#0", "SPSMSITEHOST#0", "APPCATALOG#0", "POINTPUBLISHINGHUB#0", "EDISC#0", "STS#-1")}

$PermissionLevels= @()
#Loop through each site collection
ForEach($Site in $SiteCollections)
{
    Try {
        Write-host "Processing Site:"$Site.URL -f Yellow
        #Connect to the site
        Connect-PnPOnline -Url $Site.URL -Credential $Cred

        #Get Permission levels
        $RoleDefs = Get-PnPRoleDefinition | Where {$_.Hidden -eq $false} | Select -ExpandProperty Name
        $PermLevels = $RoleDefs -join ", "

        #Collect data
        $PermissionLevels += [PSCustomObject][ordered]@{
            SiteName         = $Site.Title
            URL              = $Site.URL
            PermissionLevels = $PermLevels
        }
    }
    Catch {
        write-host "Error: $($_.Exception.Message)" -foregroundcolor Red
    }
}
#Export the data to CSV Report
$PermissionLevels | Export-Csv -Path $CSVOutputPath -NoTypeInformation

สคริปต์ PowerShell นี้วนซ้ำทุกไซต์ในผู้เช่า แยกและสร้างรายงานระดับสิทธิ์:

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