Możesz skorzystać z funkcji Get-Random. Ta funkcja będzie losowała znaki ASCII. Poniżej jest kod:
$length = 8 #długość znaków hasła $arr = 33..33 + # znak: ! 35..46 + # znaki: #$%&'()*+,-. 48..57 + # znaki: 0123456789 64..90 + # znaki: @A-Z 97..122 # znaki: a-z $result= Get-Random -count $length -input $arr | %{ [char]$_} [string] -join $result
Innym sposobem na wygenerowanie hasła jest użycie genreator GUID. Masz ograniczenie do 32 znaków, ale wydaje mi się że nie ma takiego szaleńca, który by wygenerował hasło dla użytkownika składające się z ponad 32 znaków :)
$length = 8 $guid = [Guid]::NewGuid().ToString() -replace "-", "" $guid.Substring(0,$length)
Jeżeli chciałbyś skorzystać z dedykowanej klasy do generowania hasła z .NET to możesz użyć Membership.GeneratePassword.
$length = 8 [Reflection.Assembly]::LoadWithPartialName("System.Web") | Out-Null [System.Web.Security.Membership]::GeneratePassword($length,0)
Ale pomimo tych wszystkich udogodnień i tak chciałem stworzyć swoją własną funkcję do generowania hasła. Poniżej jest skrypt:
function Generate-Password { Param( [int] $length=8, [int] $numberOfNonAlphanumericCharacters=0 ) $allowedChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"; if ($numberOfNonAlphanumericCharacters -gt 0) { $allowedChars += "-&@#%!*$?_"; } $rnd = new-object System.Random $passwordChars = @() for ($i = 0; $i -lt $length; $i++) { $rndIndex = $rnd.Next(0, $allowedChars.Length) $passwordChars += @( $allowedChars[$rndIndex] ) } return [string] -join $passwordChars }
Brak komentarzy:
Prześlij komentarz