使用Invoke-Sqlcmd连接Azure SQL DB时提示“authentication不受支持”
问题场景
使用PowerShell的Invoke-Sqlcmd连接Azure SQL数据库时触发异常,执行代码如下:
$conn = 'Server=tcp:MyServer.database.windows.net,1433;Database=MyDB;Authentication=Active Directory Integrated;Encrypt=True;' $sql = 'SELECT * FROM sys.databases' Invoke-Sqlcmd -ConnectionString $conn -Query $sql
抛出异常:
Invoke-Sqlcmd: Keyword not supported: 'authentication'.
经排查问题与System.Data.SqlClient和Microsoft.Data.SqlClient两个客户端库有关,且仅在VSCode中出现该问题,相同代码在PowerShell ISE中可正常运行。已安装.NET Core及最新.NET Framework,问题仍未解决。
解决方案
1. 更新SqlServer模块到最新版本
旧版SQLPS模块或早期SqlServer模块依赖不支持Authentication关键字的System.Data.SqlClient,新版SqlServer模块已切换为Microsoft.Data.SqlClient,可解决该问题:
- 查看已安装的模块版本:
Get-Module -ListAvailable SqlServer - 若版本较低,执行更新(需管理员权限):
Install-Module -Name SqlServer -Force -AllowClobber
2. 在VSCode中显式加载新版SqlServer模块
VSCode可能默认加载旧版模块,需手动指定加载新版:
Import-Module SqlServer -DisableNameChecking
3. 改用参数化连接方式
避免在连接字符串中使用Authentication关键字,改用Invoke-Sqlcmd的独立参数传递:
Invoke-Sqlcmd -ServerInstance "MyServer.database.windows.net,1433" ` -Database "MyDB" ` -Authentication "ActiveDirectoryIntegrated" ` -Query "SELECT * FROM sys.databases"
内容的提问来源于stack exchange,提问作者RaviLobo
相关产品推荐
相关产品推荐

