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

Plus d'informations
il y a 2 ans 8 mois #31115 par witness

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.

Plus d'informations
il y a 2 ans 8 mois #31116 par witness
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.

Plus d'informations
il y a 2 ans 8 mois - il y a 2 ans 8 mois #31117 par ericlm128
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 2 ans 8 mois par ericlm128.

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

Plus d'informations
il y a 2 ans 8 mois #31118 par ericlm128
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.

Plus d'informations
il y a 2 ans 8 mois - il y a 2 ans 8 mois #31120 par witness
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 2 ans 8 mois par witness.

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

Plus d'informations
il y a 2 ans 8 mois #31121 par witness
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.095 secondes
Propulsé par Kunena