如何使用Batch或VBS卸载ODBC数据源?

时间:2010-06-30 19:06:07

标签: vbscript odbc uninstall

我需要在~30台计算机上卸载ODBC数据源,并希望比使用ODBC管理GUI更快捷。这是一次性交易,所以我希望使用VBS或批处理文件。我尝试使用reg delete,但数据源仍然在ODBC管理GUI中。

任何人都知道如何使用VBS或批处理文件卸载ODBC数据源吗?

2 个答案:

答案 0 :(得分:1)

你可以做到,但它不是很整洁,因为你必须直接编辑注册表。更具体地说,您的DSN(或者至少是我使用的系统中的DSN)存储在HKLM\SOFTWARE\ODBC\ODBC.INI中,作为子目录和ODBC Data Sources子下的单个密钥。目录

这篇Technet文章应该为您提供所有技术细节:Can I Create and Delete a DSN Using a Script?

一般情况下,如果您需要通过脚本执行某些操作,Scripting Guy Blog是查找信息的好地方。

答案 1 :(得分:0)

我这样做,但是使用“文件DSN”代替系统或用户DSN更容易。然后我只需要删除该文件以摆脱连接。

这里有关于如何在批处理文件中执行文件DSN的草案。关键是在ODBC属性文件中,使用FILEDSN =而不是DSN =作为驱动程序的参数:

SET fileobject=Tools\T4e\t4esql.exe
:loop
 CALL :GETDIR "%dir%"
 IF EXIST "%dir%\%fileobject%" (
   ECHO Directory containing object %fileobject% is %dir%>>forcePasswordReset.bat.log
   GOTO :FOUND
 )
 IF "%dir:~-1%" == ":" (
   ECHO Directory containing "%fileobject%" not found!!!!!>>forcePasswordReset.bat.log
   GOTO :FOUND
 )
GOTO loop
:FOUND
if not exist mssql.dsn (
  ECHO MSSQL DSN not found>>forcePasswordReset.bat.log
  CALL :MSSQLDSN
)
:: test database connectivity
:: test user for uniqueness in database ELSE fail script
echo SELECT COUNT(user_login) FROM Users WHERE user_login='%USERNAME%';>>feset.bat.log
%dir%\%fileobject% -d:"FILEDSN=%CD%\mssql.dsn" -q:"SELECT COUNT(user_login) FROM Users WHERE user_login='%USERNAME%';" -o:%CD%\count.res noheaders nostats
set /P CNT=< %CD%\count.res
echo This user was found in the database %CNT% times.>>feset.bat.log
GOTO :END
:MSSQLDSN
SET /P MDB=What is the MSSQL database name? 
if "%MDB%"=="" (
  ECHO You need to type a MSSQL database name on the local SQL instance.  
  ECHO If you get it wrong, delete the .dsn file and try this script again.
  ECHO.
  GOTO MSSQLDSN
)
:MSSQLDSN
@echo [ODBC]> mssql.dsn
@echo DRIVER=SQL Server>> mssql.dsn
@echo UID=%USERNAME%>> mssql.dsn
@echo Trusted_Connection=Yes>> mssql.dsn
@echo DATABASE=%MDB%>> mssql.dsn
@echo WSID=%COMPUTERNAME%>> mssql.dsn
@echo APP=Microsoft Data ACCESS Components>> mssql.dsn
@echo SERVER=(local)>> mssql.dsn
@echo Description=Local SQL Instance>> mssql.dsn
@echo. >> mssql.dsn
GOTO :EOF
:GETDIR
SET "dir=%~dp1"
SET "dir=%dir:~0,-1%"
::echo %dir%
GOTO :EOF
:END
pause