Il existe de nombreux scripts et applets de commande pour générer des mots de passe dans PowerShell. Malheureusement, la plupart d’entre eux ne sont pas sécurisés et vous ne devez pas les utiliser. Alors, examinons-les et voyons lequel vous devriez utiliser. Dans cet article, vous apprendrez comment générer des mots de passe aléatoires sécurisés dans PowerShell.
Avant de commencer
Il existe de nombreuses façons de générer des mots de passe aléatoires dans PowerShell. Cependant, la majorité ne sait pas que la plupart des scripts ou commandes ne génèrent pas de mots de passe sécurisés et que vous ne devriez pas les utiliser !
Examinons les applets de commande et les classes de générateur aléatoire de mots de passe les plus populaires :
- Obtenez-Aléatoire- LeObtenez-AléatoireL'applet de commande ne fonctionne que sur Windows PowerShell 5.1, et ce qui est plus important, c'est qu'elle ne garantit pas le caractère aléatoire sécurisé cryptographiquement. Débarrassez-vous-en !
- Obtenez-SecureRandom- LeObtenez-SecureRandomL'applet de commande ne fonctionne que sur PowerShell 7.x. C'est une excellente applet de commande. Cependant, il n'est pas rétrocompatible pour les utilisateurs qui souhaitent l'exécuter sur Windows PowerShell 5.1.
- RNGCryptoServiceProvider- LeRNGCryptoServiceProviderla classe abstraite est obsolète. Vous ne devriez donc l’utiliser nulle part. Débarrassez-vous-en !
- Générateur de nombres aléatoires- LeGénérateur de nombres aléatoiresla classe abstraite est sécurisée. L'avantage est qu'il fonctionne à la fois pour Windows PowerShell 5.1 et PowerShell 7.x.
Je recommande donc d'utiliserGénérateur de nombres aléatoirespour générer un mot de passe aléatoire sécurisé dans PowerShell.
Téléchargez le script PowerShell Get-RandomPassword.ps1 et placez-le dansC:scriptsdossier.
Assurez-vous que le fichier est débloqué pour éviter les erreurs lors de l'exécution du script. Pour en savoir plus, consultez l'article Erreur non signée numériquement lors de l'exécution du script PowerShell.
Une autre option consiste à copier et coller le code ci-dessous dans le Bloc-notes. Donnez-lui le nomObtenir-RandomPassword.ps1et placez-le dans leC:scriptsdossier.
<#
.SYNOPSIS
Get-RandomPassword.ps1
.DESCRIPTION
This script generates passwords based on user-defined criteria for length, character
sets, and quantity. It ensures each password contains at least one character from
each specified set.
.LINK
www.alitajran.com/generate-secure-random-passwords-powershell/
.NOTES
Written by: ALI TAJRAN
Website: alitajran.com
X: x.com/alitajran
LinkedIn: linkedin.com/in/alitajran
.CHANGELOG
V1.00, 10/12/2024 - Initial version
#>
param (
# The length of each password which should be created.
[Parameter(Mandatory = $true)]
[ValidateRange(8, 255)]
[Int32]$Length,
# The number of passwords to generate.
[Parameter(Mandatory = $false)]
[Int32]$Count = 1,
# The character sets the password may contain.
# A password will contain at least one of each of the characters.
[String[]]$CharacterSet = @(
'abcdefghijklmnopqrstuvwxyz',
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'0123456789',
'!$%&^.#;'
)
)
# Generate a cryptographically secure seed
$bytes = [Byte[]]::new(4)
$rng = [System.Security.Cryptography.RandomNumberGenerator]::Create()
$rng.GetBytes($bytes)
$seed = [System.BitConverter]::ToInt32($bytes, 0)
$rnd = [Random]::new($seed)
# Combine all character sets for random selection
$allCharacterSets = [String]::Concat($CharacterSet)
try {
for ($i = 0; $i -lt $Count; $i++) {
$password = [Char[]]::new($Length)
$index = 0
# Ensure at least one character from each set
foreach ($set in $CharacterSet) {
$password[$index++] = $set[$rnd.Next($set.Length)]
}
# Fill remaining characters randomly from all sets
for ($j = $index; $j -lt $Length; $j++) {
$password[$index++] = $allCharacterSets[$rnd.Next($allCharacterSets.Length)]
}
# Fisher-Yates shuffle for randomness
for ($j = $Length - 1; $j -gt 0; $j--) {
$m = $rnd.Next($j + 1)
$t = $password[$j]
$password[$j] = $password[$m]
$password[$m] = $t
}
# Output each password
Write-Output ([String]::new($password))
}
}
catch {
Write-Host "Error: $_" -ForegroundColor Red
}Maintenant que tout est en place, regardons les exemples PowerShell pour générer des mots de passe sécurisés.
Apprendre encore plus:Comment afficher les mots de passe enregistrés sur iPhone et les exporter
Générer des mots de passe aléatoires sécurisés Exemples de script PowerShell
Générez un mot de passe aléatoire sécurisé d'une longueur de 20 caractères.
C:scripts.Get-RandomPassword.ps1 -Length "20"Générez 100 mots de passe aléatoires sécurisés d’une longueur de 20 caractères.
C:scripts.Get-RandomPassword.ps1 -Length "20" -Count "100"Générez un mot de passe aléatoire sécurisé avec au moins 1 de chaque jeu de caractères.
C:scripts.Get-RandomPassword.ps1 -Length 20 -CharacterSet "ABCDEF", "1234567890", "!@#$%^&*()"Si vous disposez de scripts PowerShell dans lesquels vous souhaitez générer des mots de passe aléatoires, utilisez ce script comme fonction. Voici deux articles qui font cela.
- Forcer le changement de mot de passe pour tous les utilisateurs dans Microsoft 365
- Créer en masse des utilisateurs AD avec des mots de passe aléatoires
Conclusion
Vous avez appris à générer des mots de passe aléatoires sécurisés dans PowerShell. Utilisez l'applet de commande Get-SecureRandom dans PowerShell si vous êtes sûr de vouloir utiliser uniquement PowerShell 7. Si vous souhaitez générer des mots de passe dans toutes les versions de PowerShell, il est préférable d'utiliser la classe abstraite RandomNumberGenerator. C'est ce que j'aime utiliser et recommander.
Avez-vous apprécié cet article ? Vous aimerez peut-être également Comment sécuriser les mots de passe Active Directory contre les violations. N'oubliez pas de nous suivre et de partager cet article.













