Board logo

标题: [网络连接] 批处理批量配置windows ad 求助 [打印本页]

作者: cchyswy    时间: 2022-12-6 09:26     标题: 批处理批量配置windows ad 求助

  1. @Echo off
  2. setlocal
  3. echo 当前时间:%date% %time% >>C:\Users\Administrator\Desktop\adlog.txt
  4. set domainname=ldap.com
  5. set Userpassword=1qaz!QAZ
  6. set OuName=huawei
  7. echo 此脚本用于批量建立用户.
  8. echo 使用同目录下users.csv作为输入数据。
  9. :Start
  10. for /f "eol=; tokens=1,2,3,4,5,6 delims=." %%a in ("%domainname%") do set ldapname1=%%a&set ldapname2=%%b&set ldapname3=%%c&set ldapname4=%%d&set ldapname5=%%e&set ldapname6=%%f
  11. set domain=dc=%ldapname1%,dc=%ldapname2%,dc=%ldapname3%,dc=%ldapname4%,dc=%ldapname5%,dc=%ldapname6%
  12. if DEFINED ldapname1 set ldap=dc=%ldapname1%
  13. if DEFINED ldapname2 set ldap=%ldap%,dc=%ldapname2%
  14. if DEFINED ldapname3 set ldap=%ldap%,dc=%ldapname3%
  15. if DEFINED ldapname4 set ldap=%ldap%,dc=%ldapname4%
  16. if DEFINED ldapname5 set ldap=%ldap%,dc=%ldapname5%
  17. if DEFINED ldapname6 set ldap=%ldap%,dc=%ldapname6%
  18. Rem echo DomainName: %domainname%
  19. Rem echo LdapName: %ldap%
  20. Echo DEL user:
  21. FOR /F "eol=; tokens=1,2,3,4,5,6,7,8,9,10,* delims=, " %%a in (usersadd.csv) do dsquery user -samid *%%e  | dsrm -noprompt -c>>C:\Users\Administrator\Desktop\adlog.txt
  22. FOR /F "eol=; tokens=1,2,3,4,5,6,7,8,9,10,* delims=, " %%a in (usersadd.csv) do dsquery user cn=%%c,ou=%%b,ou=%%a,ou=%OuName%,%ldap%  | dsrm -noprompt -c>>C:\Users\Administrator\Desktop\adlog.txt
  23. Echo ADD user:
  24. FOR /F "eol=; tokens=1,2,3,4,5,6,7,8,9,10,* delims=, " %%a in (usersadd.csv) do dsadd user cn=%%c,ou=%%b,ou=%%a,ou=%OuName%,%ldap% -samid %%j -upn %%j@%domainname% -display %%c -mi %%i -pwd %Userpassword% -tel %%e -title %%d -dept %%f -mobile %%g -iptel %%h -company %%b>>C:\Users\Administrator\Desktop\adlog.txt
  25. :DisplayInfo
  26. echo.
  27. echo.
  28. if %errorlevel% EQU -2147019886 echo 用户已存在,不能重复建立.&echo.&pause&goto end
  29. if %errorlevel% NEQ 0 echo 建立用户失败.&echo.&pause&goto end
  30. if %errorlevel% EQU 0 echo 建立用户成功.&echo.&pause>>C:\Users\Administrator\Desktop\adlog.txt
  31. reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultDomainName /t REG_SZ /d %domainname% /f >nul
  32. :end
  33. rem echo %errorlevel% &pause
  34. cls
  35. endlocal
  36. echo on
复制代码
大佬们,我这个BAT是来操作Windows AD,AD用来做IP话机的通讯录 ,当电话号码使用者改变时候,用这个BAT来处理。按照变更信息的号码先查找一遍,如果有这个号码记录就删除,然后增加;查找的时候如果没有记录也增加。
现在在del user 这一步遇到了问题,一但变更信息中有空格字段就查找报错,直接执行后面的删除动作了。会一直在删除,会把所有OU的记录全删除掉
现有3个问题求助:
1、在删除这一步能不能加个判断,查找报错了就不执行dsrm删除操作,,这个问题首要最重要
2、日志输出的问题,我在每个步骤后面做了追加输出到adlog.txt  >>C:\Users\Administrator\Desktop\adlog.txt  这个可以保存删除和增加的信息,但是删除和增加的时候在cmd窗口看不到,输出到后面adlog.txt里面,当前cmd窗口看不到删除和增加的内容
3、BAT处理能不能优化一下。



需要变更的信息,如下例:
            
