Question Doublons générés lors du traitement import AD

  • witness57
  • Auteur du sujet
  • Visiteur
  • Visiteur
il y a 4 ans 11 mois #31115 par witness57
Réponse de witness57 sur le sujet Doublons générés lors du traitement import AD

Voici un exemple simple de boucle pouvant répondre au besoin
# Nom dans l'AD
$a = "a", "b", "c", "d1", "e"

# Nom des entrants
$b = "a", "c", "c", "d", "f"

$projection = $a
$c = $b | ForEach-Object {
    $name = $_
    if ($projection -contains $name)
    {
        for ($i = 1 ; $projection -contains ($name + $i) ; $i++)
        {
        }
        $name = $name + $i
    }

    $projection += $name
    $name
}

# Nom des entrants modifiés
$c

<# Affiche
a1
c1
c2
d
f
#>


J'ai intégré ton bloc dans mon script en modifiant un peu pour tenter de l'adapter:

$users = import-csv -path "C:\Users\Administrateur\Desktop\importusers.csv" -delimiter ";"
$NewUsers = $users | ForEach-Object {
    $sn = $_.Nom
    $givenname = $_.Prenom
    $Classe = $_.Classe
    $identifiant = $_.identifiant
    $ou = "OU=importusers,DC=Mondomaine,DC=local"
    $description = 'GCU-ORG{$ELEVE}$' + $Classe
    $SAM = $givenname.Substring(0,1).ToLower() + $sn.ToLower()
    $CN = $sn + " " + $givenname + " " + "[$identifiant]"
    $displayName = $CN
    $UPN = $SAM + "@Mondomaine.local"
    $userAccountControl = 66050
    $CannotChangePassword = 1
    $HomeDrive = "U"
    $HomeDirectory = "\\test\test"
    $ProfilePath = "C:\users"
    $ScriptLogon = "test"
    $Password = '{0}{1}' -f (get-random -Minimum 1000000 -Maximum 9999999), [char](get-random -Minimum 65 -Maximum 90)
    $Password = $Password -replace '0',(Get-Random -Minimum 1 -Maximum 9) -replace 'O',[char](get-Random -Minimum 65 -Maximum 78)
    $Secure_String_pwd = ConvertTo-SecureString $Password -AsPlainText -Force
    $Enabled = 1
   
    # SamAccountName dans l'AD
    $AD_SAM = get-ADuser -filter * -SearchBase $ou | Select-Object -Property SamAccountName
    
    if ($AD_SAM -contains $SAM)
    {
        for ($i = 1 ; $AD_SAM -contains ($SAM + $i) ; $i++)
        {
        }
        $SAM = $SAM + $i
    }
    $AD_SAM += $SAM
    
    $SAM
}

New-ADuser -displayName $displayName -Path $ou -Description $description -SamAccountName $SAM -givenname $givenname -Surname $sn -name $displayName -UserPrincipalName $UPN -PasswordNeverExpires $userAccountControl -CannotChangePassword $CannotChangePassword -HomeDrive $HomeDrive -HomeDirectory $HomeDirectory -ProfilePath $ProfilePath -ScriptPath $ScriptLogon -Enabled $Enabled -Accountpassword $Secure_String_pwd

[PSCustomObject]@{
    Nom = $sn
    Prenom = $givenname
    OU = $ou
    Description= $description
    Login = $SAM
    Lettre_lecteur = $HomeDrive
    Dossier_personnel = $HomeDirectory
    Chemin_profil = $ProfilePath
    ScriptLogon = $ScriptLogon
    Mot_de_passe = $Password
    }
}
$NewUsers | Export-Csv -path "C:\Users\Administrateur\Desktop\export.csv" -Append -NoTypeInformation -Delimiter ";"


Est-ce que ça peut fonctionner ?

Connexion ou Créer un compte pour participer à la conversation.

  • witness57
  • Auteur du sujet
  • Visiteur
  • Visiteur
il y a 4 ans 11 mois #31116 par witness57
Réponse de witness57 sur le sujet Doublons générés lors du traitement import AD
Ah oui ça va certainement pas passer car je me sers de $SAM plus haut pour $UPN, donc si ça me modifie $SAM en bas, ça va pas coller avec celui plus haut pour générer l'UPN...

Connexion ou Créer un compte pour participer à la conversation.

  • Visiteur
  • Visiteur
il y a 4 ans 11 mois - il y a 4 ans 11 mois #31117 par
A première vue je ferais comme ceci sans avoir testé
# SamAccountName dans l'AD
$AD_SAM = get-ADuser -filter * -SearchBase $ou | Select-Object -ExpandProperty SamAccountName

$users = import-csv -path "C:\Users\Administrateur\Desktop\importusers.csv" -delimiter ";"

