Назад | Перейти на главную страницу

Недействительный тип входа в Cast для Powershell

Я обновляю код 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:

  • Собственный клиент SQL Server 2008 R2 (x64)
  • Объекты управления SQL Server 2008 R2 (x86)
  • Объекты управления SQL Server 2008 R2 (x64)
  • Типы системной среды CLR SQL Server (x86)
  • Типы системной среды CLR SQL Server (x64)

Вы можете найти их здесь:

Пакет дополнительных компонентов 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"