需求是这样的,给员工重置密码,密码要是随机的,但是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,如需转载请自行联系原作者