Overview

Definir as permissões dos itens de uma lista com muitos itens pode ser bem trabalhoso. Para auxiliarmos nesta tarefa podemos contar com o PowerShell.
O script PowerShell abaixo define as permissões dos itens de uma lista de acordo com valor informado em um campo do tipo usuário existente na própria lista.

Solução

[void][System.Reflection.Assembly]::LoadWithPartialName(“Microsoft.SharePoint”)

function global:Get-SPSite($url){
return new-Object Microsoft.Sharepoint.SPSite($url)
}

$SPSite = Get-SPSite(“http://meuservidor/meusite”)
$spWeb = $spSite.OpenWeb()
$spList = $spWeb.Lists[“Minha Lista”]
$spitems = $splist.items

#FAZ UM LOOP NOS ITENS DA LISTA
foreach($item in $spitems)
{

[Microsoft.SharePoint.SPListItem]$spListItem = $item

Write-Host “Updating`t” $spListItem.Name “`t$FieldName to $FieldValue”

#SE O ITEM HERDA PERMISSÕES DA LISTA, QUEBRA A HERANÇA
if($splistitem.HasUniqueRoleAssignments -eq $false) {
$splistitem.BreakRoleInheritance($true)
}

#PEGA O NOME DO GRUPO DEFINIDO NO CAMPO ÁREA/SETOR
#$grupo = $splistitem[“Área/Setor”]
#$user = $spWeb.SiteGroups[$grupo]

#REMOVE AS PERMISSÕES DE TODOS OS GRUPOS
$user1 = $spWeb.SiteGroups[“Grupo1”]
$user2 = $spWeb.SiteGroups[“Grupo2”]
$splistItem.RoleAssignments.Remove([Microsoft.SharePoint.SPGroup]$user1)
$splistItem.RoleAssignments.Remove([Microsoft.SharePoint.SPGroup]$user2)

#INCLUI PERMISSÃO AO GRUPO INIDICADO NO CAMPO ÁREA/SETOR
$roleass=New-Object Microsoft.SharePoint.SPRoleAssignment($user1)
$roledef=$spWeb.RoleDefinitions[“Leitura”]
$roleass.RoleDefinitionBindings.Add($roledef)
$splistitem.RoleAssignments.Add($roleass)
$splistitem.Update()

}

$SPWeb.Dispose();
$SPSite.Dispose();

Anúncios