Question Password - New ADUser

Plus d'informations
il y a 12 ans 8 mois #15359 par Bigard
Password - New ADUser a été créé par Bigard
Bonsoir à tous,

Alors voilà je m'explique, j'arrive a peu près à tout faire avec un password sauf ce qu'on me demande de faire soit :

Je dois affecter un mot de passe à un utilisateur (jusque là pas de soucis) mais c'est un mot de passe que je dois récupérer dans un fichier csv..

Mais quand j'essaie j'ai un problème de format.
Voici ce qui est proposé par Microsoft :

[code:1]-AccountPassword (Read-Host -AsSecureString \"AccountPassword\"«»)[/codeSauf

Sauf que moi je ne veux pas le saisir, je veux le récupérer dans mon fichier CSV..Donner moi une piste svp, j'ai tout essayé et rien ne marche merci.. [/code:1]

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

Plus d'informations
il y a 12 ans 8 mois #15360 par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:Password - New ADUser
Bonsoir,

Je dois affecter un mot de passe à un utilisateur (jusque là pas de soucis) mais c'est un mot de passe que je dois récupérer dans un fichier csv..


Comme tu ne postes pas ici le contenu de ton fichier csv, je vais partir d'un postula :)

Soit un fichier csv nommé \"DespicableMe.csv\" contenant, pour l'exemple, les données suivantes :

samAccountName;DisplayName;Password
Gru;Mister Gru;Despicable
Nefario;Doctor Nefario;Boogie
Dave;Dave le minion;WhereIsMyPassword

L'import de ce fichier, qui permettra d'obtenir des objets personnalisés, s'effectue de cette façon :

[code:1]
Import-Csv D:\temp\DespicableMe.csv -delimiter \";\"
[/code:1]

NB : Si le séparateur utilisé dans le fichier CSv est une ',', il ne faut tout simplement pas utiliser le paramètre '-delimiter'.

Nous pouvons alors importer le contenu du fichier csv dans une variable, qui contiendra finalement une collection d'objets personnalisés dont les propriétés sont \"samAccountName\", \"DisplayName\" et \"Password\" :

[code:1]
PS > $Users = Import-Csv D:\temp\DespicableMe.csv -delimiter \";\"
PS > $Users

samAccountName DisplayName Password


Gru Mister Gru Despicable
Nefario Doctor Nefario Boogie
Dave Dave le minion WhereIsMyPassword


[/code:1]

A toi ensuite de récupérer chaque mot de passe via, pour l'exemple, une boucle foreach, qui te permettra d'effectuer une énumération de la collection :

[code:1]

$Users = Import-Csv D:\temp\DespicableMe.csv -delimiter \";\"
# Pour chaque utilisateur
foreach($User in $Users){
# Ici le code
# Affichage du login et mot de passe
$User.samAccountName + \" \" + $User.Password
# Peut s'écrire aussi
Write-Host \"$($User.samAccountName) $($User.Password)\"

# Exécution d'une Cmdlet acceptant le paramètre 'AccountPassword' (New-ADUser)
# ....... -AccountPassword (Read-Host -AsSecureString $User.Password)

}
[/code:1]

Pour plus d'informations sur l'utilisation de la Cmdlet 'Import-Csv' :

[code:1]
Get-Help Import-Csv
Get-Help Import-Csv -Detailled
Get-Help Import-Csv -Full
Get-Help Import-Csv -Examples
Get-Help Import-Csv -Online
[/code:1]

Ou bien encore :

Using the Import-Csv Cmdlet

@ +

Matthew BETTON<br><br>Message édité par: Matthew BETTON, à: 16/07/13 21:55

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

Plus d'informations
il y a 12 ans 8 mois #15362 par Bigard
Réponse de Bigard sur le sujet Re:Password - New ADUser
merci beaucoup pour ton aide, c'est gentil. Mais mon problème était que mon fichier csv n'était pas bien fait. Donc mon code Powershell avait plein d'erreur, je l'ai refait comme il fallait et hop plus d'erreurs ^^

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

Plus d'informations
il y a 12 ans 6 mois #15806 par RIOUAL Benjamin
Réponse de RIOUAL Benjamin sur le sujet Re:Password - New ADUser
Bonjour, je suis tombé ici en faisant une recherche pour créer des utilisateurs AD, avec des password differents, sans ForEach-Object (ça a l'air de ne pas courrir les rues :P )

[code:1]#Script de création des utilisateurs
Import-Module ActiveDirectory
# FirstName = GivenName, LastName = Surname
$CSVUsers = Import-Csv .\ListeUser3.csv |
Select-Object @{Name=\&quot;GivenName\&quot;;Expression={($_.FirstName.Substring(0,1)).ToUpper() + ($_.FirstName.Substring(1)).ToLower()}},
@{Name=\&quot;SurName\&quot;;Expression={($_.LastName).ToUpper()}},
@{Name=\&quot;ShortLastName\&quot;;Expression={($_.ShortLastName).ToLower()}},
@{Name=\&quot;SamAccountName\&quot;;Expression={($_.SamAccountName).ToLower()}},
Service,
@{Name=\&quot;Password\&quot;;Expression={\&quot;P@ssW0rD!\&quot; + (Get-Random -Minimum 10 -Maximum 99)}}
$CSVUsers | Select GivenName,Surname,Password | Export-Csv UserPassword.csv
$CSVUsers = $CSVUsers | Select-Object GivenName,
Surname,
@{Name=\&quot;Description\&quot;;Expression={$_.Service}},
ShortLastName,
@{Name=\&quot;Path\&quot;;Expression={\&quot;OU=Import-Agents,OU=Technique HK,DC=formation,DC=ad\&quot;}},
@{Name=\&quot;Name\&quot;;Expression={$_.SurName + \&quot; \&quot; + $_.GivenName}},
@{Name=\&quot;DisplayName\&quot;;Expression={$_.GivenName + \&quot; \&quot; + $_.SurName}},
SamAccountName,
Service,
@{Name=\&quot;UserPrincipalName\&quot;;Expression={$_.SamAccountName + \&quot;@formation.ad\&quot;}},
@{Name=\&quot;Mail\&quot;;Expression={
If ($_.SurName -notmatch \&quot;-\&quot;«») {($_.GivenName + \&quot;.\&quot; + $_.ShortLastName).ToLower() + \&quot;@auxerre.com\&quot;}
Else
{ ($_.GivenName + \&quot;.\&quot; + $_.ShortLastName + \&quot;@auxerre.com\&quot; + \&quot;; \&quot; + $_.GivenName + \&quot;.\&quot; + $_.SurName + \&quot;@auxerre.com\&quot;«»).ToLower()}
}},
@{Name=\&quot;AccountPassword\&quot;;Expression={ConvertTo-SecureString $_.Password -AsPlainText -Force}}
$ADUsers = Get-ADUser -Filter * | Select-Object -ExpandProperty SamAccountName

$NewUsers = $CSVUsers | Where-Object {$ADUsers -notcontains $_.SamAccountName}
If ($NewUsers -notlike \&quot;\&quot;«») {
$NewUsers | New-ADUser -ChangePasswordAtLogon 1 -Enabled 1
}
[/code:1]

Pour résumer, l'idée est d'importer le fichier CSV, y faire un premier select-object pour formater les noms (majuscule/minuscules) et d'y générer un mot de passe légérement aléatoire.
On enregistre un coup ce petit monde, surtout pour fournir leurs mots de passes aux utilisateurs).
On y fait un second select-object où l'on construit les champs comme l'on veut (comme le DisplayName) et où l'on convertie les mots de passe en SecureString.
On vérifie ensuite que les utilisateurs que l'on veut créer ne sont pas deja dans l'AD grace à une requete et à l'operateur -NotContains.
Il n'y a plus qu'a envoyer la sauce, rendre les comptes actifs, et changer le mot de passe au premier log.

Des questions ? :)

