Résolu Import utilisateurs dans active directory et export des données

Plus d'informations
il y a 2 ans 9 mois - il y a 2 ans 9 mois #30985 par witness
Bonjour,

Je suis en train de travailler sur un script pour importer des utilisateurs dans l'annuaire AD.

Voici mon script:

# Import des éléments du fichier source
$users = import-csv -path "C:\Users\Administrateur\Desktop\importusers.csv" -delimiter ";"

# Fonction de génération d'un password aléatoire de 8 caractères
Function random-password ($length = 8)
{
    $punc = 24..24 + 40..40
    $digits = 48..57
    $letters = 65..90 + 97..122
    $password = get-random -count $length `
    -input ($punc + $digits + $letters) | % -begin { $aa = $null } `
    -process {$aa += [char]$_} `
    -end {$aa}
    return $password.ToString()
}

foreach ($user in $users)
 {
 $givenname= $user.Prenom
 $sn= $user.Nom 
 $ou= "OU=importusers,DC=server,DC=local"
 $description= $user.Description
 $SAM = $givenname.Substring(0,1).ToLower() + $sn.ToLower()
 $CN = $givenname + " " + $sn
 $displayName = $CN
 $UPN = $SAM + "@domaine.local"
 $userAccountControl= 66050
 $CannotChangePassword = 1
 $HomeDrive = "U"
 $HomeDirectory = "\\test\test"
 $ProfilePath = "C:\users"
 $ScriptLogon = "test"
 $Password = random-password
 $Secure_String_pwd = ConvertTo-SecureString $Password -AsPlainText -Force
 $Enabled = 1
 
 # Export des données dans un fichier TXT

 $user | out-file -append -Filepath C:\Users\Administrateur\Desktop\export.txt

 # Ajout des données dans la base Active Directory

 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

}

Le script a l'air de fonctionner mais j'ai plusieurs questions dont les réponses me permettraient de mieux avancer et de mieux comprendre certaines choses:

Le mot de passe est généré aléatoirement, mais comment je peux faire pour le récupérer ?
Car dans le script qui m'a servi de modèle (voir pdf ci-joint), je ne vois rien qui me permettrait de pouvoir le récupérer, ce qui est embêtant si je dois importer 2000 utilisateurs.

Je pense alors que je vais devoir créer un export de chaque utilisateur importé, mais avant que ConvertTo-SecureString ne s'applique j'imagine, car après il n'est plus lisible ?

Merci pour vos lumières pour cette première question.
Dernière édition: il y a 2 ans 9 mois par witness.

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

Plus d'informations
il y a 2 ans 9 mois - il y a 2 ans 9 mois #30990 par witness
Avec ce code:
# Import des éléments du fichier source
$users = import-csv -path "C:\Users\Administrateur\Desktop\importusers.csv" -delimiter ";"

# Fonction de génération d'un password aléatoire de 8 caractères
Function random-password ($length = 8)
{
    $punc = 64..64 + 44..44
    $digits = 48..57
    $letters = 65..90 + 97..122
    $password = get-random -count $length `
    -input ($punc + $digits + $letters) | ForEach-Object -begin { $aa = $null } `
    -process {$aa += [char]$_} `
    -end {$aa}
    return $password.ToString()
}

foreach ($user in $users)
 {
 
 $sn= $user.Nom 
 $givenname= $user.Prenom
 $ou= "OU=importusers,DC=server,DC=local"
 $description= $user.Description
 $SAM = $givenname.Substring(0,1).ToLower() + $sn.ToLower()
 $CN = $givenname + " " + $sn
 $displayName = $CN
 $UPN = $SAM + "@domaine.local"
 $userAccountControl= 66050
 $CannotChangePassword = 1
 $HomeDrive = "U"
 $HomeDirectory = "\\test\test"
 $ProfilePath = "C:\users"
 $ScriptLogon = "test"
 $Password = random-password
 $Secure_String_pwd = ConvertTo-SecureString $Password -AsPlainText -Force
 $Enabled = 1
 
 # Export des données dans un fichier TXT

 $user | export-csv -append -path "C:\Users\Administrateur\Desktop\export.csv"

 # Ajout des données dans la base Active Directory

 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

}


J'obtiens bien un fichier csv formaté convenablement, seulement, il n'y a que 3 informations en sortie de mon fichier csv:

#TYPE System.Management.Automation.PSCustomObject
"Nom","Prenom","Description"
"Einstein","Albert","coucou"
"Newton","Isaac","coucou"

Ce que je souhaiterais, c'est obtenir ces 3 informations plus d'autres informations issues des variables, comme $password, $CN, etc..
Sauriez-vous m'aider ?
Merci d'avance. 
Dernière édition: il y a 2 ans 9 mois par witness.

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

Plus d'informations
il y a 2 ans 9 mois #30991 par witness
Avec un Export-csv plutôt qu'un out-file, il semble que le formatage soit par défaut ce que je recherche.

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

Plus d'informations
il y a 2 ans 9 mois #30992 par ericlm128
Export-Csv a aussi le paramètre Append

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

Plus d'informations
il y a 2 ans 9 mois #30993 par witness

Export-Csv a aussi le paramètre Append

Salut Eric,

En effet, je pense que Export-csv correspond plus à ce que je cherche.
Par contre, il ne me renvoie en sortie que 3 éléments, à savoir, Nom Prenom et Description.
Ces 3 éléments sont exactement ceux qu'il y a dans mon fichier d'import, j'imagine que ce n'est pas un hasard.
Comment puis-je faire pour retrouver en sortie ces 3 éléments plus d'autres dont j'ai besoin, notamment la valeur de $Password, de $CN et d'autres ?
Merci.
 

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

Plus d'informations
il y a 2 ans 9 mois #30996 par ericlm128
Voici une solution simple
Function random-password ($length = 8)
{
    $punc = 64..64 + 44..44
    $digits = 48..57
    $letters = 65..90 + 97..122
    $password = get-random -count $length `
    -input ($punc + $digits + $letters) | ForEach-Object -begin { $aa = $null } `
    -process {$aa += [char]$_} `
    -end {$aa}
    return $password.ToString()
}


$users = import-csv -path "importusers.csv" -delimiter ";"

$NewUsers = $users | ForEach-Object {
    $sn= $_.Nom
    $givenname= $_.Prenom
    $ou= "OU=importusers,DC=indp57,DC=local"
    $description= $_.Description
    $SAM = $givenname.Substring(0,1).ToLower() + $sn.ToLower()
    $CN = $givenname + " " + $sn
    $displayName = $CN
    $UPN = $SAM + "@indp57.local"
    $userAccountControl= 66050
    $CannotChangePassword = 1
    $HomeDrive = "U"
    $HomeDirectory = "\\test\test"
    $ProfilePath = "C:\users"
    $ScriptLogon = "test"
    $Password = random-password
    $Secure_String_pwd = ConvertTo-SecureString $Password -AsPlainText -Force
    $Enabled = 1

    [PSCustomObject]@{
        sn = $sn
        givenname = $givenname
        ou = $ou
        description= $description
        SAM = $SAM
        CN = $CN
        displayName = $displayName
        UPN = $UPN
        userAccountControl = $userAccountControl
        CannotChangePassword = $CannotChangePassword
        HomeDrive = $HomeDrive
        HomeDirectory = $HomeDirectory
        ProfilePath = $ProfilePath
        ScriptLogon = $ScriptLogon
        Password = $Password
        Secure_String_pwd = $Secure_String_pwd
        Enabled = $Enabled
    }
}


$NewUsers | Export-Csv -path "export.csv" -Append -NoTypeInformation -Delimiter ";"

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

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