PowerShell的Invoke-Sqlcmd是否支持接受服务器证书?新服务器证书信任配置
Invoke-Sqlcmd证书信任配置及连接超时问题解决
已执行操作
- 安装全新Windows Server 2022
- 启用
Set-ExecutionPolicy - 安装PowerShell SQL模块
- 执行命令:
Invoke-Sqlcmd -ServerInstance "SERVER\SQL" -query "USE databsename SELECT GETDATE();" -Username "username" -Password "strongpassword"
报错信息
Invoke-Sqlcmd : 连接超时已过期。尝试接收预登录握手确认时超出了超时时间。这可能是因为预登录握手失败,或者服务器无法及时响应。尝试连接到此服务器所花费的时间为 - [预登录] 初始化=8; 握手=14993;
说明:该命令在本地机器及其他服务器上可正常运行,需解决以下两个问题:
- PowerShell的Invoke-Sqlcmd是否有接受服务器证书的选项?
- 如何在新安装的Windows Server上配置证书信任?
1. Invoke-Sqlcmd接受服务器证书的选项
Invoke-Sqlcmd提供了直接处理证书信任的参数,常用方式有两种:
- 使用
-TrustServerCertificate参数:该参数会跳过证书链验证,直接信任SQL Server的证书,适合测试或内部可信环境。修改后的命令如下:Invoke-Sqlcmd -ServerInstance "SERVER\SQL" -query "USE databsename SELECT GETDATE();" -Username "username" -Password "strongpassword" -TrustServerCertificate - 通过连接字符串指定:如果使用
-ConnectionString参数传递连接信息,可以在字符串中加入TrustServerCertificate=True:$connString = "Server=SERVER\SQL;Database=databsename;User ID=username;Password=strongpassword;TrustServerCertificate=True" Invoke-Sqlcmd -ConnectionString $connString -Query "SELECT GETDATE();"
2. 新Windows Server 2022上配置永久证书信任
若需要长期信任SQL Server证书(而非临时跳过验证),可按以下步骤操作:
- 导出SQL Server证书
- 在SQL Server所在服务器打开MMC控制台,添加「证书」管理单元,选择「计算机账户」,导航至
证书(本地计算机) > 个人 > 证书 - 找到SQL Server使用的证书(主题通常包含服务器名或实例名),右键选择「所有任务 > 导出」,导出为
.cer格式(无需导出私钥)
- 在SQL Server所在服务器打开MMC控制台,添加「证书」管理单元,选择「计算机账户」,导航至
- 导入证书到受信任根目录
- 在目标Windows Server上打开MMC控制台,同样添加「证书」管理单元并选择「计算机账户」,导航至
证书(本地计算机) > 受信任的根证书颁发机构 > 证书 - 右键选择「所有任务 > 导入」,按照向导完成
.cer证书的导入
- 在目标Windows Server上打开MMC控制台,同样添加「证书」管理单元并选择「计算机账户」,导航至
- 验证配置
重新执行原始Invoke-Sqlcmd命令,无需添加-TrustServerCertificate参数即可正常连接
内容的提问来源于stack exchange,提问作者buczo
相关产品推荐
相关产品推荐

