同环境下Invoke-Sqlcmd的TrustServerCertificate参数为何仅部分机器可用?
问题分析与解决
核心原因是两台机器的SqlServer模块版本不一致,具体细节如下:
- 虽然你们都确认模块是SqlServer,但
-TrustServerCertificate参数是在SqlServer模块的较新版本中才新增的(比如21.1.18102及以后的版本),旧版本的SqlServer模块并没有这个参数。这就导致相同命令在低版本模块环境下执行时,会提示参数不存在。
验证步骤
让另一位DBA执行以下命令确认模块版本:
Get-Module SqlServer -ListAvailable
或者直接查看Invoke-SqlCmd的参数列表:
(Get-Command Invoke-SqlCmd).Parameters | Select-Object Name
解决办法
升级SqlServer模块(推荐)
以管理员身份运行PowerShell,执行升级命令:Update-Module SqlServer注意:如果之前没配置过PSGallery可信源,可能需要先执行
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted。兼容旧版本的写法
如果无法升级模块,可以改用连接字符串的方式指定证书信任,示例代码:$DSQLServer = 'VM-SQL119' $connString = "Server=$DSQLServer;Database=master;Integrated Security=True;TrustServerCertificate=True" $Results = Invoke-SqlCmd -ConnectionString $connString -Query "SELECT @@ServerName"
内容的提问来源于stack exchange,提问作者Ken
相关产品推荐
相关产品推荐

