刚开始接触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附上,以免日后自己都忘记了