J'ai fait des tests avec Measure-Command. Pour 10 utilisateurs, avec un ForEach-Object il faut compter 1,2s. Avec cette Methode 0,8s

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

Plus d'informations
il y a 12 ans 6 mois #15808 par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:Password - New ADUser
Bonjour,

Célizior écrit:

Bonjour, je suis tombé ici en faisant une recherche pour créer des utilisateurs AD, avec des password differents, sans ForEach-Object (ça a l'air de ne pas courrir les rues :P )


Je n'en suis pas si certain, il faut simplement le savoir :)

Sur ce Forum, nous en avons déjà parlé plusieurs fois.

Un exemple ici .

Toutefois, il est franchement dommage que tu n'utilises pas la méthode décrite dans cette présentation de PowerShell (Microsoft TechDays 2011 / Arnaud PETITJEAN et Jacques BARATHON).

Voir notamment vers la 49 ème / 50 ème minute ... Mais je te conseille de tout regarder car toute la session est intéressante (et en plus, en Français !).


Même remarque ici .

Sur le Technet de Microsoft , on en parle aussi.

Method 3: Use the Import-CSV cmdlet with the New-ADUser cmdlet to create multiple Active Directory user objects. To do this, use the Import-CSV cmdlet to create the custom objects from a comma-separated value (CSV) file that contains a list of object properties. Then pass these objects through the pipeline to the New-ADUser cmdlet to create the user objects.


Dans l'exemple que j'avais posté, j'utilise une boucle foreach, mais il ne s'agit pas de l'alias de 'Foreach-Object'.

J'ai fait des tests avec Measure-Command. Pour 10 utilisateurs, avec un ForEach-Object il faut compter 1,2s. Avec cette Methode 0,8s


Oui, lorsqu'une Cmdlet sait gérer le pipeline et donc récupérer une ou plusieurs propriétés par leur nom , pour chaque objet qui lui est passé via le pipe, il n'est pas utile d'utiliser le 'Foreach-Object'.

Si tu souhaites développer toi même des fonctions qui savent le gérer, tu trouveras des informations complémentaires dans le tuto de Laurent Dardenne : Les fonctions et scripts avancés sous PowerShell .

@ +

Matthew BETTON<br><br>Message édité par: Matthew BETTON, à: 30/08/13 17:55

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

Plus d'informations
il y a 12 ans 6 mois #15810 par RIOUAL Benjamin
Réponse de RIOUAL Benjamin sur le sujet Re:Password - New ADUser
Matthew BETTON écrit:

Sur ce Forum, nous en avons déjà parlé plusieurs fois.

Un exemple ici .

Toutefois, il est franchement dommage que tu n'utilises pas la méthode décrite dans cette présentation de PowerShell (Microsoft TechDays 2011 / Arnaud PETITJEAN et Jacques BARATHON).

Voir notamment vers la 49 ème / 50 ème minute ... Mais je te conseille de tout regarder car toute la session est intéressante (et en plus, en Français !).


Même remarque ici .

Sur le Technet de Microsoft , on en parle aussi.


Et bien ... oui et non, le probléme que j'avais rencontré était vraiment lié à AccountPassword, comme il doit être converti en SecureString.
[code:1]$NewUsers | New-ADUser -ChangePasswordAtLogon 1 -Enabled 1 -AccountPassword (ConvertTo-SecureString $_.Password -AsPlainText -Force)[/code:1]

J'avais essayé comme ci-dessus mais ça hurlait plus ou moins que $_.Password était une variable vide.

Et merci pour le lien vers la présentation de TechDays ;)

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

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