quarta-feira, 2 de julho de 2014

Script para contar a quantidade de usuários por grupo em um site do SharePoint

O SharePoint tem limitações quanto à quantidade de usuário que você pode adicionar num grupo do SharePoint. Entre outros problemas, um bastante frequente se refere a busca:

"Durante o processo de indexação, o sistema armazena a ACE de cada usuário que tenha sido adicionado a um grupo do SharePoint, em vez da ACE do próprio grupo do SharePoint. Esse processo dá suporte a aproximadamente 1.000 usuários por ACL (lista de controle de acesso), após o que o erro ”Parâmetro incorreto" faz o rastreamento falhar."
Fonte: http://technet.microsoft.com/pt-br/library/cc850696(v=office.12).aspx

Explicação/Mais detalhes: http://blogs.msdn.com/b/mattlind/archive/2007/11/02/sharepoint-indexing-limited-by-64-kb-acl-limit.aspx

Visto que temos essa limitação seria conveniente poder contar quantos membros há em cada grupo pra um site que apresenta o problema. Você pode editar as views do grupos no site a adicionar um "count", porém isso pode ser bastante trabalhoso dependendo da quantidade de grupos que você possui.
Pensando nisso criei um script em PowerShell para coletar esse informação:

#Você precisa especificar qual o site collection que possui o site de interesse, para listar os site collections use o comando abaixo:
get-spsite

#Assim que tiver o seu site collection definido adicione ele no comando abaixo, isso vai listar os sub-sites deste site collection:
get-spweb http://lab-shp2013-01/

#Na lista você irá encontrar o site que deseja, no meu caso usei o "/" mas poderia ser "/test-site", ou qualquer coisa, então você irá adicionar esse site no comando abaixo:
$siteweb = get-spweb http://lab-shp2013-01/

#Agora a variável $siteweb contém o seu site, você precisa criar uma para conter os grupos desde site, o que faço abaixo:
$groups = $siteweb.groups

#Tendo as variável populadas, basta executar o foreach abaixo para listar o grupo e a quantidade respectiva de membros:
foreach ($group in $groups)
{
Write-Host "Grupo" $group.name $group.users.count "membros"
}

A saída será algo como a imagem abaixo:

Have fun!