如何通过代码获取SQL Server ODBC驱动版本?优先使用PowerShell
获取SQL Server ODBC驱动版本的PowerShell及替代方案
方法1:使用PowerShell原生Get-OdbcDriver cmdlet
这是最简便的方法,适用于Windows 8/Server 2012及以上系统(系统自带Wdac模块),可直接查询已注册的ODBC驱动:
# 查询所有SQL Server相关ODBC驱动,输出名称和版本 Get-OdbcDriver -Name "*SQL Server*" | Select-Object Name, Version
如需区分32位/64位驱动,可添加-Platform参数:
# 查询64位SQL Server ODBC驱动 Get-OdbcDriver -Name "*SQL Server*" -Platform 64-bit | Select-Object Name, Version # 查询32位SQL Server ODBC驱动 Get-OdbcDriver -Name "*SQL Server*" -Platform 32-bit | Select-Object Name, Version
方法2:检查驱动文件的版本信息
如果Get-OdbcDriver不可用,可直接读取ODBC驱动对应的DLL文件版本。常见SQL Server ODBC驱动文件路径:
- ODBC Driver 17/18 for SQL Server:
C:\Windows\System32\msodbcsql17.dll(64位)、C:\Windows\SysWOW64\msodbcsql17.dll(32位) - SQL Server Native Client 11:
C:\Windows\System32\sqlncli11.dll(64位)、C:\Windows\SysWOW64\sqlncli11.dll(32位) - 旧版SQL Server ODBC驱动:
C:\Windows\System32\sqlsrv32.dll(64位)、C:\Windows\SysWOW64\sqlsrv32.dll(32位)
PowerShell代码示例:
# 获取64位ODBC Driver 17 for SQL Server的版本 $driverPath = "C:\Windows\System32\msodbcsql17.dll" if (Test-Path $driverPath) { (Get-Item $driverPath).VersionInfo.ProductVersion } else { Write-Host "驱动文件不存在" } # 获取32位版本,替换路径为SysWOW64 $driverPath32 = "C:\Windows\SysWOW64\msodbcsql17.dll" if (Test-Path $driverPath32) { (Get-Item $driverPath32).VersionInfo.ProductVersion }
方法3:使用系统自带odbcinst.exe命令行工具
通过系统内置的ODBC配置工具解析输出,提取驱动版本:
# 列出所有ODBC驱动,过滤SQL Server相关条目并提取版本 odbcinst.exe -q -d | Select-String -Pattern "SQL Server" -Context 0,2 | ForEach-Object { $driverName = $_.Line.Trim() -replace "^\[|\]$", "" $versionLine = $_.Context.PostContext | Where-Object { $_ -match "Version=" } if ($versionLine) { [PSCustomObject]@{ DriverName = $driverName Version = $versionLine -replace "Version=", "" } } }
补充:注册表查询的正确路径
若之前未找到注册表信息,可能是路径有误:
- 64位驱动注册表路径:
HKLM:\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers及对应驱动子项 - 32位驱动注册表路径:
HKLM:\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI\ODBC Drivers
查询示例:
# 查询64位SQL Server驱动的注册表信息 Get-ChildItem "HKLM:\SOFTWARE\ODBC\ODBCINST.INI" | Where-Object { $_.Name -match "SQL Server" } | Get-ItemProperty | Select-Object PSChildName, Driver, Version
内容的提问来源于stack exchange,提问作者RaviLobo
相关产品推荐
相关产品推荐

