Question Récupérer le mot de passe généré aléatoirement.

Plus d'informations
il y a 1 an 11 mois - il y a 1 an 10 mois #32249 par Sébastien
Bonjour,
Je travail sur un script pour changer tous les 85 jours le mots de passe de quelques comptes AD.
J'ai trouvé ce qu'il me faut pour générer un mot de passe aléatoire avec différentes conditions et la commande pour changer le mot de passe dans l'AD.
Cela fonctionne très bien car dans l'AD dans pwdlastSet je vois bien l'heure du changement.

Le souci c'est comment récupérer le mot de passe généré ? Je ne peux pas relancer ma variable $newpdm car il va me refaire un nouveau mot de passe.
J'ai donc créé une variable $newmdpuser mais je ne sais pas comment faire pour récupérer ce nouveau code.
Le but du script et de l'éxécuter sur 4 comptes et d'envoyer dans un mail le nom de l'utilisateur suivi du nouveau mot de passe à côté.
Voici mon code.
Merci de votre aide.
function New-RandomPassword {
    [CmdletBinding()]
    Param
    (
        [Parameter(Mandatory=$true)][int]$Length,
        [Parameter(Mandatory=$false)][int]$Uppercase=1,
        [Parameter(Mandatory=$false)][int]$Digits=1,
        [Parameter(Mandatory=$false)][int]$SpecialCharacters=1
    )
    Begin {
        $Lowercase = $Length - $SpecialCharacters - $Uppercase - $Digits
        $ArrayLowerCharacters = @('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z')
        $ArrayUpperCharacters = @('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z')
        $ArraySpecialCharacters = @('_','*','$','%','#','?','!','-')
    }
    Process {
            [string]$NewPassword = $ArrayLowerCharacters | Get-Random -Count $Lowercase
            $NewPassword += 0..9 | Get-Random -Count $Digits
            $NewPassword += $ArrayUpperCharacters | Get-Random -Count $Uppercase
            $NewPassword += $ArraySpecialCharacters | Get-Random -Count $SpecialCharacters

            $NewPassword = $NewPassword.Replace(' ','')

            $characterArray = $NewPassword.ToCharArray()  
            $scrambledStringArray = $characterArray | Get-Random -Count $characterArray.Length    
            $NewRandomPassword = -join $scrambledStringArray
    }
    End {
            Return $NewRandomPassword
    }
}
#Selectionner la ligne et lancer éxécuter pour le test.
#Variable newmdp pour récup le nouveau mot de passe
$newmdp = New-RandomPassword -Length 15 -Uppercase 3 -Digits 2 -SpecialCharacters 2

#Changement du mot de passe pour les utilisateurs avec la variable $newmdp pour changer le mot de passe dans l'AD
$newmdpuser = Set-ADAccountPassword -Identity test.mdp -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "$newmdp" -Force)
Dernière édition: il y a 1 an 10 mois par Sébastien.

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

Plus d'informations
il y a 1 an 11 mois #32252 par Sébastien
La nuit porte conseil, j'ai eu l'idée de faire une variable avec la variable newmdp ainsi maintenant avec la variable $newmdpuser je peux récup le mot de passe généré.
function New-RandomPassword {
    [CmdletBinding()]
    Param
    (
        [Parameter(Mandatory=$true)][int]$Length,
        [Parameter(Mandatory=$false)][int]$Uppercase=1,
        [Parameter(Mandatory=$false)][int]$Digits=1,
        [Parameter(Mandatory=$false)][int]$SpecialCharacters=1
    )
    Begin {
        $Lowercase = $Length - $SpecialCharacters - $Uppercase - $Digits
        $ArrayLowerCharacters = @('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z')
        $ArrayUpperCharacters = @('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z')
        $ArraySpecialCharacters = @('_','*','$','%','#','?','!','-')
    }
    Process {
            [string]$NewPassword = $ArrayLowerCharacters | Get-Random -Count $Lowercase
            $NewPassword += 0..9 | Get-Random -Count $Digits
            $NewPassword += $ArrayUpperCharacters | Get-Random -Count $Uppercase
            $NewPassword += $ArraySpecialCharacters | Get-Random -Count $SpecialCharacters

            $NewPassword = $NewPassword.Replace(' ','')

            $characterArray = $NewPassword.ToCharArray()  
            $scrambledStringArray = $characterArray | Get-Random -Count $characterArray.Length    
            $NewRandomPassword = -join $scrambledStringArray
    }
    End {
            Return $NewRandomPassword
    }
}
#Selectionner la ligne et lancer éxécuter pour le test.
#Variable newmdp pour récup le nouveau mot de passe
$newmdp = New-RandomPassword -Length 15 -Uppercase 3 -Digits 2 -SpecialCharacters 2
$newmdpuser = $newmdp

#Changement du mot de passe pour les utilisateurs avec la variable $newmdp pour changer le mot de passe dans l'AD
Set-ADAccountPassword -Identity test.mdp -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "$newmdpuser" -Force)

#Affichage du mot de passe généré.
write-host $newmdpuser

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

