我试图将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。
答案 0 :(得分:2)
将此更改为此$ sqlS v r.Logins更改为$ sqlSrv.Logins
$sqlSvr.Logins to $sqlSrv.Logins