我正在尝试获取 SharePoint Online 文档库中的所有文件夹和子文件夹。我想检查它们是否有子文件夹。如果他们这样做,我不想将会员和访客的权限更改为“阅读”。
我是 PnP 新手,尝试过这个脚本:
Connect-PnPOnline -Url https://mysharepoint.sharepoint.com/sites/mysite -UseWebLogin
$folders = Get-PnPFolder -Includes ListItemAllFields -Url "/sites/mysite/my document library" | Where-Object { $_.ListItemAllFields.FSObjType -eq 0 }
foreach ($folder in $folders) {
Get-PnPListItemPermission -List "my document library" -Identity $folder.ListItemAllFields.Id
Set-PnPListItemPermission -List "my document library" -Identity $folder.ListItemAllFields.Id -User "Members" -AddRole "Read"
Set-PnPListItemPermission -List "my document library" -Identity $folder.ListItemAllFields.Id -User "Visitors" -AddRole "Read"
}
Disconnect-PnPOnline
不幸的是,$folders 变量是空的,尽管它不应该是空的。因此,我的文件夹的权限不会更改。我也不知道该脚本是否仅适用于“/sites/mysite/my document library”中的文件夹并忽略子文件夹及其子文件夹。
我感谢任何有关如何解决此问题的帮助或来源。谢谢!
您可以使用 ListItemAllFields.FSObjType eq 1 条件检查文件夹或子文件夹。
这是根据您的要求修改的脚本。
Connect-PnPOnline -Url https://mysharepoint.sharepoint.com/sites/mysite -UseWebLogin
function Set-FolderPermissions($folder) {
Get-PnPListItemPermission -List "my document library" -Identity $folder.ListItemAllFields.Id
Set-PnPListItemPermission -List "my document library" -Identity $folder.ListItemAllFields.Id -User "Members" -AddRole "Read"
Set-PnPListItemPermission -List "my document library" -Identity $folder.ListItemAllFields.Id -User "Visitors" -AddRole "Read"
$subfolders = Get-PnPFolder -Includes ListItemAllFields -FolderSiteRelativeUrl $folder.ServerRelativeUrl | Where-Object { $_.ListItemAllFields.FSObjType -eq 1 }
foreach ($subfolder in $subfolders) {
Set-FolderPermissions $subfolder
}
}
$rootFolders = Get-PnPFolder -Includes ListItemAllFields -Url "/sites/mysite/my document library" | Where-Object { $_.ListItemAllFields.FSObjType -eq 0 }
foreach ($rootFolder in $rootFolders) {
Set-FolderPermissions $rootFolder
}
Disconnect-PnPOnline