0

虽然,我看起来像是地球上最聪明的人之一,但我并不精通脚本或编程。

我当前的基本设置是:

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

这是我试图完全自动化本文中详述的域加入过程的图像。

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

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

重新启动后,我希望此脚本执行以下 ALL AUTOMATED:

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

  1. 通过字符串或任何适当的方式查询计算机名称
  2. 如果计算机名称与字符串匹配,则将此计算机加入此域和 OU,然后重新启动,脚本应该结束或
  3. 如果计算机名称不匹配,请转到下一条语句以检查匹配并将此计算机加入此域和 OU,然后重新启动并且脚本应该结束或
  4. 如果没有找到匹配的字符串,递归语句并将计算机加入默认 OU,然后重新启动,脚本应该结束

本质上,所有计算机都将加入指定 OU 下的域。

重要的东西已经改变以保护无辜者!

这个尝试是从几个网站汇集而来的,但主要来自Find out a 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
4

1 回答 1

0

我不会使用 | 除了在某些情况下确实有名气,这不是其中之一。Batch 一直存在管道问题。

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

唯一需要使用 %% 的时候是使用 FOR /F。

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

最后,我会在服务器上有一个脚本,以便在加入后将计算机移动到适当的 OU 中。如果您在部署过程中犯了错误并发现它,那么在主机脚本中执行此操作可能会很麻烦。再按一个按钮,没什么大不了的。还允许您使用部署组策略设置。

于 2014-01-28T14:54:45.950 回答