AD批量添加群组与用户

发布时间:2020-06-27 11:37:01 作者:ikulin
来源:网络 阅读:7220

AD批量添加群组与用户

一、背景

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

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

二、汇总

=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)
}

四、更新

在使用过程中发现脚本的功能实现方式生硬,书写格式并不规范,不便阅读,所以作了更新。

# $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
#>
推荐阅读:
  1. 获取windows AD用户
  2. AD用户属性:UserPrincipalName与SamAccountName的差别

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

ad new group

上一篇:javascript与php地址url解析函数

下一篇:8.监控存档服务器

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》