MAIN MENU
Blog de Devolutions

Anuncios, actualizaciones y análisis de Devolutions.

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

Crear un formulario de restablecimiento de contraseña de Active Directory de autoservicio en PowerShell Universal

Restablezca una contraseña de Active Directory con Set-ADAccountPassword, confirme el valor en un script o New-UDForm, llame a ResetPassword.ps1 con Invoke-PSUScript o suelte un Portal Widget en una página Portal de v5.

En esta entrada veremos cómo crear un formulario de restablecimiento de contraseña de Active Directory de autoservicio en PowerShell Universal. Hay varias formas de conseguirlo. Veremos el uso de un script, la creación de un formulario en una app que llama al script y, por último, cómo hacerlo en PowerShell Universal v5 con Portal Widgets.

Script de restablecimiento de contraseña de Active Directory

La primera tarea que debemos completar es usar el cmdlet Set-ADAccountPassword para restablecer la contraseña. Este cmdlet está disponible en el módulo ActiveDirectory. PowerShell Universal necesitará acceso a Active Directory para ejecutar este script. También puede configurar credenciales Run As para usar otra cuenta.

Nuestro script aceptará la contraseña y una contraseña de confirmación para comprobar que coinciden. Usaremos el contexto del usuario actual para decidir qué cuenta restablecer. Al usar SecureString, la interfaz mostrará la contraseña como un campo de contraseña. Con Parameter podemos definir Mandatory para que el usuario proporcione los parámetros obligatorios. La propiedad HelpMessage mostrará una descripción del parámetro cuando el usuario sitúe el cursor sobre el parámetro en el formulario. La variable $UAJob es una variable integrada que contiene información sobre el trabajo actual, incluida la identidad del usuario.

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

Para crear un script en PowerShell Universal, pulse Automation > Scripts y luego Create New Script. A continuación puede pegar el script en el editor. Una vez hecho, puede intentar ejecutar el script. Se mostrará un diálogo con los parámetros que debe proporcionar.

PowerShell Universal run dialog showing password and confirm password parameters.
Parámetros de contraseña al ejecutar el script de restablecimiento

Si ejecuta el script con contraseñas que no coinciden, verá un mensaje de error.

PowerShell Universal job error stating that the passwords do not match.
Error de contraseñas distintas en la consola de administración

Este enfoque tiene un par de inconvenientes. En primer lugar, la comprobación de la contraseña se produce después de enviar el formulario y de ejecutar el script. Eso significa que el usuario tendrá que volver a introducir la contraseña si no coinciden. En segundo lugar, el usuario deberá usar la consola de administración para ejecutar el script. Esto puede resultar engorroso para usuarios no técnicos. En la sección siguiente veremos cómo crear un formulario en una app para facilitar el proceso.

Formulario de restablecimiento de contraseña de Active Directory en una app Universal

Para crear un formulario en una app, pulse User Interfaces > Apps y luego Create New App (en la versión v5 estará bajo el nodo Apps). Una vez creada la app, deberá definir el formulario y llamar a Invoke-PSUScript para ejecutar el 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
    }
}

Este formulario mostrará dos campos de contraseña. Al enviarlo, comprobará si las contraseñas coinciden. Si coinciden, llamará al script ResetPassword.ps1. Si no, mostrará un mensaje toast.

PowerShell Universal app toast warning that the passwords do not match.
Toast de contraseñas distintas en el formulario de la app Universal

Como puede ver, el formulario es muy simple y directo. También puede asignar acceso basado en roles a la app para que solo determinados usuarios puedan acceder al formulario. El inconveniente es tener que definir la app usted mismo. No obstante, es lo que ofrece más flexibilidad.

Portal Widget de PowerShell Universal v5

PowerShell Universal v5 ofrece un Portal Widget precisamente para este fin. No necesita escribir código para crear el formulario. Puede arrastrar y soltar el widget en la página Portal y configurar algunos ajustes.

PowerShell Universal Portal page showing a configured password reset widget.
Portal Widget de restablecimiento de contraseña en PowerShell Universal v5

¿Listo para crear? Descargue PowerShell Universal.