调用`Invoke-sqlcmd`时无法加载adalsql.dll错误

时间:2017-08-08 21:35:44

标签: sql-server invoke-sqlcmd

我安装了SSDT的VS2015,以及SSMSSqlServer PowerShell模块(包括invoke-sqlcmd命令),但是如果我尝试执行一个查询Azure SQL数据仓库,如下所示:

invoke-sqlcmd  -Query "Select top 5 * from customer"  -ConnectionString "Server=tcp:my.database.windows.net,1433;Database=Customer;  Authentication=Active Directory Integrated; Encrypt=True; "

我收到以下错误:

invoke-sqlcmd : Unable to load adalsql.dll (Authentication=ActiveDirectoryIntegrated). Error code: 0x2. For more information, see
http://go.microsoft.com/fwlink/?LinkID=513072
At line:1 char:1
+ invoke-sqlcmd  -Query "Select top 5 * from vwOffer"  -ConnectionStrin ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Invoke-Sqlcmd], SqlException
    + FullyQualifiedErrorId : SqlExectionError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand

invoke-sqlcmd :
At line:1 char:1
+ invoke-sqlcmd  -Query "Select top 5 * from vwOffer"  -ConnectionStrin ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ParserError: (:) [Invoke-Sqlcmd], ParserException
    + FullyQualifiedErrorId : ExecutionFailureException,Microsoft.SqlServer.Management.PowerShell.GetScriptComman

如果我尝试直接安装adalsql.dll,我会收到一条消息,指出A higher version already exists我可以看到这两个版本的dll都可以在这里找到:

 C:\Windows\SysWOW64\adalsql.dll
 C:\Windows\System32\adalsql.dll

然而,invoke-sqlcmd无法找到它。任何想法如何(A)注册现有的dll所以invoke-sqlcmd可以找到它或(B)卸载它以便可以重新安装?

顺便说一句,我能够使用32位SQLCMD.exe使用Active Directory Authenticatoin,所以我知道32位dll工作正常。这只是64位的dll没有正确加载......

5 个答案:

答案 0 :(得分:27)

所以,这个问题也让我很烦恼。我不清楚它是如何发生的,但也许只是在我安装最新版本的SSMS时发生的巧合。我的解决方法是:

  1. 导航到“添加或删除程序”

  2. 在小搜索窗口中键入sql,或者直接找到:" SQL Server的Active Directory身份验证库"。

      

    注意:这不会出现在Windows'如果已安装Visual Studio 2019,则安装程序列表。您可以通过从命令提示符调用MsiExec.exe /I{6BF11ECE-3CE8-4FBA-991A-1F55AA6BE5BF}来运行相同的安装程序。

  3. 卸载那个小家伙

  4. 在此处导航并下载最新的ADAL库(选择x64):
    https://www.microsoft.com/en-us/download/confirmation.aspx?id=48742

  5. 只是为了踢,重启

  6. 你的东西现在应该正确加载adalsql.dll!

答案 1 :(得分:6)

这个烦人的问题的令人困惑的简单解决方案

  1. 确保您实际上已经安装了ADAL(C:\Windows\system32\adal.dll的存在很丰富)

  2. 将其粘贴到.reg文件中:

     Windows Registry Editor Version 5.00
    
     [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSADALSQL]
     "TargetDir"="C:\\Windows\\System32\\adal.dll"
    
  3. 双击.reg文件以安装该值

您完成了。去庆祝吧!

说明WTF正在进行。为什么这是必要的?

发生此错误是因为SQL Server的.NET适配器找不到adal.dll。但是为什么呢?它已经安装了吧?

好吧,最新版ADAL(与VS 2019打包在一起,以及SQL Serer Management Studio的最新版本)的安装程序为DLL的32位版本(位于C:\Windows\SysWOW64\adal.dll)添加了一个注册表项,但是会添加64位版本(已安装到C:\Windows\system32\adal.dll)的条目。如果以32位模式构建和运行应用程序,则永远不会看到此错误清单。

这只是ADAL安装程序中的错误。大概是Microsoft没检测到它,因为 Visual Studio和SSMS都是32位应用程序,因此不要去寻找64位版本。

答案 2 :(得分:2)

在我看来,罪魁祸首是VS 2019。 它具有较新版本的ADALSQL软件包。对我来说,它位于路径“ C:\ ProgramData \ Microsoft \ VisualStudio \ Packages \ sql_adalsql,version = 16.0.61903.25110,chip = x64,language = zh-CN”,我已卸载并安装了所需版本来解决此问题。 / p>

希望这会有所帮助!

答案 3 :(得分:1)

就我而言,添加/删除程序未显示“ Active Directory身份验证库”的任何已安装实例。但是,尝试安装library可能会失败,表明安装了新版本。

我通过打开注册表编辑器(regedt32)并使用“查找”功能来取消自己的婚礼

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer

寻找adalsql

包含键的功能很受欢迎

DisplayName: Active Directory Authentication Library for SQL Server
DisplayVersion: 15.0.1300.359
重要的是,

以及到相关安装程序的路径。对我来说,就像c:\windows\installer\4c334521.msi。我运行了该msi,终于能够“卸载”。之后,从上面的“库”链接运行安装程序终于可以了。

答案 4 :(得分:-1)

或者,如果您计划暂时升级SSMS,只需卸载" SQL Server"的Active Directory身份验证库,然后修复SSMS。

下次升级SSMS时,它不会破坏任何东西。 SSMS带来了自己的adalsql.dll,并且在升级SSMS时知道如何升级它。但是,如果您使用其他东西(或使用https://www.microsoft.com/en-us/download/confirmation.aspx?id=48742)安装了adalsql,那么SSMS就会被破坏。