PowerShell生成隨機密碼

需求是這樣的,給員工重置密碼,密碼要是隨機的,但是0和O i和I這些不要,防止誤殺。


我用的方法是這樣的,這是c#中web的一個方法,很給力。

	$Assembly = Add-Type -AssemblyName System.Web
	$global:passwordrandom = [System.Web.Security.Membership]::GeneratePassword(8, 1)

代碼簡短,問題也有,那就是數字完全隨機,剔除不了不需要的東西。


所以九叔用下面的方法來實現

$mimacount =8 #密碼位數
#取得第一位密碼

function suijimima {

$mimahalf =$mimacount/2 #密碼總數一半,用做下一次隨機取值的依據
$mimaarray = @{x= 1..$mimahalf} #密碼取值的陣列
$global:mimax =($mimaarray.x|get-random -Count 1)
echo 當前取得密碼爲 $mimax
$global:mimacount=$mimacount -$mimax 
#echo 密碼計數器被縮小爲 $mimacount
}

suijimima
suijimima
suijimima
echo 當前取得密碼爲
$global:mimacount

首先是8位密碼,我分成4個部分,分別是數字、小寫、大寫、符號,每個部分分一些。

這樣一個密碼就可以包含4種元素,而且這四種元素的數量是不同的

上面這個方法寫了一半,發現有很多問題,所以放棄,用下面這個最終版的。

具體不多說,自己看。

用到的技術點主要是生成字符區分大小寫、哈希表、隨機函數get-random


$mimacount =8 #生成的密碼位數
這一行是處理生成的密碼長度
#############生成處理過的隨機密碼
$xiaoxie =@('a','b','c','d','e','f','g','h','j','k','m','n','p','q','r','s','t','u','v','w','x','y','z')
$daxie =@('A','B','C','D','E','F','G','H','J','K','L','M','N','P','Q','R','S','T','U','V','W','X','Y','Z')
$shuzi =@('2','3','4','5','6','7','8','9')
$fuhao =@('!','~','-','=')
$xxxx =@('xiaoxie','daxie','shuzi','fuhao')
$hashtable = New-Object System.Collections.Hashtable
			$hashtable= @{
				'xiaoxie' = $xiaoxie
				'daxie' = $daxie
				'shuzi' = $shuzi
				'fuhao' = $fuhao
			}  

$mimacount =8 #生成的密碼位數
 function suijimima {
$countsuiji=$xxxx|Get-Random
$a =[string]($hashtable.$countsuiji|Get-Random )
$a
}
$bx=""

$jilubiao = New-Object System.Collections.Hashtable
$jilubiao =@{'x' = "X"}  
for ($i=1;$i -lt $mimacount+1;$i++)
{
$bx2=suijimima
if( [string]$hashtable.shuzi -cmatch $bx2)
{
$jilubiao+=@{'shuzi' = "X"}  
}
elseif  ([string]$hashtable.xiaoxie -cmatch $bx2)
{
$jilubiao+=@{'xiaoxie' = "X"}  
}
elseif  ([string]$hashtable.fuhao -cmatch $bx2)
{
$jilubiao+=@{'fuhao' = "X"}  
}
elseif  ([string]$hashtable.daxie -cmatch $bx2)
{
$jilubiao+=@{'daxie' = "X"}  
}


$bx += $bx2
}
cls
$bx


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章