Question
Fonction mot de passe
- witness57
- Auteur du sujet
- Visiteur
il y a 3 ans 2 mois #31034
par witness57
Réponse de witness57 sur le sujet Fonction mot de passe
Du coup j'ai fait un truc pour savoir quel type ça me renvoie et voilà ce que j'ai trouvé:
Lorsque je lance mon script avec la fonction Random-password, j'obtiens ça en enlevant le paramètre -NoTypeInformation de la commande export-csv:
#TYPE System.Management.Automation.PSCustomObject
Mais quand je le lance avec la modification, j'obtiens ça:
#TYPE System.String
"Length"
"8"
"8"
Le problème vient donc bien du type..
Lorsque je lance mon script avec la fonction Random-password, j'obtiens ça en enlevant le paramètre -NoTypeInformation de la commande export-csv:
#TYPE System.Management.Automation.PSCustomObject
Mais quand je le lance avec la modification, j'obtiens ça:
#TYPE System.String
"Length"
"8"
"8"
Le problème vient donc bien du type..
Connexion ou Créer un compte pour participer à la conversation.
- witness57
- Auteur du sujet
- Visiteur
il y a 3 ans 2 mois - il y a 3 ans 2 mois #31035
par witness57
Réponse de witness57 sur le sujet Fonction mot de passe
Pour que ce soit plus clair, voici le script avec lequel l'export-csv fonctionne:
Et voici celui avec lequel ça ne fonctionne plus:
Function get-RandomPassword ($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 "C:\Users\Administrateur\Desktop\importusers.csv" -delimiter ";"
$NewUsers = $users | ForEach-Object {
$sn = $_.Nom
$givenname = $_.Prenom
$ou = "OU=importusers,DC=Mondomaine,DC=local"
$description = $_.Description
$SAM = $givenname.Substring(0,1).ToLower() + $sn.ToLower()
$CN = $givenname + " " + $sn
$displayName = $CN
$UPN = $SAM + "@Mondomaine.local"
$userAccountControl = 66050
$CannotChangePassword = 1
$HomeDrive = "U"
$HomeDirectory = "\\test\test"
$ProfilePath = "C:\users"
$ScriptLogon = "test"
$Password = get-RandomPassword
$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]@{
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
Enabled = $Enabled
}
}
$NewUsers | Export-Csv -path "C:\Users\Administrateur\Desktop\export.csv" -Append -NoTypeInformation -Delimiter ";"
Et voici celui avec lequel ça ne fonctionne plus:
$users = import-csv -path "C:\Users\Administrateur\Desktop\importusers.csv" -delimiter ";"
$NewUsers = $users | ForEach-Object {
$sn = $_.Nom
$givenname = $_.Prenom
$ou = "OU=importusers,DC=Mondomaine,DC=local"
$description = $_.Description
$SAM = $givenname.Substring(0,1).ToLower() + $sn.ToLower()
$CN = $givenname + " " + $sn
$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 -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]@{
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
Enabled = $Enabled
}
}
$NewUsers | Export-Csv -path "C:\Users\Administrateur\Desktop\export.csv" -Append -NoTypeInformation -Delimiter ";"
Dernière édition: il y a 3 ans 2 mois par witness57.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 3 ans 2 mois - il y a 3 ans 2 mois #31041
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Fonction mot de passe
Salut,
ton code précédent émet le mot de passe dans le pipeline :
On le retrouve donc dans la collection $NewUsers.
Un oubli sûrement :
ton code précédent émet le mot de passe dans le pipeline :
$Password -replace '0',(Get-Random -Minimum 1 -Maximum 9) -replace 'O',[char](Get-Random -Minimum 65 -Maximum 78)
Un oubli sûrement :
$Password= $Password -replace '0',(Get-Random -Minimum 1 -Maximum 9) -replace 'O',[char](Get-Random -Minimum 65 -Maximum 78)
Tutoriels PowerShell
Dernière édition: il y a 3 ans 2 mois par Laurent Dardenne. Raison: coquille
Connexion ou Créer un compte pour participer à la conversation.
- witness57
- Auteur du sujet
- Visiteur
il y a 3 ans 2 mois #31043
par witness57
Réponse de witness57 sur le sujet Fonction mot de passe
C'est bon j'ai trouvé en tâtonnant et en fouillant sur le net.
Bien que je n'en connaisse pas la cause exacte, lorsque j'ai appliqué ton morceau de code pour la génération du mot de passe, l'export-csv ne me renvoyait plus le contenu attendu, à savoir les entêtes de champs avec les valeurs qui vont bien pour chaque réitération, mais seulement la propriété Length avec comme valeur 8.
Il semble que ce soit lié au type de données.
J'ai finalement ajouté une variable au PSCustomObject et appliqué un pipe Export-csv à cette même variable et ça fonctionne, j'obtiens bien résultats attendu:
Bien que je n'en connaisse pas la cause exacte, lorsque j'ai appliqué ton morceau de code pour la génération du mot de passe, l'export-csv ne me renvoyait plus le contenu attendu, à savoir les entêtes de champs avec les valeurs qui vont bien pour chaque réitération, mais seulement la propriété Length avec comme valeur 8.
Il semble que ce soit lié au type de données.
J'ai finalement ajouté une variable au PSCustomObject et appliqué un pipe Export-csv à cette même variable et ça fonctionne, j'obtiens bien résultats attendu:
$myObject = [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 = ConvertTo-SecureString $Password -AsPlainText -Force
Enabled = $Enabled
}
$myObject | Export-csv -path "C:\Users\Administrateur.INDP57\Desktop\export.csv" -Append -NoTypeInformation -Delimiter ";"
}
Connexion ou Créer un compte pour participer à la conversation.
- witness57
- Auteur du sujet
- Visiteur
il y a 3 ans 2 mois - il y a 3 ans 2 mois #31044
par witness57
Salut Laurent,
J'étais en train d'écrire mon message du dessus pendant que tu répondais du coup.
En effet, j'ai fait une erreur comme tu l'indiques, j'ai corrigé et ça fonctionne.
Ça explique donc pourquoi mon fichier csv me renvoyait la propriété Length avec une valeur 8, puisque le mot de passe fait 8 caractères, et ça explique aussi pourquoi il me renvoyait cette propriété comme lorsqu'il s'agit d'un type string.
Du coup ma solution fonctionne aussi mais je ne sais pas trop pourquoi, bien qu'elle soit bien moins conforme et sans doute est-ce du bricolage.
Pas grave, ça m'a permis de me pencher sur d'autres notions.
Merci
Réponse de witness57 sur le sujet Fonction mot de passe
Salut,
ton code précédent émet le mot de passe dans le pipeline :
$Password -replace '0',(Get-Random -Minimum 1 -Maximum 9) -replace 'O',[char](Get-Random -Minimum 65 -Maximum 78)
On le retouve donc dans la collection $NewUsers.
Un oubli sûrement :
$Password= $Password -replace '0',(Get-Random -Minimum 1 -Maximum 9) -replace 'O',[char](Get-Random -Minimum 65 -Maximum 78)
Salut Laurent,
J'étais en train d'écrire mon message du dessus pendant que tu répondais du coup.
En effet, j'ai fait une erreur comme tu l'indiques, j'ai corrigé et ça fonctionne.
Ça explique donc pourquoi mon fichier csv me renvoyait la propriété Length avec une valeur 8, puisque le mot de passe fait 8 caractères, et ça explique aussi pourquoi il me renvoyait cette propriété comme lorsqu'il s'agit d'un type string.
Du coup ma solution fonctionne aussi mais je ne sais pas trop pourquoi, bien qu'elle soit bien moins conforme et sans doute est-ce du bricolage.
Pas grave, ça m'a permis de me pencher sur d'autres notions.
Merci
Dernière édition: il y a 3 ans 2 mois par witness57.
Connexion ou Créer un compte pour participer à la conversation.
- witness57
- Auteur du sujet
- Visiteur
il y a 3 ans 2 semaines #31329
par witness57
Réponse de witness57 sur le sujet Fonction mot de passe
Hello,
Je reviens sur cette ligne:
Je voudrais savoir si le fait de pouvoir utiliser les index (ou arguments ?) {0}{1} implique nécessairement l'utilisation de l'opérateur -f ?
Et aussi savoir si il y a une raison à mettre simple quote plutôt que double, car d'après mes tests ça fonctionne dans les deux cas.
Merci d'avance.
Je reviens sur cette ligne:
$pwd = '{0}{1}' -f (get-random -Minimum 100000 -Maximum 999999), [char](get-random -Minimum 65 -Maximum 90)
Je voudrais savoir si le fait de pouvoir utiliser les index (ou arguments ?) {0}{1} implique nécessairement l'utilisation de l'opérateur -f ?
Et aussi savoir si il y a une raison à mettre simple quote plutôt que double, car d'après mes tests ça fonctionne dans les deux cas.
'{0}{1}' -f "a","b"
ab
"{0}{1}" -f "a","b"
ab
Merci d'avance.
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.130 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Fonction mot de passe