WDS+MDT网络启动自动部署windows(十七)MDT中文变量,描述,组织单位OU
简介#
这简直就是歧视,在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 Str Set stm = CreateObject("Adodb.Stream") stm.Type = 2 stm.mode = 3 stm.charset = CharSet stm.Open stm.loadfromfile FileUrl Str = stm.readtext stm.Close Set stm = Nothing ReadFile = Str End Function Function WriteToFile (FileUrl, Str, CharSet) Set stm = CreateObject("Adodb.Stream") stm.Type = 2 stm.mode = 3 stm.charset = CharSet stm.Open stm.WriteText Str stm.SaveToFile FileUrl, 2 stm.flush stm.Close Set stm = Nothing End Function ]]> </script> </job>
用utf-8读VARIABLEStag.DAT,重新编码为windows-1252,并写入VARIABLESout.DAT,执行代码后,乱码修复了。
#
解决方法#
经过多天的不断尝试,还是走回了老路,和设置中文描述一样,增加函数来转换windows-1252到UTF-8编码。
不过优化了一下函数。
' 定义 Windows-1252 编码的字符串 Dim strWindows1252 strWindows1252 = "技术部" ' 调用函数将字符串转换为 UTF-8 编码 Dim strUTF8 strUTF8 = ConvertToUTF8(strWindows1252) ' 显示 UTF-8 编码的字符串 MsgBox strUTF8 ' 函数用于将 Windows-1252 编码的字符串转换为 UTF-8 编码 Function ConvertToUTF8(ByVal strInput) Dim objStream, strOutput ' 创建 ADODB.Stream 对象 Set objStream = CreateObject("ADODB.Stream") ' 将原始字符串转换为字节数组 objStream.Type = 2 ' adModeMemory objStream.Charset = "Windows-1252" objStream.Open objStream.WriteText strInput objStream.Position = 0 objStream.Type = 1 ' adModeBinary objStream.Position = 0 ' 将字节数组转换为 UTF-8 编码的字符串 objStream.Type = 2 ' adModeMemory objStream.Charset = "UTF-8" strOutput = objStream.ReadText ' 关闭并释放 Stream 对象 objStream.Close Set objStream = Nothing ' 返回 UTF-8 编码的字符串 ConvertToUTF8 = strOutput End Function
只要一个函数了,变量可以重复赋值。
在ZTIDomainJoin.wsf脚本文件使用ouname前面,重新赋值一下。
150行附近,劫持一下,执行一下转换函数。
小结#
当然,如果有机会,我也许会将这个函数改进ZTIUtility.vbs,外部使用变量时无需转换。暂时还不行,还需要在用的时候转换。
现在已经将函数放ZTIUtility.vbs,用的时候转换一下。
目前需转换的有描述,组织单位两个地方。放入ZTIUtility.vbs后,将可以在任意位置使用中文变量无需转换。
作者:上官飞鸿
出处:https://www.cnblogs.com/jackadam/p/18181281
版权:本作品采用「知识共享-署名-非商业性-禁止演绎(CC-BY-NC-ND)」许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 易语言 —— 开山篇