2016-05-18 5 views
1

SQLサーバーに新しいログインを追加しようとするとこのエラーが発生します。 私はそれをオンラインで検索し、StackOverflowでこれを見つけました Add Windows User to local SQL Server with PowerShellしかし、これで解決しませんでした。新しいSQLアカウントを作成しようとすると例外が発生する

これはこれは、それは私が私の質問に表示されたエラーをそっくりしているより多くのエラーのを与えているので、これは穴スクリプト である私のコード

$server="WIN-SH7H3HP7KMI\SQL2014" 
$User="bilal" 
$password="test" 

if(!($svr.Logins.Contains($User))) 
{ 

    $login = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Login -ArgumentList $server, $User 
    $login.LoginType = [Microsoft.SqlServer.Management.Smo.LoginType]::SqlLogin 
    $login.PasswordExpirationEnabled = $false 
    $login.Create($password) 
    Write-Host("Login $loginName created successfully.") 
} 
+1

SQLインスタンスには詳細がありますかなぜ失敗したのか?おそらくパスワードの制限があります。これらのアカウントを作成する権利もありますか? – Matt

+1

いいえthats唯一のエラーは – achahbar

+0

です。ユーザーはまだ移行タスクやテストから作成していないと確信していますか? http://www.beansoftware.com/T-SQL-FAQ/create-failed-for-user.aspx。あなたのifステートメントは、この節をトリガーするnullを評価することができます。 '$ svr'が宣言されているとは思わないので、私は確信していました。 – Matt

答えて

1

@Mattでエラー

Exception calling "Create" with "1" argument(s): "Create failed for Login 'bilal'. "

です私はちょうどそのerrrorに焦点を当てていた

$server="WIN-SH7H3HP7KMI\SQL2014" 
$Database="master" 
$User="bilal" 
$Role="db_owner" 

$Svr = New-Object ('Microsoft.SqlServer.Management.Smo.Server') $server 

# create new database and add to server 
#  [System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') 
#$srv=new-Object Microsoft.SqlServer.Management.Smo.Server('(local)\Test') 
#$db=New-Object Microsoft.SqlServer.Management.Smo.Database($srv,'Test_SMO_Database') 
#$db.Create() 

#Check Database Name entered correctly 
$db = $svr.Databases[$Database] 
if($db -eq $null) 
    { 
    Write-Host " $Database is not a valid database on $Server" 
    Write-Host " Databases on $Server are :" 
    $svr.Databases|select name 
    break 
    } 
#Check Role exists on Database 
    $Rol = $db.Roles[$Role] 
if($Rol -eq $null) 
    { 
    Write-Host " $Role is not a valid Role on $Database on $Server " 
    Write-Host " Roles on $Database are:" 
    $db.roles|select name 
    break 
    } 
if(!($svr.Logins.Contains($User))) 
    { 
    $password="test" 
    $login = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Login -ArgumentList $server, $User 
    $login.LoginType = [Microsoft.SqlServer.Management.Smo.LoginType]::SqlLogin 
    $login.PasswordExpirationEnabled = $false 
    $login.Create($password) 
    Write-Host("Login $loginName created successfully.") 


    } 
if (!($db.Users.Contains($User))) 
    { 
    # Add user to database 

    $usr = New-Object ('Microsoft.SqlServer.Management.Smo.User') ($db, $User) 
    $usr.Login = $User 
    $usr.Create() 

    #Add User to the Role 
    $Rol = $db.Roles[$Role] 
    $Rol.AddMember($User) 
    Write-Host "$User was not a login on $Database on $server" 
    Write-Host "$User added to $Database on $Server and $Role Role" 
    } 
    else 
    { 
    #Add User to the Role 
    $Rol = $db.Roles[$Role] 
    $Rol.AddMember($User) 
    Write-Host "$User added to $Role Role in $Database on $Server " 
    } 
関連する問題