在 Windows 上以编程方式将 ODBC DSN 添加到 ODBC 管理器时出现问题

在 Windows 上以编程方式将 ODBC DSN 添加到 ODBC 管理器时出现问题

我正在尝试自动化某些配置,其中我们需要通过脚本添加 ODBC DSN。我尝试使用的驱动程序是 Cloudera Impala ODBC Connector,可从以下网址下载这里。所有运行此程序的机器都将运行 Windows,其中大多数是 Windows 8.1 或 10。我在 Windows 7(如果可能)和 Windows 10 上测试了以下所有内容,结果相同。我可以手动在此机器上创建 DSN,因此驱动程序似乎安装正确。我还尝试了所有这些方法,包括用户 DSN 和系统 DSN,但都没有成功。

根据这里,有三种方法可以做到这一点。第一种是直接修改注册表,如果可能的话,我希望避免这种情况。

第二种方法是使用 odbcconf。问题是,当我在 Windows 7 和 Windows 10 上运行下面的命令时,它会弹出一个 ODBC 管理员的配置窗口,但我指定的值都没有填写。但是,如果我为 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,而且我没有看到系统上有任何活动。ODBC 管理器中没有显示 DSN。

Add-OdbcDsn -Name "testing" -Driver "SQL Server" -DsnType "System"

关于如何解决这些问题以便我可以继续前进,有什么想法吗?

答案1

因此,由于没有人回答这个问题,我将继续填写我最终在下面所做的事情,以便为可能正在寻找类似答案的人(例如@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" 

相关内容