Partager via


Estatistica léxica do AD – PSH Script

4519055979_d015efba18_o[1]

https://www.flickr.com/photos/niznoz/ / CC BY-NC-SA 2.0

Resolvi escrever esse artigo motivado pela pesquisa que o Hunecke fez e publicou em: Como dividir os seus usuários pelo seu nome

Quem faz projetos de Exchange já se deparou com esse dilema pelo menos um vez. É crucial balancear a quantidade de caixas postais nas bases de dados, e um dos métodos mais comuns é utilizar as iniciais do primeiro nome dos usuários para isso. Eu mesmo já fiz uma pesquisa similar à apresentada pelo Hunecke em outros projetos.

Se formos entrar no campo léxico, cada língua tem os seus próprios padrões, e assim a porcentagem definida para o Brasil não vale para outros países, tanto pela diferença cultural como da língua.

Para satisfazer a curiosidade de muitos sobre o seu ambiente, escrevi um script em PowerShell que faz a estatística dos usuários pelo nome, mais especificamente pelo atributo LDAP displayName. Se voce quiser pode alterar e escolher outro atributo que for mais conveniente, como por exemplo mailnickname.

O código não verifica se os usuários estão desabilitados e também não contabiliza os usuários que se iniciam com outros caracteres que não de A à Z.

Não esqueça de alterar na segunda linha os valores LDAP para representar o seu domínio. Não se preocupe que nada é alterado no AD.

$alpha = New-Object 'string[,]' 26,3
$domain = [adsi] "LDAP://dc=contoso,dc=com"
$searcher = New-Object System.DirectoryServices.DirectorySearcher $domain
$searcher.PageSize = 1000
$userTotal = 0
for ($count = 0; $count -le 25; $count++)
{
$asciiCode = 65 + $count
$strLetter = [char]$asciiCode
$searcher.Filter = '(&(objectClass=user)(displayName=' + $strLetter + '*))'
$userResult = $searcher.findall()
$alpha[$count,0] = $strLetter
$alpha[$count,1] = $userResult.Count.ToString()
$userTotal = $userTotal + $userResult.Count
}
# Calculando o percentual
for ($count = 0; $count -le 25; $count++)
{
$alpha[$count,2] = [Math]::Round((100*[int]$alpha[$count,1])/$userTotal,2).ToString()
}

# Listando a Tabela

for ($count = 0; $count -le 25; $count++)
{
$alpha[$count,0] + " - " + $alpha[$count,1] + " - " + $alpha[$count,2] + "%"
}
$msg = "`nTotal de usuarios: " + $userTotal
$msg

ps: Ainda acho que os meus códigos em PowerShell tem um jeitão de C#, mas aos poucos vou aprendendo a usar melhor suas funcionalidades. Se voce tiver alguma outra forma melhor sinta-se a vontade de colocar no comentário.

A saída fica assim: Letra – Quantidade de usuários – Porcentagem

A 2 14.29%
B 1 7.14%
C 1 7.14%
D 1 7.14%
E 1 7.14%
F 1 7.14%
G 1 7.14%
H 1 7.14%
I 1 7.14%
J 0 0%
K 0 0%
L 0 0%
M 1 7.14%
N 0 0%
O 0 0%
P 0 0%
Q 0 0%
R 0 0%
S 0 0%
T 1 7.14%
U 1 7.14%
V 1 7.14%
W 0 0%
X 0 0%
Y 0 0%
Z 0 0%