Modifier la propriété du schéma MSSQL via Powershell

J'essaye de changer les "schémas possédés par cet user" sur une database en utilisant le script powershell suivant:

$dbname = "mydb" $sql_server = "mysqlserver" $username = "myuser" [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null $server = New-Object ("Microsoft.SqlServer.Management.Smo.Server")($sql_server) $db = $server.Databases["$dbname"] $login = $server.Logins[$username] $roleName = "db_owner" if(-not $db.Users.Contains($login.Name)){ $user = New-Object('Microsoft.SqlServer.Management.Smo.User') $db, $login.Name $user.Login = $login.Name $user.create(); } $user = $db.Users[$login.Name] $role = $db.Roles[$roleName] $role.AddMember($user.Name); $schema = $db.Schemas["dbo"] $schema.Owner = "myuser" $schema.Alter() 

Quand j'arrive à l'étape $ schema.Alter (), j'obtiens l'erreur suivante:

 Exception calling "Alter" with "0" argument(s): "Alter failed for Schema 'dbo'. " At line:1 char:1 + $schema.Alter() + ~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : FailedOperationException 

J'ai l'printing que la méthode Alter cherche plus de parameters, mais je ne suis pas sûr de savoir quels parameters il veut. Quelqu'un at-il des suggestions de ce que je fais mal?

Merci Brad

Dans mon expérience, l'exception de haut niveau n'est pas utile. Ma méthode typique pour traiter cela est quelque chose comme $e = $error[0]; puis appelez $e.Exception , $e.Exception.InnerException , $e.Exception.InnerException.InnerException , … jusqu'à ce que j'arrive à l'erreur réelle . Cela ne résout pas votre problème, mais au less peut vous donner une meilleure idée de ce qu'est le problème.