DSN changes are ubiquitous in any most systems that need to connect directly to a database. Although you can prevent them by aliasing your DB to a CNAME and doing the modification globally, or adding an additional IP address, that’s something you learn “for the next time”. Here’s my script on how to do this easily.
The code:
Option Explicit const HKEY_LOCAL_MACHINE = &H80000002 Dim DBs, strComputer, StdOut, oReg, Servers, NewServer ' Edit the following lines DBs = Array("DBName", "AnotherDB", "YetAnotherDB") Servers = Array("servername", "servername.domain.local", "serveralias") NewServer = "newserver.domain.local" strComputer = "." Set StdOut = WScript.StdOut Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_ strComputer & "\root\default:StdRegProv") ChangeDSN "SOFTWARE\ODBC\ODBC.INI" ChangeDSN "SOFTWARE\Wow6432Node\ODBC\ODBC.INI" Sub ChangeDSN(Root) Dim arrSubKeys, strDBName, subkey, bMatchDB, DB, bMatchServer, Server, strServerName oReg.EnumKey HKEY_LOCAL_MACHINE, Root, arrSubKeys If IsNull(arrSubKeys) Then Exit Sub For Each subkey In arrSubKeys 'StdOut.WriteLine subkey ' Check if the DB name is in the list of moved names oReg.GetStringValue HKEY_LOCAL_MACHINE, Root & "\" & subkey, "Database", strDBName oReg.GetStringValue HKEY_LOCAL_MACHINE, Root & "\" & subkey, "Server", strServerName 'StdOut.WriteLine "DBName is " & strDBName bMatchDB = False bMatchServer = False strDBName = LCase(strDBName) strServerName = LCase(strServerName) For Each DB In DBs If LCase(DB) = strDBName then bMatchDB = True Next For Each Server in Servers If LCase(Server) = strServerName Then bMatchServer = True Next If bMatchDB And bMatchServer Then ' Yes, so make dure the DB name is set correctly StdOut.WriteLine subkey & " - Matched" oReg.SetStringValue HKEY_LOCAL_MACHINE, Root & "\" & subkey, "Server", NewServer End If Next End Sub
Now, put this on an available share and just execute this on all the workstation using your management software or use psexec to run this on all the machines you need:
C:\Users\dafonso\Desktop> psexec \\* -u domain\user cscript.exe //nologo \\share\ChangeDSN.vbs
That’s it.