无法将 SQLPS CmdLet Backup-SQLDatabase 与 -InputObject 参数一起使用

Unable to use SQLPS CmdLet Backup-SQLDatabase with -InputObject parameter

发现 运行 遇到相同的超时问题 here 并尝试解决方法,我发现我收到错误:

Backup-SqlDatabase : Cannot bind parameter 'InputObject'. Cannot convert the "[instDW_QA0]" value of type "Microsoft.SqlServer.Management.Smo.Server" to type "Microsoft.SqlServer.Management.Smo.Server".
At line:21 char:50
+   Backup-SQLDatabase -Database msdb -InputObject $server -BackupAction Database  ...
+                                                  ~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Backup-SqlDatabase], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.SqlServer.Management.PowerShell.BackupSqlDatabaseCommand

当运行使用简单脚本时:

$ServerName = "instDW_QA0"
$server = New-Object ("Microsoft.SqlServer.Management.Smo.Server") $ServerName
$server.ConnectionContext.StatementTimeout = 0
$db = $server.Databases["msdb"]
Backup-SQLDatabase -Database msdb -InputObject $server -BackupAction Database -CompressionOption ON -CopyOnly -Initialize

这发生在我试过的三台 Win7 机器上,但脚本 运行 在我试过的所有服务器 (Win2012) 上都没有问题。三台 Win7 机器混合安装了软件。一个安装了 SQL 2008R2、2012 和 2014,另一个只安装了 2008R2 和 2012。一个安装了 PS 2.0,另外两个安装了 PS 3.0。服务器又是一个组合。全部安装了 PS 3.0,但有些安装了 SQL2008R2 和 SQL2012,有些只有 SQL2012,我试过的只有 SQL2014 ,但他们都奏效了。唯一始终如一的区别是 OS,Win7 与 Win2012,但这对我来说并不是一个潜在原因。

错误本身令人困惑,它引用的两种类型是相同的。我已经尝试在 运行 脚本之前加载特定的 SMO 程序集版本(11 和 12),但这似乎没有帮助。

有什么想法吗?提前致谢。

顺便说一句,我猜这些对象可能是使用 Backup-SQLDatabase 使用的同一个库的不同版本创建的,这就是为什么有些服务器抱怨而其他服务器工作正常的原因。

由于您仅将此方法用作 Backup-SqlDatabase 超时问题的变通方法,了解 the same issue 在累积更新中已针对 Restore-SQLDatabase 修复可能会很有用SQL Server 2012 SP1 的软件包 8。我认为这也会影响 Backup-SQLDatabase。如果您无法修复 Backup-SQLDatabase.

中的错误,这可能会解决超时问题