Question Fonction mot de passe

  • witness57
  • Auteur du sujet
  • Visiteur
  • 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..

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

  • witness57
  • Auteur du sujet
  • Visiteur
  • 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:
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.

Plus d'informations
il y a 3 ans 2 mois - il y a 3 ans 2 mois #31041 par Laurent Dardenne
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 :
$Password -replace '0',(Get-Random -Minimum 1 -Maximum 9) -replace 'O',[char](Get-Random -Minimum 65 -Maximum 78)
On le retrouve 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)

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
  • 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:
$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
  • Visiteur
il y a 3 ans 2 mois - il y a 3 ans 2 mois #31044 par witness57
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
  • 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:
$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
Propulsé par Kunena