使用netdom将新映像计算机加入域的自动批处理脚本

时间:2011-12-09 04:18:29

标签: variables batch-file dns echo findstr

尽管如此,我看起来像是一个走在地球上最聪明的人类之一,我不擅长编写脚本或编程。

我的基本当前设置是:

  • Windows 2003即将成为2008 R2 AD架构
  • XP SP3工作站很快就会成为Windows 7(就像一两年一样)。

这是我试图完全自动化本文详述的域名加入程序的图片。

在使用GhostCast服务器或GSS 2.5版的Ghost控制台进行SysPrep后,我使用了几个批处理脚本和几个vbs文件。基本上,WSNAME通过文本文件中的mac地址重命名计算机并重新启动。

程序必须在重命名计算机后更新其SQL数据库实例,然后计算机必须重新启动。

重新启动后,我希望此脚本执行以下所有自动操作:

首选使用netdom的批处理脚本。

  1. 通过字符串或任何适当的内容查询计算机名称
  2. 如果计算机名称与字符串匹配,请将此计算机加入此域,然后重新启动OU,脚本应该结束或
  3. 如果计算机名称不匹配,请转到下一个语句以检查是否匹配并将此计算机加入此域,然后重新启动OU,脚本应该结束或
  4. 如果找不到字符串匹配,则递归语句并将计算机连接到默认OU然后重新启动并且脚本应该结束
  5. 实际上,所有计算机都将在指定的OU下加入域。

    重要的事情已被改变以保护无辜者!

    此尝试来自多个网站,但主要来自Find out whether an environment variable contains a substring。如果使用vbs或任何其他程序可以做得更好,请提供文件。

    我也理解,当作为批处理脚本运行时,单个百分号(%)可能必须是双百分号(%%)。

    我还有大约四次其他文件迭代尝试让这个东西也能运行。所以过去几周我一直在徒劳无功。

    主要问题似乎是根据findstr命令获取正确的查询计算机名的语法。我可以通过命令行手动操作语句,但不能作为一个批处理脚本。

    经过更多的研究,似乎可能使用Set命令为搜索字符串设置变量也可能是合理的。其中一些计算机属于同一个OU,因此只要记录了正确的查询字符串,就可以修改或省略其中的一些语句。

    请采取并修改它甚至完全丢弃它。我只想要一些能够完美运作的东西。非常感谢任何和所有帮助。

    这篇文章手动工作,但显然它只是互动的。

    ::netdom join %computername% /Domain:handsome.and.smart.com /userd:delegate /passwordd:topsecret /OU:"ou=Secret Stations,ou=Domain Computers,dc=handsome,dc=and,dc=smart,dc=com" /REBOOT
    
    echo.%computername%|findstr /B /I /C:"12" >nul 2>&1 && goto move_to_XPOU || goto move_to_secretOU
    echo.%computername%|findstr /B /I /C:"745" >nul 2>&1 && goto move_to_secretOU || goto move_to_85OU
    echo.%computername%|findstr /B /I /C:"85-712" >nul 2>&1 && goto move_to_85OU || goto move_to_859OU
    echo.%computername%|findstr /B /I /C:"85-9" >nul 2>&1 && goto move_to_859OU || goto move_to_ctdOU
    echo.%computername%|findstr /B /I /C:"CTD" >nul 2>&1 && goto move_to_ctdOU || goto move_to_coajOU
    echo.%computername%|findstr /B /I /C:"COAJ" >nul 2>&1 && goto move_to_coajOU || goto move_to_65OU
    echo.%computername%|findstr /B /I /C:"65" >nul 2>&1 && goto move_to_65OU || goto move_to_16
    echo.%computername%|findstr /B /I /C:"16" >nul 2>&1 && goto move_to_16 || goto move_to_104OU
    echo.%computername%|findstr /B /I /C:"104" >nul 2>&1 && goto move_to_104OU || goto move_to_secretOU
    echo.%computername%|findstr /B /I /C:"Sec" >nul 2>&1 && goto move_to_secretOU || goto move_to_scscOU
    echo.%computername%|findstr /B /I /C:"SCSC" >nul 2>&1 && goto move_to_scscOU || goto move_to_defaultOU
    echo.%computername%|findstr /B /I /C:"740" >nul 2>&1 && goto move_to_defaultOU || goto end
    
     ::If name does not match any strings, place computer in default container.
    echo.%computername%|findstr /B /I /C:"" >nul 2>&1 && goto move_to_default_OU || goto end
    
    
    
    :move_to_XPOU
    echo.%computername%|findstr /B /I /C:"12" >nul 2>&1 && netdom JOIN %computername% /Domain:handsome.and.smart.com /userd:delegate /passwordd:topsecret /OU:"ou=XP Client,ou=Domain Computers,dc=handsome,dc=and,dc=smart,dc=com" /REBOOT && goto end || goto move_to_ghostOU 
    
    
    :move_to_secretOU
    echo.%computername%|findstr /B /I /C:"745" >nul 2>&1 && netdom JOIN %computername% /Domain:handsome.and.smart.com userd:delegate /passwordd:topsecret /OU:"ou=Secret Stations,ou=Domain Computers,dc=handsome,dc=and,dc=smart,dc=com" /REBOOT:34 && goto end || goto move_to_puka
    
    
    :move_to_85OU
    echo.%computername%|findstr /B /I /C:"85-712" >nul 2>&1 && netdom JOIN %computername% /Domain:handsome.and.smart.com /userd:delegate /passwordd:topsecret /OU:"ou=85 COMPUTERS,ou=Domain Computers,dc=handsome,dc=and,dc=smart,dc=com" /REBOOT && goto end || goto move_to_859OU
    
    
    :move_to_859OU
    echo.%computername%|findstr /B /I /C:"85-9" >nul 2>&1 && netdom JOIN %computername% /Domain:handsome.and.smart.com /userd:delegate /passwordd:topsecret /OU:"OU=859 CLIENTS,OU=BLDG 85 OU,dc=handsome,dc=and,dc=smart,dc=com" /REBOOT && goto end || goto move_to_ctdOU  
    
    
    :move_to_ctdOU
    echo.%computername%|findstr /B /I /C:"CTD" >nul 2>&1 && netdom JOIN %computername% /Domain:handsome.and.smart.com /userd:delegate /passwordd:topsecret /OU:"ou=CTD COMPUTERS,ou=Domain Computers,dc=handsome,dc=and,dc=smart,dc=com" /REBOOT && goto end || goto move_to_coajOU
    
    
    :move_to_coajOU
    echo.%computername%|findstr /B /I /C:"COAJ" >nul 2>&1 && netdom JOIN %computername% /Domain:handsome.and.smart.com /userd:delegate /passwordd:topsecret /OU:"ou=COAJ COMPUTERS,ou=Domain Computers,dc=handsome,dc=and,dc=smart,dc=com" /REBOOT && goto end || goto move_to_65OU
    
    
    :move_to_65OU
    echo.%computername%|findstr /B /I /C:"65" >nul 2>&1 && netdom JOIN %computername% /Domain:handsome.and.smart.com /userd:delegate /passwordd:topsecret /OU:"ou=XP Client,ou=Domain Computers,dc=handsome,dc=and,dc=smart,dc=com" /REBOOT && goto end || goto move_to_16
    
    
    :move_to_16
    echo.%computername%|findstr /B /I /C:"16" >nul 2>&1 && netdom JOIN %computername% /Domain:handsome.and.smart.com /userd:delegate /passwordd:topsecret /OU:"ou=XP Client,ou=Domain Computers,dc=handsome,dc=and,dc=smart,dc=com" /REBOOT && goto end || goto move_to_104OU  
    
    
    :move_to_104OU
    echo.%computername%|findstr /B /I /C:"104" >nul 2>&1 && netdom JOIN %computername% /Domain:handsome.and.smart.com /userd:delegate /passwordd:topsecret /OU:"ou=104 Computers,dc=handsome,dc=and,dc=smart,dc=com" /REBOOT && goto end || goto move_to_scscOU
    
    
    :move_to_scscOU
    echo.%computername%|findstr /B /I /C:"SCSC" >nul 2>&1 && netdom JOIN %computername% /Domain:handsome.and.smart.com /userd:delegate /passwordd:topsecret /OU:"ou=SCSC COMPUTERS,ou=Domain Computers,dc=handsome,dc=and,dc=smart,dc=com" /REBOOT:22 && goto end || goto default_OU
    
    
    :move_to_default_OU
    ::If name does not match any strings, place computer in default container.
    echo.%computername%|findstr /B /I /C:"" >nul 2>&1 && netdom JOIN %computername% /Domain:handsome.and.smart.com /userd:delegate /passwordd:topsecret /OU:"OU=DEFAULT CLIENTS,OU=XP ALL OU,dc=handsome,dc=and,dc=smart,dc=com" /REBOOT && goto end
    
    
    
    :end
    
    ::Pause was used in the attempt to troubleshoot.
    pause
    

1 个答案:

答案 0 :(得分:0)

我不会使用|除了在某些情况下,它确实有名称意义,这不是其中之一。批处理始终存在问题。

我会使用标准函数调用进行重写(使用:标记命名法来标题你的函数和GOTO:EOF来终止它们(在底部带有:EOF标记)。使用Call和Goto命令来移动你可以从系统中提取所需的信息,然后从写入文件并使用FOR / F拉出来可靠地注入变量。

您需要使用%%的唯一时间是使用FOR / F.

Domain加入系统有几种方法; NetDom,WMIC,Powershell,VBS功能,et-cetra。我的偏好是使用最新的方法并将其外部化为一个脚本(例如,将数据放入一个文本文件,然后调用一个powershell函数,该函数返回另一个批处理读取的变量以确定发生了什么)。 Batch真的是为了这样使用而构建的。

最后,我在服务器上有一个脚本,可以在加入后将计算机移动到相应的OU中。如果您犯了错误并在部署期间捕获它,那么在主机脚本中执行此操作可能会很麻烦。这是按下的另一个按钮,没什么大不了的。还允许您使用部署组策略设置。