【问题标题】:Unable to load adalsql.dll error when calling `Invoke-sqlcmd`调用`Invoke-sqlcmd`时无法加载adalsql.dll错误
【发布时间】:2018-01-16 14:50:22
【问题描述】:

我安装了带有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) 卸载它以便重新安装吗?

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

【问题讨论】:

  • 我也有同样的问题。刚才我从 appwiz.cpl 卸载了 SQL Server 的 Active Directory 身份验证库并重新安装,它可以工作吗?这是我使用的安装程序:microsoft.com/en-us/download/confirmation.aspx?id=48742
  • 如果您发布上述答案并通过settings 包括卸载> Add or Remove Programs 我会接受它作为答案。我整个早上都在苦苦挣扎,试图弄清楚如何重新安装它......

标签: sql-server invoke-sqlcmd


【解决方案1】:

解决这个烦人问题的方法非常简单

  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 一起打包)的安装程序为 32 位版本的 DLL(C:\Windows\SysWOW64\adal.dll)添加了一个注册表项,但确实添加 64 位版本的条目(安装到 C:\Windows\system32\adal.dll)。如果您在 32 位模式下构建和运行应用程序,您将永远不会看到此错误清单。

这只是 ADAL 安装程序中的一个错误。据推测,它没有被 Microsoft 检测到,因为 Visual Studio 和 SSMS 都是 32 位应用程序,因此不会去寻找 64 位版本。

【讨论】:

  • 谢谢,这为我解决了一个烦人的问题。我希望我能再投票十几次。
  • 在第十二次被这件事弄得措手不及之后——以及处理其后果的累积工作日——我记得看到一篇博客文章引用了 ADAL 的注册表项,并去寻找它。发现安装程序只是忘记了,真是令人惊讶!
【解决方案2】:

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

  1. 导航以添加或删除程序

  2. 在小搜索窗口中输入 sql,或者直接查找:“Active Directory Authentication Library for SQL Server”。

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

  1. 卸载那个小家伙

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

  3. 为了好玩,重启

  4. 您的东西现在应该可以正确加载 adalsql.dll!

更新 #3,2020-07-13:安装旧版本有效,但容易被 SSMS 和 VS2019 安装程序破坏。新版本 ADAL 不起作用的原因是它的安装程序无法添加指向 64 位版本 adal.dll 的注册表项。我在下面添加了一个答案,其中包括缺少的注册表值,您可以自己添加。一旦完成,你就再也不需要跳这个舞了。 - @Tullo_x86

【讨论】:

  • 我刚刚遇到了同样的问题,使用 Azure Active Directory 运行 Powershell 脚本以将用户权限添加到多个 SQL 数据库。比尔的建议证明了这份工作,所以 +1。
  • SSMS 的每一次血腥更新我都需要回到这个答案,因为每次他们打破它!我希望我可以多次投票
  • 仅供参考,我是用 14.x 的 ADAL 得到的。按照建议安装 13.x 已解决。不需要重新启动。
  • 我发现一个简单的“修复”解决了同样的问题,无需重新启动。幸运。
  • 安装 Visual Studio 2019 后不再可见。即使您仍然安装了 VS2017,“应用程序和功能”下的条目也会被删除。
【解决方案3】:

就我而言,添加/删除程序没有显示任何已安装的“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】:

    就我而言,罪魁祸首是 VS 2019。 它有更新版本的 ADALSQL 包。对我来说,它位于路径“C:\ /p>

    希望这会有所帮助!

    【讨论】:

    • 删除 VS2019 版本的简单方法是使用 Windows Installer 使用其 GUID 参考启动安装向导,然后选择卸载。安装 Visual Studio 2019 后,这将不再可见。即使您仍然安装了 VS2017,“应用程序和功能”下的条目也会被删除。在命令提示符下,运行MsiExec.exe /I{6BF11ECE-3CE8-4FBA-991A-1F55AA6BE5BF}
    【解决方案5】:

    或者如果您打算暂时升级 SSMS,只需卸载“Active Directory Authentication Library for SQL Server”,然后修复 SSMS。

    下次升级 SSMS 时,它不会破坏任何东西。 SSMS自带了adalsql.dll,升级SSMS的时候就知道怎么升级了。但是,如果您使用其他东西安装了 adalsql(或使用 https://www.microsoft.com/en-us/download/confirmation.aspx?id=48742 ),SSMS 会以某种方式损坏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-03
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-15
      • 2019-06-05
      相关资源
      最近更新 更多