Como verificar se um nome de usuário do AD já está sendo usado

5

Agradeço antecipadamente por sua ajuda. Encontrei algo relacionado no link a seguir, mas não consegui encontrar a solução que estava procurando aqui. Verifique a existência de contas de domínio com o script Powershell

O que estou tentando fazer é pegar nomes de usuários de uma lista que já foi gerada em um arquivo CSV de outro script que estou executando.

Depois que eu tiver esses nomes de usuário (sAMAccountname), quero verificar se esse nome de usuário já está sendo usado. Se for, quero que seja mostrado, talvez via Echo, e depois continue verificando os outros nomes. Se não, então deve simplesmente continuar verificando outros nomes.

Aqui está o que eu tenho até agora. (Tenha em mente que eu sou um novato Powershell completo e só estou fazendo isso por necessidade absoluta)

Import-Module ActiveDirectory -ErrorAction Continue
$UserCSV = import-csv "\fs1\DisasterRecovery\Source Controlled Items\WindowsPowerShell\Test scripts\Import Production Users\Users.csv"
$UserList = $UserCSV.sAMAccountname
foreach($User in $UserList)
{
if (Get-ADUser -Filter {sAMAccountname -eq $User} ) {
  # Exists
  #echo Already Exists
} else {
  SilentlyContinue
}
}
    
por Adan 16.07.2014 / 04:59

3 respostas

5

Se você estiver usando o Powershell 3 ou melhor, não há necessidade de Import-Module ActiveDirectory . O PS carregará automaticamente o módulo para você assim que você usar um cmdlet desse módulo. Use $PSVersionTable para ter certeza, mas acho que você está usando o PS 3 ou melhor, porque você parece usar um código foreach automático no seu código, e o foreach automático não ficou disponível até o PS 3.

Além disso, não adianta continuar se o módulo não for carregado, já que é crítico para o resto do script, então o -ErrorAction Continue também não faz sentido. Eu atacaria toda a primeira linha.

Linha dois em que você Import-CSV está OK. A variável $UserList parece supérflua. De lá, eu provavelmente faria algo assim:

$UserCSV = Import-Csv C:\Users\Administrator\test.csv
Foreach ($User in $UserCSV)
{
    Try
    {
        # Use "EA Stop" to ensure the exception is caught.
        $U = Get-ADUser $User.sAMAccountName -ErrorAction Stop 
        Write-Host "$($User.SamAccountName) is already in use."
    }
    Catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException]
    {
        # The user was not found!
        Write-Warning "$($User.SamAccountName) was not found in this domain!"
    }
    Catch
    {
        # Some other terrible error occured!
        Write-Error "OHSHI"
    }
}
    
por 16.07.2014 / 06:05
2

Eu não testei isso, mas a estrutura seria mais parecida com:

Import-Module ActiveDirectory -ErrorAction Continue
$UserCSV = import-csv "\fs1\DisasterRecovery\Source Controlled Items\WindowsPowerShell\Test scripts\Import Production Users\Users.csv"

foreach($row in $UserCSV)
{
    $userAccount = Get-ADUser -Filter {sAMAccountname -eq $row.sAMAccountname}

    if ($userAccount) {
        Write-Host "User $($row.sAMAccountname) exists"
    }
}
    
por 16.07.2014 / 05:56
0

Acho melhor testar a existência do sAMAccountName não apenas para usuários, mas também para grupos que possuem o mesmo sAMAccountName. Isso pode ser feito usando Get-ADObject Desta forma, não há exceção, mas você pode jogar uma por conta própria.

$sAMAccountname = "TestToTest"

if(@(Get-ADObject -Filter { sAMAccountname -eq $sAMAccountname }).Count -ge 1){
    Write-Host "$sAMAccountname exsists"
}else{
    Write-Host "$sAMAccountname doesn't exsist"
}
    
por 27.07.2016 / 11:06