Я читал несколько похожих вопросов и ответов, касающихся PS и преобразований типов, но, насколько я понимаю, они не совпадают.
Я пытаюсь использовать классы RMO в скрипте Powershell, но по какой-то причине он считает необходимым преобразование в тот же тип и не может этого сделать.
Код в основном:
$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?