Я обновляю код PowerShell для установки таблиц базы данных / хранимых процедур на 64-битном компьютере. Я все время получаю сообщение об ошибке, когда пытаюсь назначить тип входа. Вот мой текущий код.
$login = new-Object Microsoft.SqlServer.Management.SMO.Login($server, $user);
if ($server.Logins.Contains($login.Name) -eq $false)
{
$login.LoginType = [Microsoft.SqlServer.Management.SMO.LoginType]::WindowsUser;
$login.Create();
UTF-Write-Host "Login Created on $database" -type info
}
и ошибка следующая;
Error During User Operations Exception setting "LoginType": "Cannot convert value "WindowsUser" to type "Microsoft.SqlServer.Management.Smo.LoginType". Error: "Invalid cast from 'Microsoft.SqlServer.Management.Smo.LoginType' to 'Microsoft.SqlServer.Management.Smo.LoginType'.""
Есть ли у кого-нибудь намеки на то, что я делаю не так?
(Edit) Я включаю следующее
[void][Reflection.Assembly]::Load("Microsoft.SqlServer.SqlEnum, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91")
Не уверен, как вы загружаете свои сборки, но это работает для меня:
[Reflection.Assembly]::LoadFile("C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.ConnectionInfo.dll")
[Reflection.Assembly]::LoadFile("C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Smo.dll")
# Then your code.
Я тестировал это на 64-битном экземпляре PowerShell v2.
Я подозреваю, что вам не хватает этой сборки: Microsoft.SqlServer.SqlEnum.dll
.
Вот где LoginType
enum объявлен.
На моей 64-битной машине это находится в:
C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\
32-битные сборки находятся здесь на 64-битной машине:
C:\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies
На этом компьютере установлены следующие компоненты пакета функций SQL Server 2008 R2:
Вы можете найти их здесь:
Пакет дополнительных компонентов Microsoft SQL Server 2008 R2
Я также построил тот же код на C # в VS 2010, и если Microsoft.SqlServer.SqlEnum
На сборку нет ссылки, то вы получите ошибку компиляции.
Вы загрузили сборку SQLEnum?
Предполагая, что вы используете SQL Server 2008 или 2008 R2:
add-type -AssemblyName "Microsoft.SqlServer.SqlEnum, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"