Powershell 中的登录类型转换无效

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'.""

有人能提示我做错了什么吗?

(编辑)我包括以下内容

[void][Reflection.Assembly]::Load("Microsoft.SqlServer.SqlEnum, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91")

答案1

您是否加载了 SQLEnum 程序集?

假设您使用的是 SQL Server 2008 或 2008 R2:

add-type -AssemblyName "Microsoft.SqlServer.SqlEnum, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"

答案2

不确定你是如何加载你的程序集的,但这对我来说有用:

[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声明枚举的地方。

在我的 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)
  • SQL Server 系统 CLR 类型 (x86)
  • SQL Server 系统 CLR 类型 (x64)

您可以在这里找到这些内容:

Microsoft SQL Server 2008 R2 功能包

我也在 VS 2010 中用 C# 构建了相同的代码,如果Microsoft.SqlServer.SqlEnum没有引用程序集,那么就会出现编译错误。

相关内容