Powershell管理系列(六)批量修改AD账户登陆到的计算机

简介:

上个月有个项目中碰到这样一个需求,讲述步骤前先描述下客户的实际情况:因安全考虑需要,域内的计算机之前都已经设置了指定登陆到的计算机,目前的项目是从Lotus邮件系统迁移到Exchange 2010,Lotus工作流迁移到泛微OA,域内账户输入账号和密码后不能登陆到Exchange系统。原因就是设置了账户的登陆到计算机属性,因为Exchange是新上的系统,没在指定范围内,所以需要添加Exchange服务器CAS01,CAS02,Mail,Mailbox01。添加Mailbox01是因为公共文件夹数据库在Mailbox01上,winxp客户端需要连接到Mailbox01下载和更新OAB。

和用户确定范围和工作内容后,就开始着手做了,用户说他有之前保存的批量导入脚本,我说好啊,你来处理吧,结果一个上午过去了,到中午的时候,还没弄完,我一看,脚本比较复杂,针对OU要修改,有些属性要调整,一个小时大概能处理500个,照这个进度,下午可能也处理不完。

分析后思路来了,先从AD导出现有的Logonworkstation属性到Excel,在Excel里面批量修改下Logonworkstation属性,在导入到AD就可以了,这样高效而且故障率低。

下面开始讲述两种实现方法的详细实施步骤。

方法一、Powershell+Excel

步骤1、Powershell批量导出AD的相关属性。如果是系统是2008,则需要使用 Import-Moudle ActiveDirectory 倒入AD模块先,但在2012中会自动导入。

PS C:\Users\Administrator> Get-ADUser -Filter * -Properties * | Select-Object name,samaccountname,userprincipalname,logo
nw*|Export-Csv c:\userinfo.csv -Encoding UTF8 -NoTypeInformation

wKiom1Swov6AxSr0AAE8tDL2mg8728.jpg

步骤2、导出后,删除一些系统自带账号,如下图。

wKiom1SwpG6zaPDpAAKA87eUFB4723.jpg步骤3、下面我们增加五列内容,一列是从Logonworkstation剪切过来的,一些是cas01,一列是cas02,一列是mail,一列是mailbox01。用于后面的步骤"列合并"。为什么Logonworkstation列留空呢?看后面步骤就知道了。

wKioL1SwpxuihoIjAAOgEetFbPc356.jpg

步骤4、我们使用Excel字符合并函数,A&B&C&D&E,如下图,得到我们想要的xp002,cas01,cas02,mail,mailbox01这个效果,并拉至填充至最末尾一行。

wKioL1SwqQ3THoWAAAS021rIRTY248.jpg

步骤5、编辑完成后,注意用记事本打开该文件,然后选择“UTF-8”编码来保存该CSV文件,以免出现导入后出现中文字段乱码.

wKioL1SwqeuRwNIJAANC3s5Jp6w080.jpg

步骤6、将编辑后的CSV文件复制到C:\ ,执行导入命令

PS C:\Users\Administrator> Import-Csv -Path c:\userinfo.csv | foreach {Set-ADUser -Identity $_.name -LogonWorkstations $_.logonworkstations}

[注:也可以使用参数-encoding default避免中文乱码

Import-Csv -Path c:\userinfo.csv -encoding default | foreach {Set-ADUser -Identity $_.name -LogonWorkstations $_.logonworkstations}

]

wKioL1SwqxfCLZ-0AAEnOeHM4QM150.jpg

步骤7、查看我们导入后的效果,对比下Excel表,看是否达到了我们的要求。

wKiom1Swqt-TxyyWAAIuFJVoRCg403.jpg

wKioL1Swq_3D2SguAARWtidDZ84506.jpg

步骤8、操作后整个导入的时间不到半小时。达到我们的实际效果,步骤完成。

方法二、Powershell,不使用Excel

输入如下命令:

步骤1、PS C:\Users\Administrator> Get-ADUser -Filter * -Properties * | where {$_.logonw
orkstations -ne $null} | Select-Object name,logonworkstations | foreach {Set-ADUser -Identity $_.name -LogonWorkstations ($_.logonworkstations+",cas01,cas02,mail,mailbox01")}

wKiom1SzOxCRUB8nAAFQeOIcLDg040.jpg

步骤2、查看我们导入后的效果,达到了我们的要求。

wKioL1SzPH7TMGuNAAIIEBIt0wg811.jpg

----------------------------------------------------------------------------------------------------

这个地方折腾了好久,一直执行不成功,后面又在输入了一遍Powershell就好了,和群友讨论说可能是输入法全半角的问题,我反正是看了没啥区别,眼力好的,对比下看看。[注:上面的是不成功的,下面的是执行成功的]

wKioL1SzPbvjKKVbAALU-rd-hEE724.jpg



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


相关文章
|
6月前
|
存储 JSON 运维
【运维】Powershell 服务器系统管理信息总结(进程、线程、磁盘、内存、网络、CPU、持续运行时间、系统账户、日志事件)
【运维】Powershell 服务器系统管理信息总结(进程、线程、磁盘、内存、网络、CPU、持续运行时间、系统账户、日志事件)
159 0
|
jenkins 持续交付 Windows
Jenkins基础--Windows批处理,PowerShell获取指定的Credentials账户信息
Jenkins中Windows批处理,PowerShell获取指定的Credentials账户信息
5010 0