PI Services

Le blog des collaborateurs de PI Services

PowerShell - Créer une fonction de génération de mot de passe

La génération de mots de passe dans un script est un besoin fréquent lors de création de compte utilisateur. Au lieu d'appeler les cmdlets pour générer un mot de passe aléatoire à chaque besoin, il est plus esthétique de créer une fonction de génération de mots de passe dédiée et de l'utiliser quand le besoin se présente.

Le code suivant propose une fonction de génération de mots de passe qui essaye d'être simple, compréhensible et adaptative.

 

La fonction de génération de mots de passe

function New-RandomPassword #Fonction qu'il faudra appeler pour générer un mot de passe aléatoire
{
    [CmdletBinding()]
    Param
    (
        [Parameter(Mandatory=$false)] #Indique que ce paramètre n'est pas obligatoire
        [ValidateNotNullOrEmpty()] #Indique que ce champ ne peut pas être vide ou null
        [int]$PasswordLength = 16, #Paramètre optionel qui spécifie la longueur du mot de passe, valeur par défaut 16

        [Parameter(Mandatory=$false)]
        [ValidateNotNullOrEmpty()]
        [int]$NumberOfAlphaNumericCharacters = 2, #Paramètre optionnel qui spécifie le nombre de caractères alphanumériques que le mot de passe doit contenir, valeur par défaut 2

        [Parameter(Mandatory=$false)]
        [ValidateNotNullOrEmpty()]
        [switch]$ConvertToSecureString #Paramètre qui si présent convertit le mot de passe en secure string pour pouvoir construire un PSCredential Object utile par exemple pour exécuter des cmdlets avec un compte de service 
    )

    Begin
    {
        Add-Type -AssemblyName 'System.Web' # Ajout d'une classe .NET à la session PowerShell qui permet d'accéder aux fonctions nécessaires à la génération du mot de passe
        
        $Return = @{} #Tableau de retour qui contient le mot de passe en clair et le mot de passe sous forme de secure string 
    }

    Process
    {
        $Password = [System.Web.Security.Membership]::GeneratePassword($PasswordLength,$NumberOfAlphaNumericCharacters) #Génération du mot de passe en clair avec les paramètres fournis
        $Return.passwordObject = $Password #Attribution du mot de passe généré dans la variable de sortie de la fonction

        if ($ConvertToSecureString.IsPresent) #Si le paramètre ConvertToSecureString est présent, génère une secure string du mot de passe
        {
            $Password = ConvertTo-SecureString -String $Password -AsPlainText -Force #Génération de la secure string du mot de passe
            $Return.passwordSecureObject = $Password #Attribution de la secure string du mot de passe dans la variable de sortie de la fonction
        }

        Return $Return #Retourne le mot de passe ainsi que la secure string en sortie de la fonction
    }
}

 

 

 

Exemple d'utilisation de la fonction de génération de mots de passe

. .\New-RandomPassword_article.ps1 #Permet de déclarer (dot source) la fonction de génération de mots de passe pour qu'elle puisse être utilisée

$Password = New-RandomPassword -PasswordLength 20 -ConvertToSecureString #Appelle de la fonction de génération de mots de passe
#Avec génération d'une secure string du mot de passe et une longueur de mot de passe de 20 caractères

$Password.passwordObject #Le mot de passe en clair est dans l'attribut passwordObject de la variable de sortie définit ci-avant $Password
$Password.passwordSecureObject #Le mot de passe sous forme de secure string est dans l'attribut passwordSecureObject de la variable de sortie définit ci-avant $Password

 

Le résultat


Appel du script PowerShell Call_me_maybe.ps1 ci-avant

PS D:\Hey_Im_a_folder> .\Call_me_maybe.ps1
LmcfY>5O$-GZ^z/fvfB1 #Affichage du mot de passe en clair
System.Security.SecureString #Mot de passe sous forme de secure string

 

Ajouter un commentaire

Loading