MAIN MENU
Le blogue Devolutions

Annonces, mises à jour et analyses de Devolutions

Devolutions PowerShell Universal Active Directory password reset illustration for the blog.

Créer un formulaire de réinitialisation de mot de passe Active Directory en libre-service dans PowerShell Universal

Réinitialisez un mot de passe Active Directory avec Set-ADAccountPassword, confirmez la valeur dans un script ou New-UDForm, appelez ResetPassword.ps1 avec Invoke-PSUScript, ou déposez un Portal Widget sur une page Portal v5.

Dans cet article, nous verrons comment créer un formulaire de réinitialisation de mot de passe Active Directory en libre-service dans PowerShell Universal. Il y a plusieurs façons d’y arriver. Nous examinerons l’utilisation d’un script, la création d’un formulaire dans une appli qui appelle le script, puis comment le faire dans PowerShell Universal v5 avec les Portal Widgets.

Script de réinitialisation de mot de passe Active Directory

La première tâche à accomplir est d’utiliser l’applet de commande Set-ADAccountPassword pour réinitialiser le mot de passe. Cette applet de commande est disponible dans le module ActiveDirectory. PowerShell Universal devra avoir accès à Active Directory pour exécuter ce script. Vous pouvez aussi configurer des identifiants Run As pour utiliser un autre compte.

Notre script acceptera le mot de passe et un mot de passe de confirmation pour s’assurer qu’ils correspondent. Nous utiliserons le contexte de l’utilisateur actuel pour décider quel compte réinitialiser. En utilisant SecureString, nous faisons en sorte que l’interface affiche le mot de passe comme un champ de mot de passe. Parameter permet de définir Mandatory pour que l’utilisateur fournisse les paramètres requis. La propriété HelpMessage affiche une description du paramètre lorsque l’utilisateur survole le paramètre dans le formulaire. La variable $UAJob est une variable intégrée qui contient de l’information sur la tâche actuelle, y compris l’identité de l’utilisateur.

param(
    [Parameter(Mandatory)]
    [SecureString]$Password,
    [Parameter(Mandatory, HelpMessage = "Confirm New User Password")]
    [SecureString]$ConfirmPassword
)

$Password = ConvertFrom-SecureString -SecureString $Password -AsPlainText
$ConfirmPassword = ConvertFrom-SecureString -SecureString $ConfirmPassword -AsPlainText

if ($Password -ne $ConfirmPassword) {
    throw 'Passwords do not match'
}

$Password = ConvertTo-SecureString $Password -AsPlainText -Force

Set-ADAccountPassword -Identity $UAJob.Identity.Name -NewPassword $Password

Pour créer un script dans PowerShell Universal, cliquez sur Automation > Scripts puis sur Create New Script. Vous pouvez ensuite coller le script dans l’éditeur. Une fois que c’est fait, vous pouvez essayer d’exécuter le script. Une boîte de dialogue affichera les paramètres à fournir.

PowerShell Universal run dialog showing password and confirm password parameters.
Paramètres de mot de passe à l’exécution du script de réinitialisation

Si vous exécutez le script avec des mots de passe qui ne correspondent pas, vous verrez un message d’erreur.

PowerShell Universal job error stating that the passwords do not match.
Erreur de mots de passe différents dans la console d’administration

Cette approche a quelques inconvénients. D’abord, la vérification du mot de passe a lieu après la soumission du formulaire et l’exécution du script. L’utilisateur devra donc ressaisir le mot de passe s’ils ne correspondent pas. Ensuite, l’utilisateur devra utiliser la console d’administration pour exécuter le script. C’est un peu lourd pour les utilisateurs non techniques. Dans la section suivante, nous verrons comment créer un formulaire dans une appli pour simplifier le processus.

Formulaire de réinitialisation de mot de passe Active Directory dans une appli Universal

Pour créer un formulaire dans une appli, cliquez sur User Interfaces > Apps puis sur Create New App (en version v5, ce sera sous le nœud Apps). Une fois l’appli créée, vous devrez définir le formulaire et appeler Invoke-PSUScript pour exécuter le script.

New-UDApp -Title 'Active Directory Self Service Password Reset' -Content {
    New-UDForm -Content {
        New-UDTextbox -Type password -Id Password -Label 'Password'
        New-UDTextbox -Type password -Id ConfirmPassword -Label 'Confirm Password'
    } -OnSubmit {
        $Password = $EventData.Password
        $ConfirmPassword = $EventData.ConfirmPassword

        if ($Password -ne $ConfirmPassword) {
            Show-UDToast -Message 'Passwords do not match' -Duration 4000 -Position topLeft -BackgroundColor red -MessageColor white
            return
        }

        Invoke-PSUScript -Name 'ResetPassword.ps1' -Parameters @{
            Password = $Password
            ConfirmPassword = $ConfirmPassword
        } -Wait

        Show-UDToast -Message 'Password Reset' -Duration 4000 -Position topLeft -BackgroundColor green -MessageColor white
    }
}

Ce formulaire affichera deux champs de mot de passe. Lorsque le formulaire est soumis, il vérifiera si les mots de passe correspondent. S’ils correspondent, il appellera le script ResetPassword.ps1. Sinon, il affichera un message toast.

PowerShell Universal app toast warning that the passwords do not match.
Toast de mots de passe différents dans le formulaire d’appli Universal

Comme vous le voyez, le formulaire est très simple et direct. Vous pouvez aussi attribuer un accès basé sur les rôles à l’appli pour que seuls certains utilisateurs y aient accès. Le seul inconvénient est de devoir définir l’appli vous-même. C’est toutefois ce qui offre le plus de flexibilité.

Portal Widget de PowerShell Universal v5

PowerShell Universal v5 fournit un Portal Widget précisément pour cet usage. Vous n’avez pas besoin d’écrire de code pour créer le formulaire. Vous pouvez simplement glisser-déposer le widget sur la page Portal et configurer quelques paramètres.

PowerShell Universal Portal page showing a configured password reset widget.
Portal Widget de réinitialisation de mot de passe dans PowerShell Universal v5

Prêt à construire? Téléchargez PowerShell Universal.