2011年7月7日 星期四

如何用Logon Script 來更正Office 的 使用者 user name

用Ghost 出來的OS,其Office 使用者為預設值,如果多人開啟同一份File Server的文件時,最常預到的是出現"唯讀"現象,想要要求使用者關閉,確不知是何人最先開啟。

解決辦法是:要求Office使用者設定"使用者"資訊。
Office 2003 : 工具 => 選項 => 一般 => 使用者名稱
Office 2010 : 檔案 => 選項 => 一般 => 使用者名稱

如果有人不合作,不變更設定,豈不是就沒輒了 ??

還是可以用Logon Script 強制更正:


前略
.........

' for Office : start
hDefKey = &H80000001  '
' Connect to registry provider on target machine with current user'
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
' 將User Name 轉換為 16 進制編碼
iValues = AsciiToHex(objUser.cn)
BinaryValueName = "UserName"
arrHexValues = Split(iValues, ",") ' 分離字串為陣列
aOfficeVersions = Array("14.0","12.0","11.0")  ' 設定更新的Office 版本
' find the Office version(s) installed
For Each sOfficeVersion In aOfficeVersions
  sRegKeyPath = "Software\Microsoft\Office\" & sOfficeVersion & "\Common\UserInfo"  ' Register key path
    If oReg.EnumKey(hDefKey, sRegKeyPath , arrSubKeys) = 0 Then ' 判斷是否有子鍵值
        oReg.SetBinaryValue hDefKey,sRegKeyPath ,BinaryValueName,arrHexValues  ' 更新
    End If
Next 
sRegKeyPath = "Software\Microsoft\Office\Common\UserInfo"    ' Office 2010 有 default User name 位置
If oReg.EnumKey(hDefKey, sRegKeyPath , arrSubKeys) = 0 Then
    oReg.SetBinaryValue hDefKey,sRegKeyPath ,BinaryValueName,arrHexValues
End If
'
Function AsciiToHex(sData)
  ' Turns ASCII string sData into array of hex numerics
  Dim i, aTmp
  For i = 1 To Len(sData)
    If i = 1 Then
      aTmp = "&H" & Hex(Asc(Mid(sData, i))) & ",&H00"
    Else
      aTmp = aTmp & ",&H" & Hex(Asc(Mid(sData, i))) & ",&H00"
    End If
  Next
  ASCIItoHex = aTmp & ",&H00,&H00"
End Function
' --- for office end


更強的寫法,四行搞定:
Set objWord = CreateObject("Word.Application")
objWord.UserName = objUser.cn
objWord.UserInitials = Left(objUser.cn, 1) & Left(objUser.SN, 1)
objWord.Quit

沒有留言:

張貼留言