This script will add the user’s correct Username and UserInitials to the MS Office registry key to prevent the first time prompt when a user runs up a program in the Office suite.
It has been specifically designed to populate the values for multiple versions of Office as per the arrVersions array. Please review the script below to understand how this works.
Enjoy!
' This script will add the Users' correct Username and UserInitials to the MS Office ' registry key to prevent the first time prompt when a user runs up a program in the ' Office suite. ' Note that all Office versions before 2007 (12.0) used a Binary value, hence the ' reason for needing to use the ConvertStringToBinary() function. ' It gets the username and initials in one of two ways: ' 1) It first tries Active Directory to get the given and surname properties. ' 2) If that fails, it derives the initials from the logged on username based on ' common naming standards. ' For Example: ' If the username is Jeremy.Saunders, the initials will be JS ' If the username is jsaunders, the initals will also be JS ' This is easy to change/add/modify should you be using a different naming standard ' that follows a different pattern. ' Release 1.1 Modified by Jeremy@jhouseconsulting.com on 24th November 2010. ' Written by Jeremy@jhouseconsulting.com on 19th April 2009. Option Explicit Dim arrBinaryValue(), strUsername, strUserInitials, strTemp, intNumberOfChars, objWSHNetwork Dim objShell, strComputer, objReg, strKeyRoot, strKeyPath, arrVersions, Version, return Dim strUsernameInBinary, strUserInitialsInBinary, objSysInfo, strUserDN, objUserProperties Dim blnDebug Const HKEY_CURRENT_USER = &H80000001 ' ********************** Set these variables ***************************** ' Set this to True to help debug issues. blnDebug = False ' Add the Office application versions you are using to the arrVersions array. arrVersions = Array("10.0","11.0","12.0","14.0") ' Note that... ' - Office 2000 = 9.0 ' - Office XP/2002 = 10.0 ' - Office 2003 = 11.0 ' - Office 2007 = 12.0 ' - Office 2010 = 14.0 ' ************************************************************************ strComputer = "." strUsername = "" strUserInitials = "" Set objShell = WScript.CreateObject("WScript.Shell") Set objWSHNetwork = WScript.CreateObject("WScript.Network") Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ strComputer & "\root\default:StdRegProv") On Error Resume Next ' Get the user properties from Active Directory. Set objSysInfo = CreateObject("ADSystemInfo") If Err.Number = 0 Then strUserDN = objSysInfo.UserName Set objUserProperties = GetObject("LDAP://" & strUserDN) If Err.Number = 0 Then strUsername = objUserProperties.givenName & " " & objUserProperties.SN strUserInitials = Left(objUserProperties.givenName, 1) & Left(objUserProperties.SN, 1) Else If blnDebug Then wscript.echo "Cannot Retrieve User Properties from Active Directory." End If End If Else If blnDebug Then wscript.echo "Cannot Connect to Active Directory." End If End If On Error Goto 0 Err.Clear If strUsername="" Then strUsername = objWSHNetwork.UserName If instr(strUsername, ".") > 0 Then strTemp = Split(strUsername, ".") strUserInitials = ucase(Left(strTemp(0), 1)) & ucase(Left(strTemp(1), 1)) Else strUserInitials = ucase(Left(strUsername, 2)) End If End If If blnDebug Then wscript.echo "The username is: " & strUsername & vbcrlf & _ "The initials are: " & strUserInitials End If If IsArray(arrVersions) Then For Each Version in arrVersions strKeyRoot = "HKCU\" strKeyPath = "Software\Microsoft\Office\" If Version = "9.0" OR Version = "10.0" OR Version = "11.0" Then strKeyPath = "Software\Microsoft\Office\" & Version If RegKeyExists(strKeyRoot & strKeyPath) Then If NOT RegKeyExists(strKeyRoot & strKeyPath & "\Common") Then return = objReg.CreateKey (HKEY_CURRENT_USER, strKeyPath & "\Common") End If If NOT RegKeyExists(strKeyRoot & strKeyPath & "\Common\UserInfo") Then return = objReg.CreateKey (HKEY_CURRENT_USER, strKeyPath & "\Common\UserInfo") End If strKeyPath = strKeyPath & "\Common\UserInfo" strUsernameInBinary = ConvertStringToBinary(strUsername) objReg.SetBinaryValue HKEY_CURRENT_USER, strKeyPath, "UserName", strUsernameInBinary strUserInitialsInBinary = ConvertStringToBinary(strUserInitials) objReg.SetBinaryValue HKEY_CURRENT_USER, strKeyPath, "UserInitials", strUserInitialsInBinary End If Else If RegKeyExists(strKeyRoot & strKeyPath & Version) Then If NOT RegKeyExists(strKeyRoot & strKeyPath & "\Common") Then return = objReg.CreateKey (HKEY_CURRENT_USER, strKeyPath & "\Common") End If If NOT RegKeyExists(strKeyRoot & strKeyPath & "\Common\UserInfo") Then return = objReg.CreateKey (HKEY_CURRENT_USER, strKeyPath & "\Common\UserInfo") End If strKeyPath = strKeyPath & "\Common\UserInfo" objReg.SetStringValue HKEY_CURRENT_USER, strKeyPath, "UserName", strUsername objReg.SetStringValue HKEY_CURRENT_USER, strKeyPath, "UserInitials", strUserInitials End If End If Next End If Set objWSHNetwork = Nothing Set objShell = Nothing Set objReg = Nothing Set objSysInfo = Nothing wscript.quit(0) Function ConvertStringToBinary(strString) ReDim arrBinaryValue(len(strString) * 2 + 1) For intNumberOfChars = 0 To Len(strString) - 1 If intNumberOfChars = 0 Then arrBinaryValue(0) = Asc(Mid(strString, intNumberOfChars + 1, 1)) arrBinaryValue(1) = 0 Else arrBinaryValue(intNumberOfChars * 2) = Asc(Mid(strString, intNumberOfChars + 1, 1)) arrBinaryValue(intNumberOfChars * 2 + 1) = 0 End If Next arrBinaryValue(Len(strString) * 2) = 0 arrBinaryValue(Len(strString) * 2 + 1) = 0 ConvertStringToBinary = arrBinaryValue End Function Function RegKeyExists(ByVal sRegKey) ' Returns True or False based on the existence of a registry key. Dim sDescription, oShell Set oShell = CreateObject("WScript.Shell") RegKeyExists = True sRegKey = Trim (sRegKey) If Not Right(sRegKey, 1) = "\" Then sRegKey = sRegKey & "\" End If On Error Resume Next oShell.RegRead "HKEYNotAKey\" sDescription = Replace(Err.Description, "HKEYNotAKey\", "") Err.Clear oShell.RegRead sRegKey RegKeyExists = sDescription <> Replace(Err.Description, sRegKey, "") On Error Goto 0 Set oShell = Nothing End Function