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

Dav*_*nis 5 windows powershell odbc hadoop

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

根据here,有三种方法可以做到这一点。第一个是直接扰乱注册表,如果可能的话我想避免这种情况。

第二种是使用 odbcconf。问题是,当我在 Windows 7 和 Windows 10 上运行以下命令时,它会出现 ODBC 管理器的配置窗口,但我指定的值均未填写。如果我为 SQL Server 创建 DSN,则此然而,确实有效,所以它似乎是特定于驱动程序的。我已经仔细检查过我的设置是否正确,但甚至连名称都没有设置好。请参阅下面的屏幕截图了解其外观。

odbcconf CONFIGSYSDSN "Cloudera ODBC Driver for Impala" "DSN=Testing|Server=server"
Run Code Online (Sandbox Code Playgroud)

打开的窗口的屏幕截图

第三种是使用Powershell CmdLet、Add-OdbcDsn。当我对 SQL Server 或 Cloudera Impala 运行以下命令时,它只是挂起,甚至在 10 分钟后也没有返回。Powershell 的资源使用率基本上为 0,并且我没有看到系统上有任何活动。ODBC 管理器中未显示 DSN。

Add-OdbcDsn -Name "testing" -Driver "SQL Server" -DsnType "System"
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*nis 3

因此,由于没有人回答这个问题,我将继续在下面填写我最终所做的事情,供像 @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" 
Run Code Online (Sandbox Code Playgroud)