这是一个非常悲伤的需求,整个逻辑弄的我有点吐血,幸运的是终于做完了。由于用到了太多变量,不写备注自己也看不懂,记录一下。
需求是这样的:某个用户位于某个安全组内,安全组在某个OU下。现在需要创建一个新的OU,只改变OU中的某一个关键词,其他部分照抄,创建一个计算机账号,放到新的OU下。
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
#定义函数,参数是x,分别是1和2,生成的计算机的尾巴不一样
function
chuangjianjisuanjiX (
$xuhao
)
{
if
(
$xuhao
-eq
"1"
)
{
$xuhao
=
"-"
}
elseif
(
$xuhao
-eq
"2"
)
{
$xuhao
=
"X"
}
#计算机名的来源是更上一级的一个参数,员工编号
$jisuanjiname
=
$jisuanji
#获取中文名,其实这里最终没有用到
$zhongwenming
= (
Get-ADUser
$jisuanjiname
).name
#识别创建计算机规则,即创建员工编号+序号的计算机名字
$xingmingshibiechar
=
$jisuanjiname
+
$xuhao
#获取操作时间
$date
= date
#准备后面 用的计算机描述信息
$miaoshu
= (
Get-ADUser
$jisuanjiname
-Properties *).extensionAttribute1 + (
Get-ADUser
$jisuanjiname
).name
#这是另外一种描述信息,备注掉了,暂时不用。
#$miaoshu = (Get-ADUser $jisuanjiname).name + "使用," + (get-aduser $env:USERNAME).name + "创建。时间是" + $date
#获取用户所在的OU。
#$newcomputerou = (Get-ADUser $jisuanjiname).DistinguishedName
#获取最终应该放置的计算机OU
#这里比较长,首先获取这个用户所在的安全组和邮件组,然后后去组信息,查找符合条件的安全组,最后获取这个安全组的DistinguishedName,也就是它的OU名
$newcomputeroux
= ((
Get-ADUser
$jisuanjiname
-Properties *).memberof |
Get-ADGroup
| ?{
$_
.distinguishedname
-match
"xxxxxxxxxxxx"
}).DistinguishedName
#获取一下安全组的名字的长度,这个和上面的类似,很简单,不说了。
$yhmchangdu
= ((
Get-ADUser
$jisuanjiname
-Properties *).memberof |
Get-ADGroup
| ?{
$_
.distinguishedname
-match
"xxxxxxxxxxxx"
}).name.Length
#关键字替换,把原来OU中的xxx换成计算机OU,这里 有个remove+4的操作,具体的大家可以试试,很巧妙。
$newcomputerou
=
$newcomputeroux
.Replace(
'xxxx'
,
'计算机OU'
).remove(0,
$yhmchangdu
+ 4)
#从OU中去除尾部比较长的部分,一般就是www.contoso.com部分,这样最终循环的时候可以少运行一些
$quchuxinxi
=
"xxxxx"
#需要创建的OU列表,有个数,如果计数4个,实际上OU有3个,进行一个循环
#下面这行其实不应该备注的,因为显色有点问题,我备注掉了。
#$chuangjianOU = $newcomputerou.Replace($quchuxinxi,"").split(',')
#统计需要删除的字符数
$x
= 0
#$yxserver = "xxxxxxxxxxx"
# 定义两个数组阵列,空的,当前OU和部门名
$dangqianOU
=
New-Object
System.Collections.ArrayList
$bumenming2
=
New-Object
System.Collections.ArrayList
#进入关键环节,循环部分,这里用到了创建OU的计数器,可以看一下。
for
(
$i
= 0;
$i
-lt
$chuangjianOU
.Count - 1;
$i
++)
{
#筛选,替换
$bumenming
=
$newcomputerou
.Replace(
'OU='
,
''
).split(
','
)[
$i
]
#把修改过的东西加到数组里面
$bumenming2
.add(
$newcomputerou
.Replace(
'OU='
,
''
).split(
','
)[
$i
]) |
Out-Null
#计算需要删除的字符数,继续对OU名进行操作
$x
+=
$bumenming
.Length + 4
$dangqianOU
.add(
$newcomputerou
.Remove(0,
$x
)) |
Out-Null
}
#进入下一个循环
for
(
$i
= 0;
$i
-lt
$bumenming2
.Count;
$i
++)
{
#做一个倒数计数器
$countx
=
$bumenming2
.count -
$i
- 1
#创建新的组织单位,也就是OU,参数都是从上面获取的。因为OU要一级一级创建,所以这里计数器也是倒数的
new-ADOrganizationalUnit
-name
$bumenming2
[
$countx
] -Path
$dangqianOU
[
$countx
] -Server
$global:yxserver
}
#创建计算机
New-ADComputer
-Name
$xingmingshibiechar
-path
$newcomputerou
-Server
$global:yxserver
-Enabled
$True
-Description
$miaoshu
#-ManagedBy $jisuanjiname Location "Redmond,WA"#location是位置信息
$information
=
$_
.used + "
" + $_.OU + "
" + $_.OU2 + "
" +
$date
#设置一下计算机描述的特殊字段,这是我新加的,把原安全组的信息写进去
Set-ADComputer
$xingmingshibiechar
-server
$global:yxserver
-Replace
@{ computerdis =
$newcomputeroux
}
}
|
本文转自 九叔 51CTO博客,原文链接:http://blog.51cto.com/jiushu/1705273,如需转载请自行联系原作者