I am trying to create a Script power Shell for creating users with a South American standard.
I need to use the first part of firstname + the first part of last name without the suffixes.
For example:
First Name: John
LastName: da Silva de Souza
expected username: joao.silva.
I'm trying the script below but adaxes returns that the user already exists, even if it doesn't exist.
# Lista de sufixos comuns para remover
$ignoreWords = @("da", "de", "do", "dos", "das", "e")
# Função para remover acentos e caracteres especiais
function Remove-Accents {
param ($text)
$accentedChars = "áàãâäéèêëíìîïóòõôöúùûüçñÁÀÃÂÄÉÈËÍÌÎÏÓÒÕÔÖÚÙÛÜÇÑ"
$replacementChars = "aaaaaeeeeiiiiooooouuuucnAAAAAEEEEIIIIOOOOOUUUUCN"
for ($i = 0; $i -lt $accentedChars.Length; $i++) {
$text = $text -replace $accentedChars[$i], $replacementChars[$i]
}
return $text
}
# Função para verificar se o usuário já existe
function UserExists($username) {
$searcher = New-Object DirectoryServices.DirectorySearcher
$searcher.Filter = "(&(objectClass=user)(sAMAccountName=$username))"
$result = $searcher.FindOne()
return $null -ne $result
}
# Obtém os valores do usuário
$firstName = "%firstname%"
$lastName = "%lastname%"
# Pega a primeira palavra do primeiro nome
$firstNamePart = ($firstName -split "\s+")[0]
# Divide o sobrenome e encontra a primeira palavra válida
$lastNameWords = $lastName -split "\s+"
$lastNamePart = ""
foreach ($word in $lastNameWords) {
if ($ignoreWords -notcontains ($word.ToLower())) {
$lastNamePart = $word
break
}
}
# Remove acentos e converte para minúsculas
$firstNamePart = Remove-Accents $firstNamePart
$lastNamePart = Remove-Accents $lastNamePart
# Monta o nome de usuário inicial
$username = ("$firstNamePart.$lastNamePart").ToLower()
# Verifica se o usuário já existe e incrementa se necessário
$index = 1
$originalUsername = $username
while (UserExists($username)) {
$username = "$originalUsername$index"
$index++
}
# Define o domínio fixo
$domainName = "cloveritbr.local"
$userPrincipalName = "$username@$domainName"
# Log para debug
Write-Output "Username gerado: $username"
Write-Output "UPN gerado: $userPrincipalName"
# Define os atributos no Adaxes
$Context.TargetObject.Put("sAMAccountName", $username)
$Context.TargetObject.Put("userPrincipalName", $userPrincipalName)
# Aplica as mudanças
$Context.TargetObject.SetInfo()