0

Я пытаюсь добавить пользователя Windows на SQL Server. Это прекрасно работает. Однако, если пользователь уже существует, я не хочу получать сообщение об ошибке. Если это уже есть, все в порядке. Так я думал, я бы просто проверить, прежде чем создавать его:Почему свойство Logins null?

$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() 
} 

Я не знаю, почему Logins свойство класса SQL Server является нулевым. Я вижу существующие логины в SQL Management Studio.

Может кто-нибудь сказать мне, как правильно проверить, существует ли логин до его создания? С помощью ролей и баз данных свойства сервера, похоже, заполнены.

Я использую Sql Server Express версии 11.0.5058.0 (я думаю, что это 2012) и версия Powershell 5.0.10586.117.

+0

Какой версии SQL Server вы используете? –

+0

@ChrisAlbert Обновлено сообщение с версиями. – nvoigt

+0

Если вы пытаетесь сделать $ login = $ sqlSrv.logins без параметра фильтрации, он ничего не возвращает? –

ответ

2

Изменить это на это $ SQLs v r.Logins до $ sqlSrv.Logins

$sqlSvr.Logins to $sqlSrv.Logins 
+0

Святой sh * t вы правы. Вот почему я ненавижу сценарии, пытаясь быть легким для пользователя, оставляя достаточно веревки, чтобы повесить себя. Большое спасибо. – nvoigt

Смежные вопросы