Blog链接:https://blog.51cto.com/13969817
权限管理对于管理员来说相对比较复杂的工作,因为初期规划数据存储架构和权限分配之后,在用户不断使用的过程中,有时候会因为文档或者文件夹的机密程度,限制部分人访问,或者员工离职,管理员要移除该员工在某个文件夹以及其下的所有权限等等情况,那么默认的情况下,我们可以采用逐一到每个文件夹或者文档高级访问页面去移除权限,但操作起来比较繁琐,今天我将给大家分享如何使用命令行来移除用户权限?
由于移除用户权限,需要遍历用户在每个文件夹以及其下文档或者子文件夹的授权情况,所以需要使用CSOM方式来实现该需求,我们以Nigo为例,该用户在Microsoft 365 Training Documents的权限结构如下:
具体操作步骤如下所示:1. 连接PnPOnline,命令如下:
2. 获取SiteURL,并赋给$SiteURL,命令如下:
$SiteURL="https://mvptrainingcn.sharepoint.com/sites/Contoso_China"
3. 获取源端文件夹的URL,并赋给$FolderURL命令如下:
$FolderURL="Support Training/Microsoft 365 Documents"
4. 获取Nigo账户,并赋给$ $UserAccount,命令如下:
$UserAccount=XXX@mvptrainingcn.onmicrosoft.com
5. 加载SharePoint CSOM程序集,命令如下:
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"
6. 调用函数:Remove-SPOUserPermissionsFromList来移除用户Nigo在Microsoft 365 Documents文件夹的权限,命令如下:
Function Remove-SPOUserPermissionsFromList()
{
param
(
[Parameter(Mandatory=$true)] [string] $SiteURL,
[Parameter(Mandatory=$true)] [string] $FolderURL,
[Parameter(Mandatory=$true)] [string] $UserAccount
)
Try {
$Cred= Get-Credential
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = $Credentials
$Web = $Ctx.web
$Folder = $Web.GetFolderByServerRelativeUrl($FolderURL)
$Ctx.Load($Folder)
$Ctx.ExecuteQuery()
$Folder.ListItemAllFields.BreakRoleInheritance($True,$False)
$Ctx.ExecuteQuery()
Write-host -f Yellow "Folder's Permission inheritance broken..."
$User = $Web.EnsureUser($UserAccount)
$Ctx.load($User)
$Ctx.Load($Folder.ListItemAllFields.RoleAssignments)
$Ctx.ExecuteQuery()
[Bool]$UserFound = $False
ForEach($RoleAssignment in $Folder.ListItemAllFields.RoleAssignments)
{
$ctx.Load($RoleAssignment.Member)
$Ctx.ExecuteQuery()
#remove user permission from folder
If($RoleAssignment.Member.LoginName -eq $User.LoginName)
{
$Folder.ListItemAllFields.RoleAssignments.GetByPrincipal($User).DeleteObject()
$Ctx.ExecuteQuery()
$UserFound = $True
Write-host "User Permissions Removed from the List Successfully!" -ForegroundColor Green
}
}
If($UserFound -eq $False) { Write-host "User Not found in List Permissions!" -ForegroundColor Red}
}
Catch {
write-host -f Red "Error Removing permissions from the Folder!" $_.Exception.Message
}
}
说明:
- 支持对该文件夹以下的子节点打破继承的权限遍历,比如子文件夹或者文档共享权限的遍历
- 支持对该文件夹父节点比如list的继承权限的遍历
7. 移除Nigo的权限,命令如下:
Remove-SPOUserPermissionsFromList
-SiteURL $SiteURL -FolderURL $FolderURL -UserAccount $UserAccount
执行成功,Nigo在该文件夹包含子节点打破继承后,单独授权的权限,包含共享权限的移除。