2010-06-30 103 views
0

我需要在〜30臺計算機上卸載ODBC數據源,並希望能比使用ODBC管理GUI更快捷。這是一次性交易,所以我希望使用VBS或批處理文件。我試過使用reg delete,但數據源仍然在ODBC管理GUI中顯示出來。如何使用批處理或VBS來卸載ODBC數據源?

任何人都知道如何使用VBS或批處理文件卸載ODBC數據源?

回答

1

你可以做到,但它不是很整潔,因爲你必須直接編輯註冊表。更具體地說,您的DSN(或至少是我使用過的系統中的那些)存儲在HKLM\SOFTWARE\ODBC\ODBC.INI中,作爲子目錄和ODBC Data Sources子目錄下的單個密鑰。

此Technet文章應該給你所有的技術細節:Can I Create and Delete a DSN Using a Script?

在一般情況下,如果你需要通過腳本做一些事情時,Scripting Guy Blog是尋找信息的好地方。

+0

謝謝,我不知道我是如何錯過那篇文章的。顯然我錯過了'ODBC Data Sources'鍵。 – Stevoni 2010-07-01 14:58:23

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