Friday, February 10, 2017

(提醒: 這只是筆記, 有些變數或設定可能有錯字或與環境不符, 需要再確認!)

為了自動化 Windows 印表機安裝, 以前就組合過 XP 提供的 VBS 跟 printui.dll
幾年後, Windows 7~10 推出了, 又多了 64 位元要判斷, 才能知道要用哪個版本的驅動程式.

了解一下特性:
1. printui.dll 沒有檔案所在目錄問題, 但如果有同樣名稱的印表機, 會出現 xx印表機(複件) , 讓清單變亂, 而需要先判斷印表機是否存在.
2. VBS 系列因為 Windows 版本及位元數, 語系的不同, 會放在不同目錄.
3. 安裝驅動程式需要指定安裝 inf 檔, 有些廠商的驅動會像這樣:
x86\a.inf
x64\a.inf
所以不能全部 copy 在一起, 又不想去把 inf 合併.

所以這幾天的工作, 就是用批次檔去判斷, 達到可以遠端安裝, 大約的步驟就是:
1. 64 位元與 32 位元: 原本想的是去判斷 Windows\SystemWOW64 或特殊檔案是否存在, 後來發現 7~10 跑起來變數太多, 後來改用 %ProgramPath% 跟 %ProgramPath64% 比對, 再去撈對應的驅動程式.
2. printui.dll 安裝上不太合用, 所以選用 prnmngr.vbs 的安裝為主, 但每個版本的 Windows 把 prnmngr.vbs 都放在不同目錄, 所以要用批次檔搜尋, 只好用組合的方式:
a. 呼叫 cmd /c 去 dir /a-d /b /s %windir%\prnmngr.vbs , 可以取得路徑, 如 XP 下是 C:\Windows\System32\prnmngr.vbs
b. 利用命令提示字元的 for /F , 將剛剛 cmd 的結果, 篩選出 C:\Windows\System32 這字串, 先設定在變數內
3. 再用一個批次檔包起來, 指定 IP , 印表機名稱等資料.

批次檔結構就大約是:
1. 找到 prnmngr.vbs 的目錄, 設定在變數內.
2. 透過 %ProgramPath% 比對目前版本為 32 或 64 位元, 執行 prndrvr.vbs 安裝
3. 將舊的印表機改名
4. 刪除已經退役或更換驅動程式的印表機
5. 刪除前一項印表機的 port
6. 建立新印表機的 port
7. net stop spooler & net start spooler (不一定要執行, 但是有時候裝好, 在印表機伺服器內容看不到東西, 就要執行.)
8. 建立新印表機
9. 依部門別選擇預設印表機