Question Comment vérifier si un nom d'utilisateur AD est déjà utilisé


Merci d'avance pour votre aide. J'ai trouvé quelque chose en rapport avec le lien suivant, mais j'étais incapable de trouver la solution que je cherchais ici. Vérifier l'existence de comptes de domaine avec le script Powershell

Ce que j'essaie de faire, c'est de prendre les noms d'utilisateur d'une liste déjà générée dans un fichier CSV à partir d'un autre script que j'exécute.

Une fois que j'ai ces noms d'utilisateur (sAMAccountname), je veux vérifier si ce nom d'utilisateur est déjà utilisé. Si c'est ce que je veux, cela peut être montré, peut-être via Echo, puis continuer à vérifier les autres noms. Si ce n'est pas le cas, il devrait simplement continuer à vérifier d'autres noms.

Voici ce que j'ai jusqu'à maintenant. (N'oubliez pas que je suis un novice complet de Powershell et que je ne le fais que par nécessité absolue)

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
}
}

5
2017-07-16 02:59


origine




Réponses:


Si vous utilisez Powershell 3 ou supérieur, il n’est pas nécessaire de Import-Module ActiveDirectory. PS chargera automatiquement le module pour vous dès que vous utiliserez une applet de commande à partir de ce module. Utilisation $PSVersionTable pour en être sûr, mais je pense que vous utilisez PS 3 ou supérieur, car vous semblez utiliser un foreach automatique dans votre code, et le foreach automatique n’est disponible qu’après PS 3.

De plus, il est inutile de continuer si le module ne se charge pas, car il est essentiel au reste du script, de sorte que le -ErrorAction Continue n'a pas de sens non plus. Je frapperais toute la première ligne.

La ligne deux où vous importez-CSV est OK. le $UserList variable semble superflue. À partir de là, je ferais probablement quelque chose comme ceci:

$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"
    }
}

5
2017-07-16 04:05



Merci, j'ai fini par l'utiliser et par le modifier légèrement pour qu'il corresponde exactement aux besoins de mon équipe. Cela m'a aidé à mieux comprendre PowerShell et sa structure, que j'apprécie énormément. Si vous en avez le temps et pourriez-vous expliquer ce que fait la partie Catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException]? Est-ce juste quelque chose qui est censé fonctionner avec Get-ADUser de par la conception pour ces situations précisément? Merci encore pour tous vos efforts. - Adan


Je n'ai pas testé cela, mais la structure ressemblerait davantage à:

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"
    }
}

2
2017-07-16 03:56





Je pense qu'il est préférable de tester l'existence du nom sAMAccountname non seulement pour les utilisateurs, mais que les groupes peuvent également avoir le même nom sAMAccountname. Cela peut être fait en utilisant Get-ADObject De cette façon, il n’ya pas d’exception, mais vous pouvez en lancer une vous-même.

$sAMAccountname = "TestToTest"

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

0
2017-07-27 09:06