$NewUsers = $users | ForEach-Object {
    $sn = $_.Nom
    $givenname = $_.Prenom
    $Classe = $_.Classe
    $identifiant = $_.identifiant
    $ou = "OU=importusers,DC=Mondomaine,DC=local"
    $description = 'GCU-ORG{$ELEVE}$' + $Classe
    $SAM = $givenname.Substring(0,1).ToLower() + $sn.ToLower()
    $CN = $sn + " " + $givenname + " " + "[$identifiant]"
    $displayName = $CN
    $UPN = $SAM + "@Mondomaine.local"
    $userAccountControl = 66050
    $CannotChangePassword = 1
    $HomeDrive = "U"
    $HomeDirectory = "\\test\test"
    $ProfilePath = "C:\users"
    $ScriptLogon = "test"
    $Password = '{0}{1}' -f (get-random -Minimum 1000000 -Maximum 9999999), [char](get-random -Minimum 65 -Maximum 90)
    $Password = $Password -replace '0',(Get-Random -Minimum 1 -Maximum 9) -replace 'O',[char](get-Random -Minimum 65 -Maximum 78)
    $Secure_String_pwd = ConvertTo-SecureString $Password -AsPlainText -Force
    $Enabled = 1

    if ($AD_SAM -contains $SAM)
    {
        for ($i = 1 ; $AD_SAM -contains ($SAM + $i) ; $i++)
        {
        }
        $SAM = $SAM + $i
    }
    $AD_SAM += $SAM
    
    New-ADuser -displayName $displayName -Path $ou -Description $description -SamAccountName $SAM -givenname $givenname -Surname $sn -name $displayName -UserPrincipalName $UPN -PasswordNeverExpires $userAccountControl -CannotChangePassword $CannotChangePassword -HomeDrive $HomeDrive -HomeDirectory $HomeDirectory -ProfilePath $ProfilePath -ScriptPath $ScriptLogon -Enabled $Enabled -Accountpassword $Secure_String_pwd

    [PSCustomObject]@{
        Nom = $sn
        Prenom = $givenname
        OU = $ou
        Description= $description
        Login = $SAM
        Lettre_lecteur = $HomeDrive
        Dossier_personnel = $HomeDirectory
        Chemin_profil = $ProfilePath
        ScriptLogon = $ScriptLogon
        Mot_de_passe = $Password
    }

}

$NewUsers | Export-Csv -path "C:\Users\Administrateur\Desktop\export.csv" -Append -NoTypeInformation -Delimiter ";"

J'ai laissé le -Append sans conviction ca dépend ce que tu souhaites faire
Dernière édition: il y a 4 ans 11 mois par .

Connexion ou Créer un compte pour participer à la conversation.

  • Visiteur
  • Visiteur
il y a 4 ans 11 mois #31118 par
Tu as raison
# SamAccountName dans l'AD
$AD_SAM = get-ADuser -filter * -SearchBase $ou | Select-Object -ExpandProperty SamAccountName

$users = import-csv -path "C:\Users\Administrateur\Desktop\importusers.csv" -delimiter ";"

$NewUsers = $users | ForEach-Object {
    $sn = $_.Nom
    $givenname = $_.Prenom

    $SAM = $givenname.Substring(0,1).ToLower() + $sn.ToLower()
    if ($AD_SAM -contains $SAM)
    {
        for ($i = 1 ; $AD_SAM -contains ($SAM + $i) ; $i++)
        {
        }
        $SAM = $SAM + $i
    }
    $AD_SAM += $SAM
    
    $Classe = $_.Classe
    $identifiant = $_.identifiant
    $ou = "OU=importusers,DC=Mondomaine,DC=local"
    $description = 'GCU-ORG{$ELEVE}$' + $Classe
    $CN = $sn + " " + $givenname + " " + "[$identifiant]"
    $displayName = $CN
    $UPN = $SAM + "@Mondomaine.local"
    $userAccountControl = 66050
    $CannotChangePassword = 1
    $HomeDrive = "U"
    $HomeDirectory = "\\test\test"
    $ProfilePath = "C:\users"
    $ScriptLogon = "test"
    $Password = '{0}{1}' -f (get-random -Minimum 1000000 -Maximum 9999999), [char](get-random -Minimum 65 -Maximum 90)
    $Password = $Password -replace '0',(Get-Random -Minimum 1 -Maximum 9) -replace 'O',[char](get-Random -Minimum 65 -Maximum 78)
    $Secure_String_pwd = ConvertTo-SecureString $Password -AsPlainText -Force
    $Enabled = 1

    New-ADuser -displayName $displayName -Path $ou -Description $description -SamAccountName $SAM -givenname $givenname -Surname $sn -name $displayName -UserPrincipalName $UPN -PasswordNeverExpires $userAccountControl -CannotChangePassword $CannotChangePassword -HomeDrive $HomeDrive -HomeDirectory $HomeDirectory -ProfilePath $ProfilePath -ScriptPath $ScriptLogon -Enabled $Enabled -Accountpassword $Secure_String_pwd

    [PSCustomObject]@{
        Nom = $sn
        Prenom = $givenname
        OU = $ou
        Description= $description
        Login = $SAM
        Lettre_lecteur = $HomeDrive
        Dossier_personnel = $HomeDirectory
        Chemin_profil = $ProfilePath
        ScriptLogon = $ScriptLogon
        Mot_de_passe = $Password
    }

}

