Résolu Script réinitialisation mot de passe Active Directory

Plus d'informations
il y a 1 an 1 mois #33703 par BOURGOT
Bonjour, 

Pour ce qui n'aurais pas lu ma petite présentation je vous résume un peu ma présence avant de vous poser ma question/mes questions sur le sujet de ce post : Je suis en reconversion professionnelle et j'effectue une formation de technicien maintenance, support en informatique je suis actuellement sur différents projets professionnels et mon dernier projet implique pas mal de script PowerShell ( à savoir que PowerShell est pour moi que de la découverte) 

Venons au pourquoi du comment  

Je dois effectuer différents scripts dont un concernant la requête d'une réinitialisation de mot de passe pour tous les users de mon Active Directory, ce mot de passe devra être modifier à la prochaine connexion sur sa session/profil AD.
J'ai trouvé une piste mais qui pour moi consiste à un user défini et nommé à savoir  :  
Set-ADuser -Identity UsersAD -ChangePasswordatLogon $true

Auriez vous plus de précisons/renseignements sur la façon de réaliser ce type de script ? 
Vous remerciant par avance.

Jérémy
 

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

Plus d'informations
il y a 1 an 1 mois #33704 par Fabien
Bonjour Jérémy,

Pour ton script, il faut rechercher toutes les personnes de l'AD et ensuite faire une boucle pour chaque utilisateur.
Dans cette boucle, tu peux définir un mot de passe et activer le changement à la prochaine ouverture de session.
Tu peux même chiffrer le mot de passe dans le script pour plus de sécurité.

Voilà un exemple :
#Importer le module ActiveDirectory
Import-module ActiveDirectory

#Recherche les utilisateurs dans l'AD
$users = Get-ADUser -Filter *

#Mot de passe à chiffrer dans le script
$securepwd = ConvertTo-SecureString "Ijk@d1f21Rf%fdK" -AsPlainText -Force

foreach ($user in $users){
    
    #Modifiaction du mot de passe
    Set-ADAccountPassword -Identity $User -Reset -NewPassword $securepwd

    #Changement du mot de passe à la prochaine ouverture de session
    Set-ADUser -Identity $user -ChangePasswordAtLogon $true

}

Fabien

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

Plus d'informations
il y a 1 an 1 mois #33706 par BOURGOT
Bonsoir Fabien, 
Merci pour votre retour, je vais donc regarder de plus près votre orientation  .

 

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

Plus d'informations
il y a 1 an 1 mois #33709 par BOURGOT
J'ai étudié un peu l'orientation de cette proposition, si je comprend bien je vais mettre un mot de passe commun à tous les comptes utilisateurs et ce mot de passe sera remplacé lors de leur prochaine connexion, je vais essayer de mettre un peu plus de "sécurité"  dans ce script, disons récupérer des informations et créer un fichier de logs avec une proposition d'un motif pour le changement de mot de passe, je travail donc un peu sur ce script  : 

# Information à récupérer pour le bon déroulement du script
$date  = "Date d'utilisation du script le " + (Get-Date -Format "dd/MM/yy à HH:mm")
$mdp   = "P@ssword!" + (Get-Date -Format "ddMMyy")
$login = Read-Host "Écrire le login de l'utilisateur"
$Name  = (Get-ADUser -Identity $login).Name
$fichier = "C:\Scripts\Logs\LOG pour les MDP.txt"
$Documents = "C:\Scripts"
# Motif du changement de mot de passe.
# Utilisation d'une boucle while et switch.

do {
   Write-Host " [1] - Réinitialisation suite à un oubli de mot de passe "
   Write-Host " [2] - Soupçon de compromission du mot de passe "
   Write-Host " [3] - Mesures de précaution après le départ d'un employé "
   Write-Host " [4] - Détection de mots de passe compromis "
   Write-Host " [5] - Divulgation accidentelle du mot de passe "

   $motif = Read-Host "Choisissez le motif : 1-5"
} while ($motif -notmatch '^[1-5]$')

