为什么Logins属性为null?

时间:2016-08-01 12:26:19

标签: sql-server powershell sql-server-2012 nullreferenceexception

我试图将Windows用户添加到SQL Server。这很好用。但是,如果用户已经在那里,我不想收到错误。如果它已经存在,那很好。所以我想我会在创建之前检查一下:

$AccountName  = $args[0]
$ComputerName = $args[1]
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | Out-Null
$sqlSrv = New-Object 'Microsoft.SqlServer.Management.Smo.Server' ($ComputerName)

$sqlSrv.Refresh() # TRIED DIFFERENT THINGS HERE, REFRESH, INITIALIZE...

$login = $sqlSvr.Logins[$AccountName] # HERE .Logins IS NULL

if ($login -eq $null) {
    $login = New-Object 'Microsoft.SqlServer.Management.Smo.Login' ($sqlSrv, $AccountName)
    $login.Name = $AccountName
    $login.LoginType = 'WindowsUser'
    $login.PasswordPolicyEnforced = $false
    $login.Create()
}

我不知道为什么SQL Server类的Logins属性为null。我可以在SQL Management Studio中看到现有的登录信息。

有人可以告诉我如何在创建之前正确检查登录是否存在?使用角色和数据库,服务器的属性似乎已被填充。

我使用的是Sql Server Express版本11.0.5058.0(我认为2012年)和Powershell版本是5.0.10586.117。

1 个答案:

答案 0 :(得分:2)

将此更改为此$ sqlS v r.Logins更改为$ sqlSrv.Logins

$sqlSvr.Logins to $sqlSrv.Logins