java系统找不到指定文件怎么解决
335
2022-10-02
如何通过PowerShell获取SharePoint Online Site中的独立权限?
Blog链接:Policy, 需要掌握某个存有Sensitive Info的site下打破继承(拥有独立权限)的Report,但是我们都知道SharePoint Online原生的功能是无法获取到Permission Report的,今天本文将给大家分享如何通过PowerShell设置$SiteURL和$ReportFile两个参数来获取Unique Permission。
说明:因为我们调用的是CSOM API,执行下面脚本时建议在SharePoint Server 2016或者2019 的WFE 上,如在Windows 10或者11系统上执行该脚本,确保以下路径含有以下2个dll文件,否则执行脚本是会出错,提示如下图:
C:\ProgramFiles\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dllC:\ProgramFiles\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll
接下来,我们打开Windows PowerShell,输入如下脚本:
#Load SharePoint CSOM AssembliesAdd-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" #To call a non-generic Load MethodFunction Invoke-LoadMethod() { Param( [Microsoft.SharePoint.Client.ClientObject]$Object = $(throw "Please provide a Client Object"), [string]$PropertyName ) $Ctx = $Object.Context $Load = [Microsoft.SharePoint.Client.ClientContext].GetMethod("Load") $Type = $Object.GetType() $ClientLoad = $Load.MakeGenericMethod($Type) $Parameter = [System.Linq.Expressions.Expression]::Parameter(($Type), $Type.Name) $Expression = [System.Linq.Expressions.Expression]::Lambda([System.Linq.Expressions.Expression]::Convert([System.Linq.Expressions.Expression]::PropertyOrField($Parameter,$PropertyName),[System.Object] ), $($Parameter)) $ExpressionArray = [System.Array]::CreateInstance($Expression.GetType(), 1) $ExpressionArray.SetValue($Expression, 0) $ClientLoad.Invoke($Ctx,@($Object,$ExpressionArray))} #Function to Get Unique Permission from a Web and its contents - recursivelyFunction Get-SPOUniquePermissionReport([Microsoft.SharePoint.Client.Web]$Web){ Write-host -f Yellow "`nSearching Unique Permissions on the Site:"$web.Url #Check if the given site is using unique permissions Invoke-LoadMethod -Object $Web -PropertyName "HasUniqueRoleAssignments" $Ctx.ExecuteQuery() #Get the Root Web $RootWeb = $ctx.site.RootWeb $Ctx.Load($RootWeb) $Ctx.ExecuteQuery() ### Check if the web has broken inheritance If($Web.HasUniqueRoleAssignments -and $Web.ID -ne $RootWeb.ID) { #Get Object Details and Send the Data to Report file $ObjectName = $Web.Title ;$ObjectType = "Sub Site" ; $ObjectURL = $Web.URL "$($ObjectName) `t $($ObjectURL) `t $($ObjectType)" | Out-File $CSVFile -Append Write-host -f Green "`t Unique Permissions Found on Site:" $Web.URL } ### Get unique permission in Lists Write-host -f Yellow "`t Searching Unique Permissions on the Lists..." $Lists = $Web.Lists $Ctx.Load($Lists) $Ctx.ExecuteQuery() #Exclude system lists $ExcludedLists = @("App Packages","appdata","appfiles","Apps in Testing","Cache Profiles","Composed Looks","Content and Structure Reports","Content type publishing error log","Converted Forms", "Device Channels","Form Templates","fpdatasources","Get started with Apps for Office and SharePoint","List Template Gallery", "Long Running Operation Status","Maintenance Log Library", "Style Library", ,"Master Docs","Master Page Gallery","MicroFeed","NintexFormXml","Quick Deploy Items","Relationships List","Reusable Content","Search Config List", "Solution Gallery", "Site Collection Images", "Suggested Content Browser Locations","TaxonomyHiddenList","User Information List","Web Part Gallery","wfpub","wfsvc","Workflow History","Workflow Tasks", "Preservation Hold Library") #Iterate through each list ForEach($List in $Lists) { $Ctx.Load($List) $Ctx.ExecuteQuery() If($ExcludedLists -NotContains $List.Title -and $List.Hidden -eq $false) { #Check if the given site is using unique permissions Invoke-LoadMethod -Object $List -PropertyName "HasUniqueRoleAssignments" $Ctx.ExecuteQuery() #Check if List has unique permissions If($List.HasUniqueRoleAssignments) { #Send Data to CSV File $ObjectTitle = $List.Title $ObjectURL = $("{0}{1}" -f $Web.Url.Replace($Web.ServerRelativeUrl,''), $List.RootFolder.ServerRelativeUrl) $ObjectType = "List/Library" "$($ObjectTitle) `t $($ObjectURL) `t $($ObjectType)" | Out-File $CSVFile -Append Write-host -f Green "`t`tUnique Permissions Found on the List: '$($List.Title)'" } Write-host -f Yellow "`t`t Searching Unique Permissions on the Lists Items of '$($List.Title)'" #Query to get list items in batches $Query = New-Object Microsoft.SharePoint.Client.CamlQuery $Query.ViewXml = "
执行该脚本,会发现开始遍历contoso网站下打破继承的独立权限,如下图所示:
同时我们也会在D盘的Contoso文件夹中获取到Report,如下图所示:
好了,上述是关于如何获取网站中独立权限的Powershell脚本,希望对大家日后管理网站权限提供帮助,若有其他疑问欢迎线下讨论。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~