因管理须要计划将现有的serv-u服务改为ad+iis+ftp+ntfs架构,因此须要在ad中新建对应群组并添加用户。express
为提升效率减小重复工做,编写一个批量新增群组及添加用户脚本,如下为测试环境。数组
=INDEX(A:A,SMALL(IF($B$2:$B$200="Sam",ROW($2:$200),4^8),ROW(A1)))&""
Import-Module ActiveDirectory $ngroups=Import-Csv C:\Data\ngs.csv $nusers=Import-Csv C:\Data\nus.csv foreach ($ngroup in $ngroups) { #新建组 New-ADGroup -Name $ngroup.name -SamAccountName $ngroup.name -GroupCategory $ngroup.GroupCategory -GroupScope $ngroup.Groupscope -Path $ngroup.path -Description $ngroup.description -PassThru Get-ADGroup -Identity $ngroup.name | Set-ADGroup -Replace @{info=$ngroup.info} #新增成员 Add-ADGroupMember -Identity $ngroup.name -Members ($nusers.($ngroup.name) | Where-Object {$_ -ne ''} ) -PassThru }
name,path,groupcategory,groupscope,description,info ftp-ops-w,"OU=FTP,OU=Group,DC=lxy,DC=lin",Security,Global,"ip/ftp/ops/","DRI:xx,TEL:xx" ftp-ops-r,"OU=FTP,OU=Group,DC=lxy,DC=lin",Security,Global,"ip/ftp/ops/","DRI:xx,TEL:xx" ftp-dba-w,"OU=FTP,OU=Group,DC=lxy,DC=lin",Security,Global,"ip/ftp/dba/","DRI:xx,TEL:xx" ftp-dba-r,"OU=FTP,OU=Group,DC=lxy,DC=lin",Security,Global,"ip/ftp/dba/","DRI:xx,TEL:xx"
ftp-ops-w,ftp-ops-r,ftp-dba-w,ftp-dba-r user01,user02,user03,user04 user05,,user06,user07 user08,,user09,
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) }
$newusers= Import-Csv .\nu.csv $newgroups= Import-Csv .\ng.csv # 新建数组保存离职或不存在账号 $array_error_user = New-Object -TypeName System.Collections.ArrayList $array_disabled_user = New-Object -TypeName System.Collections.ArrayList foreach ($newgroup in $newgroups) { $newuser=($newusers.($newgroup.name) | Where-Object {$_ -ne ''}) foreach ($user in $newuser) { $user_abled= (Get-ADUser $user).enabled # 查询账号是否被禁用,默认状况下只有离职的账号才会被禁用 $returned=$? # 若账号不存在,则返回false if ($returned -eq $true) { if ($user_abled -eq $false) {$array_disabled_user.Add($user+'@'+($newgroup.name))} # 将被禁用(离职)的账号添加至数组 } else { $array_error_user.add($user+'@'+($newgroup.name)) } # 将不存在的账号添加至数组 } } echo "The following user is disabled :"$array_disabled_user echo "The following user does not exist :"$array_error_user
vi user.error xx xxx xx :%s/@.*//g vi deluser.sh #!/bin/bash #在sed中引用变量用双引号 for user in $(cat user.error) do sed -i "s/$user//g" nu.csv done
$ngroups=Import-Csv C:\Data\ngs.csv $nusers=Import-Csv C:\Data\nus.csv
# version1 foreach ($ngroup in $ngroups) { New-ADGroup -Name $ngroup.name -SamAccountName $ngroup.name -GroupCategory $ngroup.GroupCategory -GroupScope $ngroup.Groupscope -Path $ngroup.path -PassThru Get-ADGroup -Identity $ngroup.name | Set-ADGroup -Replace @{info=$ngroup.info} } # version2 # 增长了群组是否存在的判断 $ngroups = Import-Csv D:\PS\NewGroup\201807\ng.csv -Encoding Unicode foreach ($ngroup in $ngroups) { $drop = Get-ADGroup $ngroup.name $return = $? # 检查组是否存,不存在则新建组 if ($return -eq $false){ New-ADGroup -Name $ngroup.name -SamAccountName $ngroup.name -GroupCategory $ngroup.groupcategory -GroupScope $ngroup.groupscope -Path $ngroup.path -Description $ngroup.description Get-ADGroup $ngroup.name | Set-ADGroup -Replace @{info=$ngroup.info} } }
foreach ($ngroup in $ngroups) { Add-ADGroupMember -Identity $ngroup.name -Members ($nusers.($ngroup.name) | Where-Object {$_ -ne ''} ) -PassThru } PS C:\Users\Administrator> ($nusers.'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:\> ($nusers.'ftp-dba-r' | Where-Object {$_ -ne ''}).count 2
foreach ($ngroup in $ngroups) { Get-ADGroupMember -Identity $ngroup.name | select @{name='group';expression={$ngroup.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 ($ngroup in $ngroups) { Remove-ADGroupMember -Identity $ngroup.name -Members (Get-ADGroupMember -Identity $ngroup.name) }
在使用过程当中发现脚本的功能实现方式生硬,书写格式并不规范,不便阅读,因此做了更新。bash
# $ngroups = Import-Csv D:\PS\NewGroup\201807\ng.csv -Encoding Unicode # 新建组 <# foreach ($ngroup in $ngroups) { $test = Get-ADGroup $ngroup.name $return = $? if ($return -eq $false){ New-ADGroup -Name $ngroup.name -SamAccountName $ngroup.name -GroupCategory $ngroup.groupcategory -GroupScope $ngroup.groupscope -Path $ngroup.path -Description $ngroup.description Get-ADGroup $ngroup.name | Set-ADGroup -Replace @{info=$ngroup.info} } } #> # 清空组成员 <# foreach ($ngroup in $ngroups) { Remove-ADGroupMember -Identity $ngroup.name -Members (Get-ADGroupMember -Identity $ngroup.name) } #> # 查询组成员 <# foreach ($ngroup in $ngroups) { Get-ADGroupMember -Identity $ngroup.name | select @{name='group';expression={$ngroup.name}},@{name='name';expression={$_.name}} } #> # $ngroups = Import-Csv D:\PS\NewGroup\201807\ngw.csv # $nusers = Import-Csv D:\PS\NewGroup\201807\nus.csv # 添加成员 <# foreach ($ngroup in $ngroups) { Add-ADGroupMember -Identity $ngroup.name -Members ($nusers.($ngroup.name) | Where-Object {$_ -ne ''} ) -PassThru -Confirm:$false } #> # 统计各群组用户数 #< [int]$sum = 0 $re =foreach ($ngroup in $ngroups){ $user_num = (Get-ADGroupMember ($ngroup.name) | Where-Object {$_ -ne ''}).count $user_num | select @{name='group';ex={$ngroup.name}},@{name='num';ex={$user_num}} $sum += $user_num } echo $re echo $sum #>