wtorek, 12 marca 2013

Generowanie hasła w PowerShell

Wydaje mi się, że jedno z najczęściej wykonywanych zadań administratorów to jest generowanie nowego hasła dla użytkownika :) Ten post przedstawi Ci w jakie sposoby będziesz mógł wygenerować hasło.

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