我已经阅读了一些关于 PS 和类型转换的类似问答,但据我所知,它们的情况并不相同。
我正在尝试在 Powershell 脚本中使用 RMO 类,但由于某种原因,它认为必须转换为相同的类型,但没有这样做。
有问题的代码基本上是:
$conn = New-Object "Microsoft.SqlServer.Management.Common.ServerConnection" @($server, $dbUsernm, $dbPasswd);
$publicationDb = New-Object "Microsoft.SqlServer.Replication.ReplicationDatabase"
$publicationDb.Name = $dbName;
$publicationDb.ConnectionContext = $conn;
(如果我尝试使用双参数构造函数,则会发生类似的类型错误。)
错误是:
Exception setting "ConnectionContext": "Cannot convert the "(..snip..)" value of type
"Microsoft.SqlServer.Management.Common.ServerConnection" to type "Microsoft.SqlServer.Management.Common.ServerConnection"."
那么这里发生了什么?它显然是在尝试转换为相同的数据类型。这些没有在 PowerShell 脚本中定义,所以它不应该能够跟踪类型吗?我还尝试[Microsoft.SqlServer.Management.Common.ServerConnection]
在其声明和/或调用/成员集中将变量强制转换为,但无济于事。
如果它是相关的,我正在以这种方式加载 RMO 类(这似乎是唯一的工作方法,即使据我所知LoadWithPartialName
已被弃用):
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.RMO")
其中说:
GAC Version Location
--- ------- --------
True v4.0.30319 C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\Microsoft.SqlServer.RMO\v4.0_14.0.0.0__89845dcd8080cc91\...
这是否意味着它是该类的 v4.x,或者它是一个 .NET 4.x 类?如果它是一个 .NET 4.x 类,这是否相关,即这对 Powershell 来说是个问题吗?