使用powershell 编写一个批量移动用户到指定ou的脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用powershell 编写一个批量移动用户到指定ou的脚本相关的知识,希望对你有一定的参考价值。

以下代码需要修改的地方有域名,ou对应的组织名称

复制代码到C盘根目录 保存成XXX.ps1 执行

#第一个总循环,用来做类似(goto标签)
for($i=1;$i -le 5;$i++){
    #第一个定位if
    if($i -eq 1){
        #清屏
        cls
        #返回根目录,并且打开C盘
        cd         c:
        #通过 if test-path 判断是否存在文件,存在删除,不存在跳过按顺序执行下面的语句
        if(test-path user.txt){del user.txt}
        if(test-path log.txt){del log.txt}
        if(test-path name.txt){del name.txt}
        #创建空文本文档
        new-item user.txt -type file >> null
        new-item name.txt -type file >> null
        new-item log.txt -type file >> null
        echo ‘-------------------------------------------------‘
        echo ‘*******这是一个批量迁移用户到指定OU的脚本********‘
        echo ‘-------------------------------------------------‘
        #脚本继续,所以指定变量i 增加
        $i = 2
    }
    #第二个定位if
    if($i -eq 2){
        echo ‘‘
        echo ‘【1】请输入你需要变更的用户账号,直到输入数字"1"回车,跳转到OU选择。‘
        echo ‘【2】如果你想批量导入已知账户,把名字复制到C:\name.txt,一行一个账户名字,然后输入2回车‘
        echo ‘‘
        #做一个批量查询用户的变量循环
        #变量j无意义,重复使用中,利用来做标签定位,continue是跳出当前循环。
        for($j = 1;$j -le 4;$j++){
            $name = read-host "变更的用户名"
            #当查询人员结束,输入数字1回车跳转到部门选择
            if($name -eq "1"){
                $j=5
                continue
            }
            #当已有自己的名单的时候,可以把名单存放到c:\name.txt中,进行批量转换
            if($name -eq ‘2‘){
                $name_array =cat name.txt
                foreach($name_id in $name_array){
                    dsquery user -samid $name_id >> user.txt
                }   
                $j = 5
                echo ""
                continue
            }
            #判断用户名是否存在AD域控中。
            if(dsquery user -samid $name){
                $name_cn = dsquery user -samid $name 
                $name_array =cat c:\user.txt
                $j=0
            }else{
                echo "域用户名不存在,请重新输入查询"
                $j=0
                echo ""
                continue
            }
            #判断查询的用户是否重复存在文档中。
            if($name_array -contains $name_cn){
                echo ‘已存在用户‘
                $j=0
                echo ""
                continue
            }else{
                dsquery user -samid $name >>user.txt
                $name_cn
                $j=0
                echo ""
                continue
            }
        }
        $i =3
    }
    #第三个定位if
    if($i -eq 3){
        echo ‘‘
        echo ‘------------------------------------------------------------‘
        echo ‘************请输入你要变更到的部门名称**********************‘
        echo ‘部门名字有空格,是需要使用双引号""包起来,建议查询都包起来‘
        echo ‘如果不知道部门名称,可以输入数字"2"回车,查询组织下所有部门‘
        echo ‘------------------------------------------------------------‘
        echo ‘‘ 
        #部门做了一个循环,用来选择部门用的
        #这里ou=all 是顶级组织,按公司实际情况而定。abcd是公司的域名
        for($j=1;$j -le 4;$j++){
            $bumen = read-host "变更的部门名称"
            #查询组织下所有部门
            if($bumen -eq 2){
                dsquery ou ‘ou=ALL,dc=abcd,dc=com‘ -o rdn
                $j = 0
                echo ‘‘
                continue
            }
            #查看部门是否存在
            if(dsquery ou -name $bumen){
                $bumen_cn = dsquery ou -name $bumen
                $bumen_cn
                $j =5
            }else{
                echo ‘部门不存在,请重新输入。‘
                echo ‘‘
                $j=0
            }
        }
        $i =4
    }
    #第四个定位if
    if($i -eq 4){
        echo ‘‘
        echo --------------------------------------------------------
        echo ‘*********是否要把选择的用户,变更到此部门***************‘
        echo ‘【1】确认人员变更到部门‘
        echo ‘【2】部门选择错误,重新选择部门‘
        echo ‘【3】新增人员‘
        echo --------------------------------------------------------
        echo ‘‘
        $select = read-host "请输入您的选择"
        if($select -eq 1){
            $name_cn = cat c:\user.txt
            foreach($j in $name_cn){
                dsmove $j -newparent $bumen_cn >>log.txt
            }
            $i=6
            continue
        }
        if($select -eq 2){
            $i=2
            continue
        }
        if($select -eq 3){
            $i=1
            continue
        }
        echo ""
        echo "请输入正确的选择:【1】【2】【3】"
        $i = 3
    }
}

以上是关于使用powershell 编写一个批量移动用户到指定ou的脚本的主要内容,如果未能解决你的问题,请参考以下文章

PowerShell 批量拷贝本地文件到远程多台主机

如何使用Powershell为office 365用户批量分配许可证

Powershell 批量移动计算机到指定ou

powershell 批量获取office365用户邮箱使用容量

使用PowerShell从RDB数据库批量恢复用户邮箱

使用powershell批量导入AD用户