总部        人事部        马民        经理        5555        人事部        null        5555        mm        mamin5555
总部        财务部        姜昱竹        职员        5431        财务部        null        5431        jyz        jiangyuzhu5431
北京        技术部        刘泽群        主管        106661        技术部        null        106661        lzq        liuzequn106661
上海        客服部        张煜焓        一级客服        213332        客服部        null        213332        zyh        zhangyuhan213332

adlog.txt的内容
请按任意键继续. . . 当前时间:2022-12-05 10:27:55.53
dsadd 成功:cn=马民,ou=人事部,ou=总部,ou=huawei,dc=ldap,dc=com
dsadd 成功:cn=姜昱竹,ou=财务部,ou=总部,ou=huawei,dc=ldap,dc=com
dsadd 成功:cn=刘泽群,ou=技术部,ou=北京,ou=huawei,dc=ldap,dc=com
dsadd 成功:cn=张煜焓,ou=客服部,ou=上海,ou=huawei,dc=ldap,dc=com
请按任意键继续. . . 当前时间:2022-12-05 14:38:12.31
dsrm 成功:CN=马民,OU=人事部,OU=总部,OU=huawei,DC=ldap,DC=com
dsrm 成功:CN=姜昱竹,OU=财务部,OU=总部,OU=huawei,DC=ldap,DC=com
dsrm 成功:CN=刘泽群,OU=技术部,OU=北京,OU=huawei,DC=ldap,DC=com
当前时间:2022-12-05 14:38:32.78
dsrm 成功:CN=张煜焓,OU=客服部,OU=上海,OU=huawei,DC=ldap,DC=com
dsadd 成功:cn=马民,ou=人事部,ou=总部,ou=huawei,dc=ldap,dc=com
dsadd 成功:cn=姜昱竹,ou=财务部,ou=总部,ou=huawei,dc=ldap,dc=com
dsadd 成功:cn=刘泽群,ou=技术部,ou=北京,ou=huawei,dc=ldap,dc=com
dsadd 成功:cn=张煜焓,ou=客服部,ou=上海,ou=huawei,dc=ldap,dc=com
请按任意键继续. . .
作者: Batcher    时间: 2022-12-6 15:38

回复 1# cchyswy


1-1.bat
  1. setlocal enabledelayedexpansion
  2. for /f "eol=; tokens=1,2,3,4,5,6,7,8,9,10,* delims=, " %%a in (usersadd.csv) do (
  3.     dsquery user cn=%%c,ou=%%b,ou=%%a,ou=%OuName%,%ldap%
  4.     if !errorlevel! equ 0 (
  5.         dsquery user cn=%%c,ou=%%b,ou=%%a,ou=%OuName%,%ldap% | dsrm -noprompt -c>>C:\Users\Administrator\Desktop\adlog.txt
  6.     ) else (
  7.         goto :end
  8.     )
  9. )
复制代码

作者: Batcher    时间: 2022-12-6 15:42

2-1.bat
  1. for /f "eol=; tokens=1,2,3,4,5,6,7,8,9,10,* delims=, " %%a in (usersadd.csv) do (
  2.     echo dsadd user cn=%%c,ou=%%b,ou=%%a,ou=%OuName%,%ldap% -samid %%j -upn %%j@%domainname% -display %%c -mi %%i -pwd %Userpassword% -tel %%e -title %%d -dept %%f -mobile %%g -iptel %%h -company %%b
  3.     dsadd user cn=%%c,ou=%%b,ou=%%a,ou=%OuName%,%ldap% -samid %%j -upn %%j@%domainname% -display %%c -mi %%i -pwd %Userpassword% -tel %%e -title %%d -dept %%f -mobile %%g -iptel %%h -company %%b>>C:\Users\Administrator\Desktop\adlog.txt
  4. )
复制代码

作者: Batcher    时间: 2022-12-6 15:48

回复 1# cchyswy


3-1.bat
  1. setlocal enabledelayedexpansion
  2. for /f "eol=; tokens=1,2,3,4,5,6,7,8,9,10,* delims=, " %%a in (usersadd.csv) do (
  3.     set "StrCN=%%c"
  4.     REM 删除姓名中间可能出现的空格
  5.     set "StrCN=!StrCN: =!"
  6.     dsquery user cn=!StrCN!,ou=%%b,ou=%%a,ou=%OuName%,%ldap%
  7.     if !errorlevel! equ 0 (
  8.         dsquery user cn=!StrCN!,ou=%%b,ou=%%a,ou=%OuName%,%ldap% | dsrm -noprompt -c>>C:\Users\Administrator\Desktop\adlog.txt
  9.     ) else (
  10.         goto :end
  11.     )
  12. )
复制代码

作者: Batcher    时间: 2022-12-6 15:54

回复 1# cchyswy


