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



遇到这里发现的相同超时问题并尝试解决方法后,我发现我得到了错误:

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,另外两个安装了PS3.0。服务器又是一个混合体。所有的都安装了PS 3.0,但有些安装了SQL2008R2和SQL2012,有些只有SQL2012,我试过的一个只有SQL2014,但它们都能工作。唯一一致的区别是操作系统,Win7和Win2012,但这对我来说并不是一个很有意义的潜在原因。

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

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

顺便说一句,我猜这些对象可能是使用备份SQLDatabase使用的同一库的不同版本创建的,这就是为什么有些服务器会抱怨,而另一些服务器工作得很好。

由于您只是将此方法用作解决Backup-SqlDatabase超时问题的变通方法,因此了解SQL Server 2012 SP1的累积更新包8中的Restore-SQLDatabase也修复了同样的问题可能会很有用。我认为这也会影响Backup-SQLDatabase。如果您不能修复Backup-SQLDatabase出现的错误,那么这可能会解决超时问题。

最新更新