需求是这样的,给员工重置密码,密码要是随机的,但是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