千家信息网

MSCC无法自动部署客户端

发表于:2025-02-11 作者:千家信息网编辑
千家信息网最后更新 2025年02月11日,前言:SCCM是微软的一款资产管理软件,正常情况下和Windows兼容的很好。但是它严重依赖Windows原生的一些服务:AD,IIS,SQLserver,WDS,WSUS等等,所以部署的时候最好使用
千家信息网最后更新 2025年02月11日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>&1SCHTASKS /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 offecho -----------------------------echo      系统正在配置SCCM.......echo      出现用户帐户提示,请确定echo        IT TEL:6666/8888echo ----------------------------->nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"if '%errorlevel%' NEQ '0' (goto UACPrompt) else ( goto gotAdmin ):UACPromptecho Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs""%temp%\getadmin.vbs"exit /B:gotAdminif exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )# 上面是以管理员运行,否则开启用户帐户控制的客户端无权限执行脚本文件echo hostname >>add_group_log.txt 2>&1net localgroup administrators domain\sub-company-group /add >>add_group_log.txt 2>&1SCHTASKS /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 offecho -----------------------------echo      系统正在配置SCCM.......echo      出现用户帐户提示,请确定echo        IT TEL:6666/8888echo ----------------------------->nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"if '%errorlevel%' NEQ '0' (goto UACPrompt) else ( goto gotAdmin ):UACPromptecho Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs""%temp%\getadmin.vbs"exit /B:gotAdminif exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )copy \\172.31.200.200\soft\site.reg c:\site.regcopy \\172.31.200.200\soft\addregtest.bat c:\addreg.batcd /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>&1SCHTASKS /Run /S %%a /U %%a\administrator /P thisispasswrod /I /TN startRUN >>execlog.txt 2>&1)pause


0