johnswaine
asked on
VBScript to delete ODBC data source on multiple servers
Hi,
I have 2 scripts that i have found somewhere on the internet. One that creates an ODBC data source across multiple servers and one that deletes a data source on a specified machine. What i need to do is essentially put the two together so that i can delete across multiple servers easily. Any help would be much appreciated as i know little VB
Delete
Create
I have 2 scripts that i have found somewhere on the internet. One that creates an ODBC data source across multiple servers and one that deletes a data source on a specified machine. What i need to do is essentially put the two together so that i can delete across multiple servers easily. Any help would be much appreciated as i know little VB
Delete
Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\ODBC\ODBC.INI\XXX"
objReg.DeleteKey HKEY_LOCAL_MACHINE, strKeyPath
strKeyPath = "SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources"
strValueName = "XXX"
objReg.DeleteValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName
Create
Option Explicit
'Constants
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
Const HKEY_CURRENT_CONFIG = &H80000005
'Variables
On Error resume next
Dim DataSourceName
Dim DatabaseName
Dim Description
Dim DriverPath
Dim LastUser
Dim Server
Dim Trusted_connection
Dim DriverName
Dim InputFile
Dim iFSO
Dim ifile
Dim sComputer
Dim sPath
'Value assignment
DataSourceName = "DSN"
DatabaseName = "DSNBMM"
DriverPath = "C:\WINNT\System32\sqlsrv32.dll"
LastUser="xxx"
Server="xxx"
Trusted_connection="No"
Description="BMM:" & DatabaseName
DriverName="SQL Server"
InputFile="Servers.txt"
Set iFSO = CreateObject("Scripting.FilesyStemObject")
Set ifile = iFSO.OpenTextFile(inputfile)
sPath = "SOFTWARE\ODBC\ODBC.INI\" & DataSourceName
'Read and loop through the input file
Do until ifile.AtEndOfLine
sComputer = ifile.ReadLine
If (0 = CreateRegKey(sComputer, HKEY_LOCAL_MACHINE, sPath)) Then
SetRegKeyStrValue sComputer, HKEY_LOCAL_MACHINE, sPath, "Database", DatabaseName
SetRegKeyStrValue sComputer, HKEY_LOCAL_MACHINE, sPath, "Description", Description
SetRegKeyStrValue sComputer, HKEY_LOCAL_MACHINE, sPath, "Driver", DriverPath
SetRegKeyStrValue sComputer, HKEY_LOCAL_MACHINE, sPath, "LastUser",LastUser
SetRegKeyStrValue sComputer, HKEY_LOCAL_MACHINE, sPath, "Server",Server
SetRegKeyStrValue sComputer, HKEY_LOCAL_MACHINE, sPath, "Trusted_Connection",Trusted_connection
Else
Exit Do
End If
'Write in "ODBC Data Sources" Key to allow ODBC Manager list & manage the new DSN
SetRegKeyStrValue sComputer, HKEY_LOCAL_MACHINE, "SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources", DataSourceName , DriverName
'MsgBox (sComputer & " DONE!")
Loop
ifile.Close
Set ifile = Nothing
Set iFSO = Nothing
'Create RegKey Function
Function CreateRegKey (sComputer, hTree, sKey)
Dim oRegistry
Dim lResult
Set oRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}//" & sComputer & "/root/default:StdRegProv")
lResult = oRegistry.CreateKey(hTree, sPath)
If (lResult = 0) And (Err.Number = 0) Then
CreateRegKey = 0
Else
CreateRegKey = 1
msgbox("Create Key " & sKey & " Failed")
End If
Set oRegistry = Nothing
End Function
'set RegKey Function
Function SetRegKeyStrValue (sComputer, hTree, sKey, sValueName, sValue)
Dim oRegistry
Dim lResult
Set oRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}//" & sComputer & "/root/default:StdRegProv")
lResult = oRegistry.SetStringValue(hTree, sKey, sValueName, sValue)
If (lResult = 0) And (Err.Number = 0) Then
SetRegKeyStrValue = 0
Else
SetRegKeyStrValue = 1
msgbox("Set Value for " & sKey & " Failed")
End If
Set oRegistry = Nothing
End Function
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Ah yes, sorry about that....that line doesn't actually need to be there, because sValueName is passed to the function anyway.
Thanks for the grade.
Regards,
Rob.
Thanks for the grade.
Regards,
Rob.
ASKER
Thanks a lot for this, it will save me a hell of a lot of time.
In the DeleteRegStrValue Function, I changed sValueName = "XXX" to sValueName = datasourcename and it works perfectly
Thanks again
Neil