【问题标题】:Microsoft.SqlServer.Management.Smo.Server class compatibility among different SQL Server versions不同 SQL Server 版本之间的 Microsoft.SqlServer.Management.Smo.Server 类兼容性
【发布时间】:2018-05-05 04:26:12
【问题描述】:

这是我的问题:我有一台运行 SQL Server 2008 R2 (SP3) 的服务器,我正在尝试创建一个 PowerShell 脚本来执行一些管理任务。

此 PowerShell 脚本在 Microsoft.SqlServer.Management.Smo 类上使用名为 EnumServerPermissions 的方法。根据official MS documentation on this method,这仅在 SQL Server 2012 及更高版本上受支持。

现在我的问题是:由于此类位于 Microsoft.SqlServer.Smo.dll 中,是否有办法运行与此方法调用兼容的 SQL Server Management Objetcs (SMO) 的更新版本,即使在较旧的SQL Server 的版本(比如我的 2008 R2)?我是否必须接受这不能在我的版本上运行?或者有没有办法通过更新一些东西来让它工作?

谢谢!

【问题讨论】:

  • 我不确定这个特定类的细节,但一般来说,当特定版本不支持此类功能时,这是因为该方法将与之交互或更改的接口/设置即使您有更新的课程也不可用。

标签: sql-server powershell smo


【解决方案1】:

如果您说 Microsoft 文档说明它仅支持 SQL Server 2012 +,因为:

这是不正确的,并且没有正式说明它支持和不支持的版本。 SMO 的处理方式与 SQL Server Management Studio 一样。您可以利用新版本连接到任何版本的 SQL Server。唯一的规定是某些属性或类会因为在较低版本的 SQL Server 上不存在的属性或功能不可用而失败(例如,SQL Server 2008 R2 上的 AvailabilityGroup 命名空间会失败)。

例如,在 PowerShell 模块 dbatools 中,我们有最新版本的 SMO 与该模块打包在一起。因此,如果您将该模块安装在全新的机器上,您可以连接到任何版本的 SQL Server,从 2000+ 开始。我们在该模块中有支持针对 SQL Server 2000 运行的命令,还有一些仅支持 2012+ 版本的 SQL Server。

【讨论】:

  • 感谢@ShawnMelton 的回复!我在 EnumServerPermissions 和我的服务器之间遇到这种看似不兼容的原因是因为我正在运行一些失败的 Puppet 代码(进而执行一些 PowerShell 代码)。在某个时间点,我遇到了这个错误Powershell dsc resource MSFT_xSQLServerPermission failed to execute Test-TargetResource Cannot find an overload for EnumServerPermissions and the argument count 2。不过今天,我尝试通过...重现此错误(在同一台服务器上)...
  • ... 使用带有 2 个参数的 EnumServerPermissions 创建了一个 15 行的 PowerShell 脚本,令我惊讶的是,它居然奏效了。所以我回到了原来的 Puppet 代码,瞧!再次工作!...看在上帝的份上,我无法解释为什么几天前它失败了,现在它正在工作(我讨厌这种情况发生),但我假设我的目标框中的某些东西与Microsoft.SqlServer.Management.Smo 已更新,因此它现在可以正常工作。最后还有两件事我想知道:1. 如果文档中的组合框是为了表示兼容性,它是做什么用的?...
  • 只有 2012 年和 2014 年出现在该页面中告诉我们的事实是什么? 2. 如何查看我的 Microsoft.SqlServer.Management.Smo 版本?我应该查看 Microsoft.SqlServer.Smo.dll 的属性还是有更好的方法来检查?
  • 关于 2012 和 2014 只是版本,这就是他们完成 MSDN 文档的方式。 Microsoft 实际上正在升级到a new format,但您甚至可以看到 SMO 的链接仍然指向 MSDN 页面。许多 SMO 和 .NET 文档仍在 MSDN 网站上,没有关于何时移动的真正时间表。
  • 在检查 SMO 的版本时,编写了一些自定义函数,但没有可以调用的神奇 cmdlet 或内置函数来检查它。我们在 dbatools 中有一个命令,非常欢迎您借用代码在您的脚本中进行验证:dbatools/Test-DbaSqlManagementObject
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
相关资源
最近更新 更多