Question Fonction mot de passe

Plus d'informations
il y a 2 ans 9 mois #31011 par witness
Fonction mot de passe a été créé par witness
Bonjour,

Cette fonction me permet de générer des mots de passe aléatoire:
Function get-randompassword ($length = 8){
    $punc = 46..46
    $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()}

Seulement, l'ordre des caractère est aussi aléatoire.
Ce que j'aimerais, c'est avoir 7 chiffres aléatoire + une lettre majuscule.
J'ai donc enlever la ponctuation et les lettres en minuscules.
Function get-randompassword ($length = 8){
    $digits = 49..57
    $letters = 65..90
    $password = get-random -count $length `
    -input ($digits + $letters) | % -begin { $aa = $null } `
    -process {$aa += [char]$_} `
    -end {$aa} 
    return $password.ToString()}

J'obtiens donc:
get-randompassword -length 8
931T7N8G

Ce qui est normal car à aucun moment j'ai défini l'ordre des caractères, et c'est sans doute là que ça se complique...

Il faudrait que je puisse lui dire que les 7 premiers caractères doivent être des chiffres ( j'ai enlevé le zéro aussi car il y a des petits qui doivent mettre les mots de passe et ils confondent souvent le zéro avec la lettre O).et le dernier une lettre en majuscule.

Merci merci.

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

Plus d'informations
il y a 2 ans 9 mois #31012 par witness
Réponse de witness sur le sujet Fonction mot de passe
Et aussi si vous pouviez m'expliquer à quoi sert ce symbole ` qu'il y à la fin de ces lignes
$password = get-random -count $length `
-input ($digits + $letters) | % -begin { $aa = $null } `
-process {$aa += [char]$_} `

Merci

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

Plus d'informations
il y a 2 ans 9 mois #31016 par Arnaud Petitjean
Réponse de Arnaud Petitjean sur le sujet Fonction mot de passe
Hello !

J'avais une autre proposition pour générer un mot de passe composé de 7 chiffres et 1 caractère. C'est plus court que ta proposition mais ça ne répond pas complètement à ton besoin car des zéros peuvent s'y trouver :
'{0}{1}' -f (get-random -Minimum 100000 -Maximum 999999), [char](get-random -Minimum 65 -Maximum 90)

Ceci étant dit, on pourrait très bien faire une petite variante qui remplacerait les zéros s'il y en avait :
$pwd = '{0}{1}' -f (get-random -Minimum 100000 -Maximum 999999), [char](get-random -Minimum 65 -Maximum 90)
$pwd -replace '0',(Get-Random -Minimum 1 -Maximum 9)

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Les utilisateur(s) suivant ont remercié: witness

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

Plus d'informations
il y a 2 ans 8 mois #31029 par witness
Réponse de witness sur le sujet Fonction mot de passe
Salut Arnaud,
Merci pour cette solution, j'avoue qu'elle est plus simple pour ce que je veux.
J'ai complété ton code car je ne voulais pas non plus de la lettre O
En effet, les petits pourraient confondre avec zéro
Du coup ça donne ça:
$pwd = '{0}{1}' -f (get-random -Minimum 1000000 -Maximum 9999999), [char](get-random -Minimum 65 -Maximum 90)
$pwd -replace '0',(Get-Random -Minimum 1 -Maximum 9) -replace 'O',[char](Get-Random -Minimum 65 -Maximum 78)
Est-ce que j'ai bon ?
Je n'étais pas sûr, en mettant deux fois l'opérateur de remplacement à la suite, que ça fonctionnerait, mais ça à l'air de prendre d'après mes tests.
Je suis resté toute la nuit à lancer la commande et je n'ai pas vu un seul O passé   (je déconne au cas où).
Cela dit, je doute que pour exclure un caractère, ce soit la meilleure solution, c'est une combine qui semble fonctionner mais ce n'est pas disons très propre car pour être complète cette commande devrait exclure la lettre O et la remplacer par toutes les autres lettres en majuscule et ne pas s'arrêter à N 
Merci.

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

Plus d'informations
il y a 2 ans 8 mois #31032 par witness
Réponse de witness sur le sujet Fonction mot de passe
Arnaud,

J'ai intégré ton bloc de code à mon script en enlevant la fonction Random-password, seulement je rencontre un problème maintenant lors de la création de mon fichier csv en sortie.
En effet, au lieu d'avoir mes champs dans mon export csv, j'obtiens ceci:

"Length"
"8"
"8"

Voici mon script:
$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 ";"

Je ne sais pas pourquoi il m'indique le champ Length avec la valeur 8, ça doit correspondre à quelque chose mais quoi......

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 #31033 par witness
Réponse de witness sur le sujet Fonction mot de passe
J'ai trouvé cette réponse à mon problème sur un forum:

" Parce que [code]Export-Csv prend des objets et génère des propriétés. La seule propriété d'un String[ ] est Length, donc le fichier CSV ne contient que des Lengths."

Pourtant j'ai juste changé la manière dont est généré le mot de passe dans mon script, la configuration de mon export devrait fonctionner.
Dernière édition: il y a 2 ans 8 mois par witness.

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

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