简介
这简直就是歧视,在MDT使用变量时,数据库设置时,居然不能用中文。
计算机描述,我将在数据库中设置为使用人,主要是其他地方也不方便看。
描述是存在注册表中的,未来自动化也将会使用使用人这个字段,用来注册OCS这样,有标签,使用人字段的软件。
方向
解决MDT/BDD无法加入带中文名称的OU问题_xmuxsp的技术博客_51CTO博客
刚开始接触BDD 2007的时候,就知道BDD 2007有个bug,加域时可以选择加入指定的OU,但这个OU名称是不能包含中文的。因为包含中文名称的OU,在实际展现时会显示为乱码。 实际上不止是machineobjectOU这个变量,所有的变量,只要是涉及双字节字符,都会显示为乱码。 最近突然心血来潮,想趁着学习脚本的劲头,把这个问题解决了。 问题在哪里? 粗略分析了一下,MDT里的变量都保存在variables.dat中,这其实是一个XML文件,由ztigather.wsf这个脚本生成和更新。生成后,Wizard.hta再读取variables供各个脚本调用——用写字板打开这个文件,会发现所有中文都是乱码,如果我中断期间的过程,手动修改Variables.dat纠正乱码,是可以正常识别的——所以我判断问题出在Variables.dat中的乱码。 刚开始我认为乱码是发生在写入时,比如写入函数将错误的编码过的中文字符串写入了XML文件中。但我发现用Notepad++或者记事本打开有乱码的Variables.dat,乱码是能够被正确识别并显示为中文的。于是我怀疑并不是写入函数的问题,而是文件本身编码的问题。 询问了小顾,xml文件只能是由ansi进行编码(GB2312),而在Notepad++右下的编码信息里,显示的是ansi with utf-8,也就是说这个文件被识别为用utf-8编码,莫非是这个问题? 于是我单独测试了一下,验证得知确实是这个问题,如果我强制转换编码为Gb2312后,用写字板打开variables.dat看到的也是正确的中文了 如何修改代码? 因为我之前完全没有系统学习vbscript,这次修改代码闹了不少笑话......好在都解决了 我的思路很简单,在ztigather收集完数据后,强制转换variables.dat的编码,由于是紧密相连的,就没有将转换的脚本独立出来,而是直接黏在了ztigather.wsf的屁股上。这里我借用了别人的代码,生命一下..... 在附件里把修改后的ztigather.wsf附上,以免日后自己都忘记了 ----------------------------------- ©著作权归作者所有:来自51CTO博客作者xmuxsp的原创作品,请联系作者获取转载授权,否则将追究法律责任 解决MDT/BDD无法加入带中文名称的OU问题 https://blog.51cto.com/xmuxsp/284813
很久以前的贴子了,复制一份吧。免得丢了。
设置OU=技术部,尝试解决问题。
解决过程
查日志
配置mdt记录日志到共享目录,但是日志里面没有variables.dat。
打断点
这次尝试bat断点
错误提示是这样的,提示我加入域4次失败,停在了pause任务。挺好。
定位故障
居然还是没有variables.dat
就在recover join domain上下附近,反复打断点,甚至在 recover join domain任务执行时,我终于将一个8k大小的variables.dat,放入了日志目录,MDT时,可以对设置的远程日志目录进行读写。
具体怎么弄出来,我也就不去复现了。
查看故障
为了查看故障以及修复故障,我考虑在MDT安装环境中对故障进行修复。所以又是断点,一般都在State Restore任务组中。
中断以后,复制variables.dat到C盘根目录,我随便改了个名。
用记事本打开。寻找ouname
找了个乱码恢复网站
查到了原有编码和正确编码,至于搜到的GB2312,还真不算对。
解决方案
经过AI,QQ群友的帮助,写了这么个wsf脚本。
<?xml version="1.0" encoding="utf-8"?> <job id="test"><script language="VBScript"><![CDATA[strVarFilePath1 = "C:\VARIABLEStag.DAT"strVarFilePath2 = "C:\VARIABLESout.DAT"str=ReadFile(strVarFilePath1, "UTF-8")WriteToFile strVarFilePath2, Str, "windows-1252"Function ReadFile(FileUrl, CharSet)Dim StrSet stm = CreateObject("Adodb.Stream")stm.Type = 2stm.mode = 3stm.charset = CharSetstm.Openstm.loadfromfile FileUrlStr = stm.readtextstm.CloseSet stm = NothingReadFile = StrEnd FunctionFunction WriteToFile (FileUrl, Str, CharSet)Set stm = CreateObject("Adodb.Stream")stm.Type = 2stm.mode = 3stm.charset = CharSetstm.Openstm.WriteText Strstm.SaveToFile FileUrl, 2stm.flushstm.CloseSet stm = NothingEnd Function]]></script> </job>
用utf-8读VARIABLEStag.DAT,重新编码为windows-1252,并写入VARIABLESout.DAT,执行代码后,乱码修复了。
解决方法
我也找了几遍,并没有找到合适的地方插入一个任务来修复文档编码,只好学习方向中前辈的方法,直接黏在了ztigather.wsf的屁股上。
由于这个wsf,上面已经引入了ZTIUtility.vbs,所以我们将使用变量来定义这个文件路径,测试已经通过,则读文件和覆写文件将是同一个文件。
放在End Class 和 </script>之间。
测试
我相信这将同时解决所有的中文变量问题,也就是说描述和组织单位都将适用。