Switch ($motif) {
    1 { $motif = "Réinitialisation suite à un oubli de mot de passe" }
    2 { $motif = "Soupçon de compromission du mot de passe" }
    3 { $motif = "Mesures de précaution après le départ d'un employé" }
    4 { $motif = "Détection de mots de passe compromis" }
    5 { $motif = "Divulgation accidentelle du mot de passe" }
}

# Réinitialisation du mot de passe
Set-ADAccountPassword -Identity $login -Reset -NewPassword (ConvertTo-SecureString -AsPlainText $mdp -Force)

# Configuration du changement de mot de passe à la prochaine connexion
Set-ADUser -Identity $login -ChangePasswordAtLogon $True

#déverrouiller un compte utilisateur bloqué.
Unlock-ADAccount -Identity $login

# Enregistrement des informations dans le fichier txt
Add-Content $fichier
@"
=====================================================================
$date
$Name
$login
$motif
=====================================================================
"@  

# Fin de script avec demande s'il faut le rejouer
# Utilisation de l’instruction Switch pour la sélection et d'une boucle Do-while pour sécuriser le choix avec l’instruction If Else pour rejouer le script ou non)

do
{
   Write-Host " [o] - Oui "
   Write-Host " [n] - Non " 
   $fin = Read-Host "voulez-vous réinitialiser un autre mot de passe ?"
}
while ($fin -notmatch '^[on]$')

Switch ($fin)

   o { $fin = "oui" }
   n { $fin = "non" }
}

if ($fin -eq "oui")
{
   cd $Documents
   .\mdp.ps1
}
else
{
   ($fin -eq "non")
}


Si je comprend bien ce script, je créée une base d'informations/données pour mener à  bien le changement de mot de passe, ensuite une proposition à choix multiple afin d'orienter la raison de ce changement/réinitialisation de mot de passe , puis viens la réinitialisation, configuration et enregistrement dans un fichier texte toutes ces informations. L'étape pour rejouer le script me parait être un plus, que pensez vous de ce script ? y aurait-il des modifications à apporter ?

Vous remerciant par avance, bon week-end à vous tous. 


PS: Est-il possible de représenter le script saisie dans le forum correspondant à la réalité plutôt qu'un simple copier/coller de texte brut 
Navré pour ces questions qui peuvent vous paraître "stupides"   

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

Plus d'informations
il y a 1 an 1 mois #33714 par Arnaud Petitjean
Bonjour,

PS: Est-il possible de représenter le script saisie dans le forum correspondant à la réalité plutôt qu'un simple copier/coller de texte brut 

Il faut simplement mettre autour de ton script le mot "Code" entre crochets et en fin de script pareil mais avec un slash après le crochet. Un peu comme en HTML.
Sinon dans la barre de menu de l'éditeur de texte lorsque tu écris ton message l'insertion se fait toute seule. C'est l'icône de la 1ere rangée tout au bout à droite.

Arnaud 

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 ?

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

Plus d'informations
il y a 1 an 1 mois #33715 par Arnaud Petitjean
Personnellement je n'aime pas trop les scripts avec des entrées de menu. Mais bon, si tu y tiens... ;)

Si tu veux monter d'un cran le niveau de sécurité, tu devrais générer un mot de passe unique et aléatoire par utilisateur. 

Essaie cette fonction : 
function Generate-SecureRandomPassword {
    param (
        [int]$Length = 12
    )

    $secureRandomBytes = New-Object byte[] $Length
    $rng = New-Object System.Security.Cryptography.RNGCryptoServiceProvider
    $rng.GetBytes($secureRandomBytes)

    $characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_'
    $password = ''
    foreach ($byte in $secureRandomBytes) {
        $password += $characters[$byte % $characters.Length]
    }
    $password
}

# Exemple d'utilisation avec une longueur de mot de passe de 16 caractères
$generatedPassword = Generate-SecureRandomPassword -Length 16
"Mot de passe généré : $generatedPassword"

Arnaud

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 ?

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

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