码迷,mamicode.com
首页 > 其他好文 > 详细

AD批量添加群组与用户

时间:2018-06-15 10:54:47      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:serv-u   背景   中断   效率   ftp   group   scope   security   注意   

一、背景

因管理需要计划将现有的serv-u服务改成ad+iis+ftp+ntfs架构,所以需要在ad中新建对应群组并添加用户。

为提高效率减少重复工作,编写一个批量新增群组及添加用户脚本,以下为测试环境。

二、汇总

  • 注意事项:
    1. 用户必须存在,在制作用户文件时必须先行过滤,否则脚本将中途中断
    2. 所有群组的用户存在一个用户文件中,其长短不一存在无值(csv文件中间列)或空值(csv文件最后一列),需求将其过滤
    3. 脚本只添加群组必须属性,附加属性需视需求修改
    4. 制作csv文件所用的一对多查找函数:
=INDEX(A:A,SMALL(IF($B$2:$B$200="Sam",ROW($2:$200),4^8),ROW(A1)))&""  
  • 完整脚本
Import-Module ActiveDirectory

$ngs=Import-Csv C:\Data\ngs.csv
$nus=Import-Csv C:\Data\nus.csv 

foreach ($ng in $ngs) {

New-ADGroup -Name $ng.name -SamAccountName $ng.name -GroupCategory $ng.GroupCategory -GroupScope $ng.Groupscope -Path $ng.path -PassThru
Get-ADGroup -Identity $ng.name | Set-ADGroup -Replace @{info=$ng.info}

Add-ADGroupMember -Identity $ng.name -Members ($nus.($ng.name) | Where-Object {$_ -ne ‘‘} ) -PassThru 

}
  • 群组文件ngs.csv
name,path,groupcategory,groupscope,info
ftp-ops-w,"OU=FTP,OU=Group,DC=lxy,DC=lin",Security,Global,"DRI:xx,TEL:xx"
ftp-ops-r,"OU=FTP,OU=Group,DC=lxy,DC=lin",Security,Global,"DRI:xx,TEL:xx"
ftp-dba-w,"OU=FTP,OU=Group,DC=lxy,DC=lin",Security,Global,"DRI:xx,TEL:xx"
ftp-dba-r,"OU=FTP,OU=Group,DC=lxy,DC=lin",Security,Global,"DRI:xx,TEL:xx"
  • 用户文件:nus.csv
ftp-ops-w,ftp-ops-r,ftp-dba-w,ftp-dba-r
user01,user02,user03,user04
user05,,user06,user07
user08,,user09,

三、分解

  • 导入AD模块
Import-Module ActiveDirectory
  • 新建帐号
foreach ( $num in 1..10 ) {

$user=‘USER‘+$num
New-ADUser $user -Path "OU=Test,DC=iku,DC=lxy" -Enabled:$true -AccountPassword(ConvertTo-SecureString "lxy1989." -AsPlainText -Force)

}
  • 导入群组与用户文件
    必须确认群组及用户是存在的,否则会导至脚本异常,后续用户用户添加
$ngs=Import-Csv C:\Data\ngs.csv
$nus=Import-Csv C:\Data\nus.csv 
  • 新建群组
    备注信息info无命令参数,通过设置hash值添加
foreach ($ng in $ngs) {

New-ADGroup -Name $ng.name -SamAccountName $ng.name -GroupCategory $ng.GroupCategory -GroupScope $ng.Groupscope -Path $ng.path -PassThru
Get-ADGroup -Identity $ng.name | Set-ADGroup -Replace @{info=$ng.info}

}
  • 为群组添加用户
    用户文件中并非所有群组都有用户,命令遇见异常会中止所有操作,所有需求过滤空数据;
    在CSV文件中最后一列被识别为空值,无法使用‘’识别,通过在每列后增加一列逗号解决。
foreach ($ng in $ngs) {

Add-ADGroupMember -Identity $ng.name -Members ($nus.($ng.name) | Where-Object {$_ -ne ‘‘} ) -PassThru 

}

PS C:\Users\Administrator> ($nus.‘ftp-dba-r‘ | Where-Object {$_ -ne ‘‘}).count
3
---nu.csv
ftp-ops-w,ftp-ops-r,ftp-dba-w,ftp-dba-r
user1,user2,user3,user4,
user5,,user6,user7,
user8,,user9,,
---
PS C:\> ($nus.‘ftp-dba-r‘ | Where-Object {$_ -ne ‘‘}).count
2
  • 查看群组用户信息
foreach ($ng in $ngs) {

Get-ADGroupMember -Identity $ng.name | select @{name=‘group‘;expression={$ng.name}},@{name=‘name‘;expression={$_.name}}

}

group                                                              name                                                              
-----                                                              ---- 
ftp-ops-w                                                          USER1             
ftp-ops-w                                                          USER5             
ftp-ops-w                                                          USER8             
ftp-ops-r                                                          USER2             
ftp-dba-w                                                          USER3             
ftp-dba-w                                                          USER6             
ftp-dba-w                                                          USER9             
ftp-dba-r                                                          USER4             
ftp-dba-r                                                          USER7
  • 移除群组所有用户
foreach ($ng in $ngs) {

Remove-ADGroupMember -Identity $ng.name -Members (Get-ADGroupMember -Identity $ng.name)
}

AD批量添加群组与用户

标签:serv-u   背景   中断   效率   ftp   group   scope   security   注意   

原文地址:http://blog.51cto.com/linxy/2129564

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!