Déverrouiller la génération aléatoire de mots de passe avec PowerShell

Il est important de garder des mots de passe longs et difficiles à deviner. Vous pourriez savoir comment créer un mot de passe sécurisé, mais ne serait-il pas agréable d’avoir un petit script pour le faire à votre place ? Heureusement pour vous, si vous êtes sous Windows, vous pouvez créer un générateur de mots de passe aléatoires avec PowerShell qui générera différentes longueurs et complexités !

Au lieu de créer votre propre générateur de mots de passe aléatoires, utilisez simplement une méthode existante que Microsoft fournit déjà, appelée la méthode GeneratePassword() de .NET. Cette méthode fait partie de la classe System.Web.Security.Membership et fera tout ce dont vous avez besoin.

Construction du script

Pour construire ce script simple, vous devrez d’abord rendre l’assembly System.Web disponible. La classe System.Web.Security.Membership fait partie de cet assembly et n’est pas disponible par défaut.

Add-Type -AssemblyName 'System.Web'

Une fois que l’assembly System.Web est disponible, vous pouvez maintenant invoquer la méthode GeneratePassword().

La méthode GeneratePassword() a deux arguments : length et numberOfNonAlphanumericCharacters. En utilisant ces deux arguments, vous pouvez créer toutes sortes de mots de passe aléatoires avec PowerShell.

  • Longueur – Il s’agit de la longueur des caractères du mot de passe.
  • numberOfNonAlphanumericCharacters – Il s’agit du nombre de caractères non alphanumériques que la méthode générera. Pensez à des caractères tels que @,%,&, etc.

Tout d’abord, définissez la longueur du mot de passe que vous souhaitez avoir. L’exemple ci-dessous définit une variable de 10 que vous passerez à la méthode.

$length = 10

Ensuite, définissez le nombre de caractères non alphanumériques que vous souhaitez inclure dans le mot de passe. Le code ci-dessous définit une variable de 5 que vous fournirez à la méthode pour vous assurer que cinq caractères non alphabétiques sont présents dans le mot de passe.

$nonAlphaChars = 5

Ensuite, vous appellerez la méthode GeneratePassword() en passant les valeurs des deux variables définies ci-dessus.

[System.Web.Security.Membership]::GeneratePassword($length, $nonAlphaChars)

Lorsque vous exécutez le code ci-dessus, PowerShell renvoie un assortiment aléatoire de caractères dans une chaîne que vous pouvez ensuite utiliser où vous le souhaitez.

Construction de la longueur du mot de passe aléatoire

Vous pouvez même rendre le mot de passe encore plus aléatoire en rendant également la longueur du mot de passe aléatoire. Utilisez la commande Get-Random pour obtenir un entier aléatoire que vous pourrez ensuite utiliser comme argument length pour générer un mot de passe de longueur aléatoire !

$minLength = 5 ## caractères
$maxLength = 10 ## caractères
$length = Get-Random -Minimum $minLength -Maximum $maxLength
$nonAlphaChars = 5
$password = [System.Web.Security.Membership]::GeneratePassword($length, $nonAlphaChars)

Si vous utilisez ce mot de passe dans PowerShell, de nombreux composants nécessitent une chaîne sécurisée. Une fois que vous avez le mot de passe sous forme de chaîne en texte clair, vous pouvez le convertir en chaîne sécurisée à l’aide de la commande ConvertTo-SecureString.

$secPw = ConvertTo-SecureString -String $password -AsPlainText -Force

Construction d’une fonction PowerShell

Enfin, poussez ce générateur de mots de passe aléatoires au niveau supérieur en créant une fonction que vous pouvez utiliser où vous le souhaitez, sans avoir à vous souvenir de toutes les syntaxes expliquées ci-dessus.

function New-RandomPassword {
    param(
        [Parameter()]
        [int]$MinimumPasswordLength = 5,
        [Parameter()]
        [int]$MaximumPasswordLength = 10,
        [Parameter()]
        [int]$NumberOfAlphaNumericCharacters = 5,
        [Parameter()]
        [switch]$ConvertToSecureString
    )
    
    Add-Type -AssemblyName 'System.Web'
    $length = Get-Random -Minimum $MinimumPasswordLength -Maximum $MaximumPasswordLength
    $password = [System.Web.Security.Membership]::GeneratePassword($length,$NumberOfAlphaNumericCharacters)
    if ($ConvertToSecureString.IsPresent) {
        ConvertTo-SecureString -String $password -AsPlainText -Force
    } else {
        $password
    }
}

Une fois que vous avez ajouté cette fonction à votre profil, un module PowerShell peut-être ou simplement en la copiant/collant dans votre session en cours, vous pouvez l’exécuter facilement.

New-RandomPassword -MinimumPasswordLength 10 -MaximumPasswordLength 15 -NumberOfAlphaNumericCharacters 6 -ConvertToSecureString

Source:
https://adamtheautomator.com/random-password-generator/