簡介
這簡直就是歧視,在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,執行程式碼後,亂碼修復了。
解決方法
我也找了幾遍,並沒有找到合適的地方插入一個任務來修復文件編碼,只好學習方向中前輩的方法,直接黏在了ztigather.wsf的屁股上。
由於這個wsf,上面已經引入了ZTIUtility.vbs,所以我們將使用變數來定義這個檔案路徑,測試已經透過,則讀檔案和覆寫檔案將是同一個檔案。
放在End Class 和 </script>之間。
測試
我相信這將同時解決所有的中文變數問題,也就是說描述和組織單位都將適用。
測試暫未透過,將繼續嘗試,實在是不好除錯。
加入域似乎是在Postinstall組中,這裡無法中斷。
似乎可以試試先做描述中文的測試。