Plus d'informations
il y a 1 an 10 mois - il y a 1 an 10 mois #32260 par Sébastien
Bonjour,
Je continue d'améliorer mon script mais j'ai un petit blocage.
En effet je souhaite ajouter une condition pour l'envoi d'un mail si le changement est KO et si OK ou KO continuer pour les autres comptes et envoyer le mail à la fin avec les comptes dont le mot de passe à changé.
je vois pas trop comment faire je pense qu'il faut jouer avec des if est des else mais j'arrive pas à comprendre.
Actuellement mon script envoi le mail uniquement si l'user4 et OK.
Merci de votre aide.
#Changement du mot de passe dans l'AD avec la variable $user pour l'utilisateur et $newmdpuser pour le nouveau mot de passe. Condition en cas d'échec avec envoi d'un mail.
If ((Set-ADAccountPassword -Identity "$user1" -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "$newmdpuser1" -Force)) -eq $True) {Write-Host "Erreur du changement du mot de passe pour le compte $user1" (Send-MailMessage -From 'mail@mail.com' -To 'mail@mail.com' -Subject 'ECHEC: Changement mot de passe' -Body "Echec du changement des mots de passe pour $user1" -SmtpServer 'serveursmtp' -Port 29 -BodyAsHtml -Encoding $enc)}
else{Write-Host "Changement du mot de passe OK pour $user1"}
If ((Set-ADAccountPassword -Identity "$user2" -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "$newmdpuser2" -Force)) -eq $True) {Write-Host "Erreur du changement du mot de passe pour le compte $user2" (Send-MailMessage -From 'mail@mail.com' -To 'mail@mail.com' -Subject 'ECHEC: Changement mot de passe' -Body "Echec du changement des mots de passe pour $user2" -SmtpServer 'serveursmtp' -Port 29 -BodyAsHtml -Encoding $enc)}
else{Write-Host "Changement du mot de passe OK pour $user2"}
If ((Set-ADAccountPassword -Identity "$user3" -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "$newmdpuser3" -Force)) -eq $True) {Write-Host "Erreur du changement du mot de passe pour le compte $user3" (Send-MailMessage -From 'mail@mail.com' -To 'mail@mail.com' -Subject 'ECHEC: Changement mot de passe' -Body "Echec du changement des mots de passe pour $user3" -SmtpServer 'serveursmtp' -Port 29 -BodyAsHtml -Encoding $enc)}
else{Write-Host "Changement du mot de passe OK pour $user3"}
If ((Set-ADAccountPassword -Identity "$user4" -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "$newmdpuser4" -Force)) -eq $True) {Write-Host "Erreur du changement du mot de passe pour le compte $user4" (Send-MailMessage -From 'mail@mail.com' -To 'mail@mail.com' -Subject 'ECHEC: Changement mot de passe' -Body "Echec du changement des mots de passe pour $user4" -SmtpServer 'serveursmtp' -Port 29 -BodyAsHtml -Encoding $enc)}
else{Write-Host "Changement du mot de passe OK pour $user4"

        #Envoi des nouveaux mdp par mail
        write-host "Envoi du mail"
        #Variable pour le sujet du mail pour inclure des variable.
        #'n permet de faire un retour à la ligne.
        $Sujet = "Bonjour,</br>Voici les nouveaux mot de passe pour les comptes:</br></br>$user1 => $newmdpuser1</br>$user2 => $newmdpuser2</br>$user3 => $newmdpuser3</br>$user4 => $newmdpuser4</br></br>Cordialement,</br>Direction des système d'information Groupe Legendre"
        Send-MailMessage -From "mail@mail.com" -To "mail@mail.com" -Cc "mail@mail.com" -Subject " Nouveau mot de passe" -SmtpServer "smtprelai" -Body "$Sujet" -Port 29 -BodyAsHtml -Encoding $enc

        #Envoi de mail pour informer la DSI du changement du mot de passe.
        write-host "Envoi du mail en interne"
        $corps="Bonjour,</br>Les mots de passe ont étaient changé.</br></br>$user1 => $newmdpuser1</br>$user2 => $newmdpuser2</br>$user3 => $newmdpuser3</br>$user4 => $newmdpuser4</br>"
        Send-MailMessage -From 'mail@mail.com' -To 'mail@mail.com' -Subject 'Changement mot de passe' -Body $corps -SmtpServer 'smtprelai' -Port 29 -BodyAsHtml -Encoding $enc
    }
Dernière édition: il y a 1 an 10 mois par Sébastien.

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

Plus d'informations
il y a 1 an 10 mois - il y a 1 an 10 mois #32270 par Philippe
salut Sébastien

d'abord sans vouloir critiquer ton script, je ferais une boucle pour le changement de mot de passe de tes utilisateurs, mais ce n'est qu'un conseil ! :)

pour ta demande il te faut deux variables :
- une variable qui indiquera si tu doit envoyer le mail d'erreur (par exemple $ok = 1 que tu place dans les if dans la partie erreur)
- une variable qui va contenir tes compte en erreur (par exemple $compte += $user1 que tu place dans les if dans la partie erreur)
sur cette dernière variable j'ai mis un += pour indiquer qu'il doit rajouter le compte dans la variable

tu n'a plus qu'a rajouter $compte à ton mail d'erreur :)

n'oublie pas d'initialiser les variables en début de script
$ok = 0
$compte = ""
Dernière édition: il y a 1 an 10 mois par Philippe.

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

Plus d'informations
il y a 1 an 10 mois #32277 par Sébastien
Bonjour Philippe,
Merci pour ta réponse. En effet je voulais aussi faire une boucle mais je suis pas encore assez bon en powershell et j'ai un peu de mal.

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

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