$NewUsers | Export-Csv -path "C:\Users\Administrateur\Desktop\export.csv" -Append -NoTypeInformation -Delimiter ";"

Connexion ou Créer un compte pour participer à la conversation.

  • witness57
  • Auteur du sujet
  • Visiteur
  • Visiteur
il y a 4 ans 11 mois - il y a 4 ans 11 mois #31120 par witness57
Réponse de witness57 sur le sujet Doublons générés lors du traitement import AD
Hello

Alors j'ai testé un import et j'ai beaucoup d'erreur concernant l'UPN:

New-ADuser : Échec de l’opération, car la valeur UPN fournie pour l’ajout/la modification n’est pas unique à l’échelle de la forêt

Script utlisé:


$AD_SAM = get-ADuser -filter * -SearchBase "OU=importusers,DC=Mondomaine,DC=local" | Select-Object -ExpandProperty SamAccountName


$users = import-csv -path "C:\Users\Administrateur\Desktop\importusers.csv" -delimiter ";"


$NewUsers = $users | ForEach-Object {
    $sn = $_.Nom
    $givenname = $_.Prenom
    $Classe = $_.Classe
    $identifiant = $_.identifiant
    $ou = "OU=importusers,DC=iMondomaine,DC=local"
    $description = 'GCU-ORG{$ELEVE}$' + $Classe
    $SAM = $givenname.Substring(0,1).ToLower() + $sn.ToLower()
    
   
    if ($AD_SAM -contains $SAM)
    {
        for ($i = 1 ; $AD_SAM -contains ($SAM + $i) ; $i++)
        {
        }
        $SAM = $SAM + $i
    }
    $AD_SAM += $SAM

   
    $CN = $sn + " " + $givenname + " " + "[$identifiant]"
    $displayName = $CN
    $UPN = $SAM + "@Mondomaine.local"
    $userAccountControl = 66050
    $CannotChangePassword = 1
    $HomeDrive = "U"
    $HomeDirectory = "\\test\test"
    $ProfilePath = "C:\users"
    $ScriptLogon = "test"
    $Password = '{0}{1}' -f (get-random -Minimum 1000000 -Maximum 9999999), [char](get-random -Minimum 65 -Maximum 90)
    $Password = $Password -replace '0',(Get-Random -Minimum 1 -Maximum 9) -replace 'O',[char](get-Random -Minimum 65 -Maximum 78)
    $Secure_String_pwd = ConvertTo-SecureString $Password -AsPlainText -Force
    $Enabled = 1


New-ADuser -displayName $displayName -Path $ou -Description $description -SamAccountName $SAM -givenname $givenname -Surname $sn -name $displayName -UserPrincipalName $UPN -PasswordNeverExpires $userAccountControl -CannotChangePassword $CannotChangePassword -HomeDrive $HomeDrive -HomeDirectory $HomeDirectory -ProfilePath $ProfilePath -ScriptPath $ScriptLogon -Enabled $Enabled -Accountpassword $Secure_String_pwd


[PSCustomObject]@{
    Nom = $sn
    Prenom = $givenname
    OU = $ou
    Description= $description
    Login = $SAM
    Lettre_lecteur = $HomeDrive
    Dossier_personnel = $HomeDirectory
    Chemin_profil = $ProfilePath
    ScriptLogon = $ScriptLogon
    Mot_de_passe = $Password
    }

}

$NewUsers | Export-Csv -path "C:\Users\Administrateur\Desktop\export.csv" -Append -NoTypeInformation -Delimiter ";"



Je me demande si le problème ne vient pas du bloc if dans le script car $UPN dépend de $SAM et je ne suis pas sûr qu'à la fin du bloc if la variable $SAM soit bien changée en cas de doublon.

Le if fait surement son job mais peut-être que la variable $SAM ne récupère pas le résultat du if
Dernière édition: il y a 4 ans 11 mois par witness57.

Connexion ou Créer un compte pour participer à la conversation.

  • witness57
  • Auteur du sujet
  • Visiteur
  • Visiteur
il y a 4 ans 11 mois #31121 par witness57
Réponse de witness57 sur le sujet Doublons générés lors du traitement import AD
Le problème vient possiblement de mon fichier d'import.
Je vous redis

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.045 secondes
Propulsé par Kunena