3-2.bat
脚本中出现了5次C:\Users\Administrator\Desktop\adlog.txt
可以考虑把它定义成一个变量
  1. set "LogFile=C:\Users\Administrator\Desktop\adlog.txt"
  2. >>"%LogFile%" echo 当前时间:%date% %time%
复制代码

作者: cchyswy    时间: 2022-12-8 10:43

回复  cchyswy


1-1.bat
Batcher 发表于 2022-12-6 15:38



    判断已经生效,在else 后面加goto end ,当查找有错误时,直接结束。
作者: cchyswy    时间: 2022-12-8 10:46

回复 3# Batcher


    将echo部分加工一下,和删除显示的信息一样格式
    只显示了这一部分 echo cn=%%c,ou=%%b,ou=%%a,ou=%OuName%,%ldap%

CMD窗口显示的内容 。ADD增加和DEL删除的一样

此脚本用于批量建立用户.
使用同目录下users.csv作为输入数据。
DEL user:
"CN=马龙,OU=人事部,OU=总部,OU=huawei,DC=ldap,DC=com"
ADD user:
cn=马龙,ou=人事部,ou=总部,ou=huawei,dc=ldap,dc=com


建立用户成功.

请按任意键继续. . .
作者: cchyswy    时间: 2022-12-8 10:56

回复 5# Batcher


    设置adlog.txt为变量,下面是现在的脚本
  1. @Echo off
  2. setlocal enabledelayedexpansion
  3. set domainname=ldap.com
  4. set Userpassword=1qaz!QAZ
  5. set OuName=huawei
  6. set "LogFile=C:\Users\Administrator\Desktop\adlog.txt"
  7. echo 当前时间:%date% %time%>>"%LogFile%"
  8. echo 此脚本用于批量建立用户.
  9. echo 使用同目录下users.csv作为输入数据。
  10. :Start
  11. for /f "eol=; tokens=1,2,3,4,5,6 delims=." %%a in ("%domainname%") do set ldapname1=%%a&set ldapname2=%%b&set ldapname3=%%c&set ldapname4=%%d&set ldapname5=%%e&set ldapname6=%%f
  12. set domain=dc=%ldapname1%,dc=%ldapname2%,dc=%ldapname3%,dc=%ldapname4%,dc=%ldapname5%,dc=%ldapname6%
  13. if DEFINED ldapname1 set ldap=dc=%ldapname1%
  14. if DEFINED ldapname2 set ldap=%ldap%,dc=%ldapname2%
  15. if DEFINED ldapname3 set ldap=%ldap%,dc=%ldapname3%
  16. if DEFINED ldapname4 set ldap=%ldap%,dc=%ldapname4%
  17. if DEFINED ldapname5 set ldap=%ldap%,dc=%ldapname5%
  18. if DEFINED ldapname6 set ldap=%ldap%,dc=%ldapname6%
  19. Rem echo DomainName: %domainname%
  20. Rem echo LdapName: %ldap%
  21. Echo DEL user:
  22. for /f "eol=; tokens=1,2,3,4,5,6,7,8,9,10,* delims=, " %%a in (usersadd.csv) do (
  23.     dsquery user cn=%%c,ou=%%b,ou=%%a,ou=%OuName%,%ldap%
  24.     if !errorlevel! equ 0 (
  25.         dsquery user cn=%%c,ou=%%b,ou=%%a,ou=%OuName%,%ldap% | dsrm -noprompt -c>>"%LogFile%"
  26.     ) else (
  27.           goto end
  28. )
  29. )
  30. Echo ADD user:
  31. for /f "eol=; tokens=1,2,3,4,5,6,7,8,9,10,* delims=, " %%a in (usersadd.csv) do (
  32.     echo cn=%%c,ou=%%b,ou=%%a,ou=%OuName%,%ldap%
  33.     dsadd user cn=%%c,ou=%%b,ou=%%a,ou=%OuName%,%ldap% -samid %%j -upn %%j@%domainname% -display %%c -mi %%i -pwd %Userpassword% -tel %%e -title %%d -dept %%f -mobile %%g -iptel %%h -company %%b>>"%LogFile%"
  34. )
  35. :DisplayInfo
  36. echo.
  37. echo.
  38. if %errorlevel% EQU -2147019886 echo 用户已存在,不能重复建立.&echo.&pause&goto end
  39. if %errorlevel% NEQ 0 echo 建立用户失败.&echo.&pause&goto end
  40. if %errorlevel% EQU 0 echo 建立用户成功.&echo.&pause
  41. reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultDomainName /t REG_SZ /d %domainname% /f >nul
  42. :end
  43. rem echo %errorlevel% &pause
  44. cls
  45. endlocal
  46. echo on
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2