SSMS可连接但PowerShell无法连接SQL Server的配置咨询
解决PowerShell SMO无法连接SQL Server的配置要点
- SMO组件版本兼容:运行脚本的机器需安装与目标SQL Server实例版本匹配的SMO组件。若目标是SQL Server 2019及以上版本,需安装对应版本的Microsoft SQL Server Management Objects包,避免因版本不匹配导致连接失败。
- 启用SQL Server远程连接协议:
- 打开目标服务器的SQL Server配置管理器,启用TCP/IP协议(默认可能处于禁用状态)。
- 在TCP/IP属性中确认监听端口:默认实例为1433,命名实例若使用动态端口需确保端口开放,或配置为固定端口便于防火墙规则设置。
- 配置防火墙规则:
- 目标服务器Windows防火墙需允许SQL Server端口(1433或自定义端口)的入站连接;若为命名实例,还需允许UDP 1434端口(SQL Server Browser服务端口)的通信。
- 运行脚本的客户端机器防火墙需允许出站连接到目标SQL Server的对应端口。
- 权限验证:
- 执行脚本的账号需具备目标SQL Server实例的公共角色权限,至少能读取服务器级系统视图(如
sys.dm_os_version)。若使用Windows身份验证,确保账号在目标服务器有对应登录权限;若用SQL身份验证,需在脚本中显式传递凭据:$cred = Get-Credential $sql_svr = New-Object Microsoft.SqlServer.Management.Smo.Server($machine_name) $sql_svr.ConnectionContext.LoginSecure = $false $sql_svr.ConnectionContext.set_Login($cred.UserName) $sql_svr.ConnectionContext.set_SecurePassword($cred.Password)
- 执行脚本的账号需具备目标SQL Server实例的公共角色权限,至少能读取服务器级系统视图(如
- 确保SQL Server Browser服务运行:
- 针对命名实例,目标服务器的SQL Server Browser服务必须启动并设置为自动启动,否则客户端无法解析命名实例对应的端口。
- 显式指定连接参数:
- 避免仅依赖实例名传递,尝试通过连接字符串明确配置:
这种方式能更精准控制身份验证与连接属性,排查默认配置的问题。$connString = "Server=$machine_name;Integrated Security=True;" $sql_svr = New-Object Microsoft.SqlServer.Management.Smo.Server($connString)
- 避免仅依赖实例名传递,尝试通过连接字符串明确配置:
- 检查PowerShell执行策略:
- 执行
Get-ExecutionPolicy查看当前策略,若为Restricted会阻止脚本运行,可设置为RemoteSigned(仅允许本地脚本和签名的远程脚本执行)。
- 执行
内容的提问来源于stack exchange,提问作者John Waclawski
相关产品推荐
相关产品推荐

