前言
我喜欢或者说只愿意分享一些技巧性地技术方案,而不是配置方案或者入门指引,也就是说我的文章假设你已经为前置技能加点了。
环境
SCCM 2012
背景
SCCM OSD默认情况下是非交互式静默安装系统的,如果配合MDT的话就可以实现交互式安装了。不过我不喜欢MDT的操作界面,所以我自己开发了一个HTA(这个HTA以后有机会再分享,毕竟HTA其实是开发的内容,你要有一定脚本和HTML的编写经验才行),它提供了一些选项,比如选择安装win7 64还是Win7 32位系统,安装什么可选软件等待。其中有个功能需要检查计算机是否存在域中(PS:我没有说手动输入啊,重装电脑的话SCCM自动根据UUID会识别原有计算机名,也就是"_SMSTSMachineName")
有这个需求后,我当时就bing了(谷歌节哀,另外记住搜索是你的最好的朋友,就算你在牛A与牛C之间,参考别人的经验也对你百利而无一害),找到某位同学问的帖子
http://bbs.winos.cn/thread-136160-1-1.html
这位同学也是想在OSD中查询,好吧二楼脚本不错,脚本有着落了,谢谢二楼。当然楼主回复说不行,嗯当然这个脚本要稍微修改一下了,还有WinPE。
技术分析
首先,脚本运行在什么环境?没错,WinPE。WinPE是什么大家应该都知道,其实它就是一个精简的Windows系统。所以它只有少部分DLL运行库和exe程序。当然它也有一些WinPE特有工具。所以说它没有dsquery,没有ADSI(二楼脚本就不能运行了)。另外微软在ADK/AIK中提供了一些cab,比如WMI,Scripting,HTA等,它可以为WinPE提供额外的功能。不过就是没有ADSI。还好国外有能人提取了ADSI,有了ADSI后,你就可以查询域的信息了。
其次,WinPE没有加域,这是什么意思呢,用过KMS的同学可能知道(我说不是网上盗版激活的那些,是真正的啊),没有加域电脑不能激活Windows,不过手动指向KMS服务器就能激活了,这因为没加域电脑没有权限查询到KMS服务器。二楼脚本也一样。它需要指定DC服务器
操作过程
终于转入正题了,不过我觉得上面的思路还是很重要的,毕竟大家都会勾股定理,会不会用就是另外一回事,这要看思路。
1. 在默认的Boot image中找到WinPE镜像路径(以32位为例子,我的环境我就只有一个32位WinPE,因为32位WinPE可以为 32位和64位Images部署,而64位只能部署64位Images )
2. 参考这个老外的网页。下载ADSI 5.0,添加ADSI,里面的readme够详细的了,照着操作没有错的。其中第三步可以不做,因为你可以在SCCM中的Boot Images的Optional Compoents中添加
http://deploymentresearch.com/Research/Post/331/ADSI-plugin-for-WinPE-5-0
3. 有了新的WinPE镜像之后,就要导入到SCCM中了,点击Add boot Image。微软的东西就是傻瓜,这个操作过程很简单我就不贴图了,添加好后记得添加驱动和Optional Compoents
4. 有了ADSI二楼脚本修改一下就可以运行了。
On Error Resume Next Set oTaskSequence = CreateObject ("Microsoft.SMS.TSEnvironment") If Err.Number<>0 Then WScript.Quit Err.Clear ‘输入用户名和密码,要查询的计算机名 sUser = "domain\user" sPassword = "Password" strcomputer ="PC_NAME" Const ADS_SCOPE_SUBTREE = 2 Const ADS_SECURE_AUTHENTICATION = &H1 Const ADS_SERVER_BIND = &H200 Dim objConnection, objCommand, objRecordSet Set objConnection = CreateObject("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") objConnection.Provider = "ADsDSOObject" objConnection.Properties("User ID") = sUser objConnection.Properties("Password") = sPasswd objConnection.Properties("Encrypt Password") = TRUE objConnection.Properties("ADSI Flag") = ADS_SERVER_BIND Or ADS_SECURE_AUTHENTICATION objConnection.Open "Active Directory Provider" Set objCommand.ActiveConnection = objConnection objCommand.Properties("Page Size") = 1000 objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE ‘指定DC服务器名字 objCommand.CommandText = "SELECT ADsPath FROM ‘LDAP://DC_SERVER_NAME/dc=YourDomainName,dc=com‘ WHERE objectCategory=‘computer‘ AND Name=‘" & strcomputer & "‘" Set objRecordSet = objCommand.Execute ‘添加结果到SCCM OSD中的变量"IsDomainPC" If Err.Number<>0 Then oTaskSequence ("IsDomainPC")="false" Else If objRecordSet.PageCount Then oTaskSequence ("IsDomainPC")="true" Else oTaskSequence ("IsDomainPC")="false" End If End If
本文出自 “11247471” 博客,请务必保留此出处http://11257471.blog.51cto.com/11247471/1746657
原文地址:http://11257471.blog.51cto.com/11247471/1746657