以程式方式將 ODBC DSN 添加到 Windows 上的 ODBC 管理器的問題
我正在嘗試自動化一些配置,作為其中的一部分,我們需要通過腳本添加 ODBC DSN。我嘗試使用的驅動程序是 Cloudera Impala ODBC 連接器,從這裡下載。它將執行的所有機器都將執行 Windows,其中大多數是 Windows 8.1 或 10。我已經在 Windows 7(如果可能)和 Windows 10 上測試了以下所有內容,結果相同。我可以在這台機器上手動創建一個 DSN,所以驅動程序似乎安裝正確。我還用使用者 DSN 和系統 DSN 嘗試了所有這些,但沒有運氣。
根據這裡,有三種方法可以做到這一點。第一個是直接弄亂系統資料庫,如果可能的話,我想避免這種情況。
第二個是使用odbcconf。問題是,當我在 Windows 7 和 Windows 10 上執行以下命令時,它會出現一個 ODBC Administrator 的配置視窗,但我指定的值都沒有填寫。如果我為 SQL Server 創建一個 DSN,這個但是,確實有效,因此它似乎是特定於驅動程序的。我已經仔細檢查過我設置正確,但甚至名稱都沒有設置。請參閱下面的螢幕截圖以了解它的外觀。
odbcconf CONFIGSYSDSN "Cloudera ODBC Driver for Impala" "DSN=Testing|Server=server"
第三種是使用Powershell CmdLet,Add-OdbcDsn。當我為 SQL Server 或 Cloudera Impala 執行以下命令時,它只是掛起,即使 10 分鐘後也不會返回。Powershell 的資源使用量基本上為 0,而且我沒有看到系統上有任何活動。沒有 DSN 顯示在 ODBC 管理器中。
Add-OdbcDsn -Name "testing" -Driver "SQL Server" -DsnType "System"
關於如何解決其中任何一個問題以便我繼續前進的任何想法?
因此,由於沒有人回答這個問題,我將繼續填寫我最終在下面所做的事情,供@gimpy 等可能正在尋找類似答案的人使用。
我最終只是使用系統資料庫項的路線,執行一個 .reg 文件以添加正確的 ODBC 資訊。請參閱下面的範例,了解我在 .reg 文件中放置的內容以使其工作。
我將把這個答案標記為解決方案,直到/如果有人能夠給我一個回答上述其他兩種方法之一的答案,我會覺得這是更可取的。
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources] "Non-Prod Impala Connection"="Cloudera ODBC Driver for Impala" [HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\Non-Prod Impala Connection] "AllowHostNameCNMismatch"="1" "AllowSelfSignedServerCert"="1" "AsyncExecPollInterval"="10" "AuthMech"="1" "AutoReconnect"="1" "CheckCertRevocation"="1" "DelegateKrbCreds"="1" "DelegationUID"="" "DESCRIPTION"="" "Driver"="Cloudera ODBC Driver for Impala" "EnableSimulatedTransactions"=0 "Host"="<ImpalaHost>" "KrbFQDN"="_HOST" "KrbRealm"="<Domain>" "KrbServiceName"="impala" "LCaseSspKeyName"="" "Port"="21050" "RowsFetchedPerBlock"="10000" "Schema"="<Database>" "ServicePrincipalCanonicalization"="1" "SocketTimeout"="30" "SSL"="1" "StringColumnLength"="32767" "TrustedCerts"="<CertificatePath>\rootca.cert.pem" "TSaslTransportBufSize"="1000" "UID"="" "UseKeytab"="0" "UseNativeQuery"="0" "UseOnlySSPI"="0" "UseSASL"="1" "UseSQLUnicodeTypes"="0" "UseSystemTrustStore"="1"