需求是这样的,给员工重置密码,密码要是随机的,但是0和O i和I这些不要,防止误杀。


我用的方法是这样的,这是c#中web的一个方法,很给力。

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

代码简短,问题也有,那就是数字完全随机,剔除不了不需要的东西。


所以九叔用下面的方法来实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$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


1
2
$mimacount  =8  #生成的密码位数
这一行是处理生成的密码长度
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#############生成处理过的随机密码
$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



本文转自 九叔 51CTO博客,原文链接:http://blog.51cto.com/jiushu/1716078,如需转载请自行联系原作者