MSCC无法自动部署客户端
作者:互联网
前言:
SCCM是微软的一款资产管理软件,正常情况下和Windows兼容的很好。
但是它严重依赖Windows原生的一些服务:
AD,IIS,SQLserver,WDS,WSUS等等,所以部署的时候最好使用一台干净的服务器。
我就在一台开启了IIS和SQLserver服务器安装SCCM时出现了错误。
换一台干净的服务器,安装很简单。
在安装客户端的时候却发生了意外。。。
背景:
1、在分公司部署SCCM,但是客户机加入总公司的域,并无法获得域管理员帐号密码。
2、所有服务器,包括SCCM都在单独的本地域:Server.local
3、客户机之前使用自制工具,做过无损域迁移。
出现的问题:
1、使用SCCM发现了包括母公司和其它子公司的所有计算机和用户。
2、域迁移的计算机不能推送SCCM客户端。
3、客户端不能自动发现SCCM创建的站点。
怎么办?:
解决方案:
1、只想发现子公司的用户和设备,这让我想到了AD中的OU项。
AD系统发现和AD的用户发现中,设置子公司的OU,再发现就是子公司所有的设备和用户了。
2、域迁移的计算机不能推送SCCM客户端。
1)、没有域管理员帐户,但是笔者想到域帐户可以登陆到每一台域计算机,所以,任意域帐户都是可以用于域内认证的,使用个人域帐户,成功发现和安装。
2)、安装时,发现部分计算机无法安装,经调查之前做过域迁移,经比较,原来客户迁移时没有把子公司的组织加入管理员组。
计算机-管理-系统工具-本地用户和组-组,在administrators加入域的子公司组织代码。格式:domain\group
3)、这个时候,所有子公司的域用户帐户都会获得管理员权限,随之而来的问题是:
难道所有客户端都手动添加一次吗?
这样做显然效率低下,于是我想到了使用批处理解决问题,但是必须要有一个在本地计算机有权限的帐户,还好每台计算机都有Administrator帐户,并且密码都是一样的。
客户端使用自己的域帐户登陆的,怎么能让每台客户端都自动运行批处理?
第一步:使用SCHTASKS远程创建计划任务。为每台客户端添加一个计划任务,所属有者为domain\group,这样使用域帐户登陆的用户都会所选计划任务。代码:
for /f "tokens=*" %%host in (hostlist.txt) do ( echo %%host >>add_task_log.txt 2>&1 SCHTASKS /Create /F /S %%a /U %%host\administrator /P thisispasswrod /RU "domain\sub-company-group" /SC MINUTE /MO 2 /TN add_group /TR \\172.31.200.200\soft\add_premission.bat >>add_task_log.txt 2>&1 ) pause
每二步:编辑运行add_premission.bat的脚本。
add_premission主要功能:向Administrators组添加domain\sub-company-group,删除上一条计划任务add_group,创建新的计划任务StartRun
@echo off echo ----------------------------- echo 系统正在配置SCCM....... echo 出现用户帐户提示,请确定 echo IT TEL:6666/8888 echo ----------------------------- >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" if '%errorlevel%' NEQ '0' ( goto UACPrompt ) else ( goto gotAdmin ) :UACPrompt echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs" "%temp%\getadmin.vbs" exit /B :gotAdmin if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" ) # 上面是以管理员运行,否则开启用户帐户控制的客户端无权限执行脚本文件 echo hostname >>add_group_log.txt 2>&1 net localgroup administrators domain\sub-company-group /add >>add_group_log.txt 2>&1 SCHTASKS /Delete /F /TN add_group SCHTASKS /Create /F /RU "domain\sub-company-group" /SC ONSTART /TN StartRun /TR \\172.31.200.200\soft\modify_reg.bat >>add_group_log.txt 2>&1
3)、客户端不能自动发现SCCM创建的站点
可能原因是服务器和客户端不在同一个域中,所以需要改客户端,SCCM的DNS站点值
关于StartRun任务,是用来修改客户端站点值的。因为给域用户添加的计划任务,所以系统启动时,是不会执行的。
所运行的脚本modify_reg.bat。
以管理员方式运行,需要先把注册表文件site.reg和调用注册表的批处理addreg.bat复制到本地,再调用addreg.bat注入注册表。
代码:
@echo off echo ----------------------------- echo 系统正在配置SCCM....... echo 出现用户帐户提示,请确定 echo IT TEL:6666/8888 echo ----------------------------- >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" if '%errorlevel%' NEQ '0' ( goto UACPrompt ) else ( goto gotAdmin ) :UACPrompt echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs" "%temp%\getadmin.vbs" exit /B :gotAdmin if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" ) copy \\172.31.200.200\soft\site.reg c:\site.reg copy \\172.31.200.200\soft\addregtest.bat c:\addreg.bat cd /D c:\ addreg.bat
注册表side.reg:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\DP] "ManagementPoints"="CMRDSV017.tmrd.local" "SiteCode"="DM1" [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Mobile Client] "AssignedSiteCode"="DM1" [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\CCMSetup] "LastValidMP"="http://CMRDSV017.tmrd.local" [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\CCM\LocationServices] "DnsSuffix"="TMRD.LOCAL"
addreg.bat
regedit /s "c:\1.reg"
4)、最后,手动执行StartRun这个任务。
for /f "tokens=*" %%a in (hostlist.txt) do ( echo %%a >>execlog.txt 2>&1 SCHTASKS /Run /S %%a /U %%a\administrator /P thisispasswrod /I /TN startRUN >>execlog.txt 2>&1 ) pause
标签:group,temp%,部署,SCCM,echo,add,MSCC,客户端 来源: https://blog.51cto.com/yishi/2375508