Лучший отвечающий
[РЕШЕНО ]Drop Schema с помощью PowerShell (Ошибка) Не удается индексировать в массив NULL

Вопрос
-
Добрый день, Помогите с следующей проблемой
Есть скрипт который удаляет с SQL сервера (SQL 2008 R2) Логин, Пользователя и Схему (аналогичную имени пользователя.)
Если есть только Логин и Пользователь - все работает хорошо.
Если только добавляется схема - сразу появляеются 2 Ошибки.
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null $Error.Clear() cls $Servers = @("server1","server2")
$logins = @("domain\GolovchenkoAO_test","domain\wwwtest") foreach($server in $Servers) { $srv = New-Object('Microsoft.SqlServer.Management.Smo.Server')$server #drop database users foreach($database in $srv.Databases) { foreach($Login in $logins) { if($database.Schemas.Contains($Login)) { $srv.Databases[$database].Schemas[$Login].Drop() } if($database.Users.Contains($Login)) { $srv.Databases[$database].Users[$Login].Drop() } } }
Здесь приведены ошибки (и какие именно строки их вызывают)
$srv.Databases[$database].Schemas[$Login].Drop()
Не удается индексировать в массив NULL.
C:\Users\GolovchenkoAO\Documents\Работа - Задания\20130215 - Удаление старых записей из SQL\powershell - sql - Drop User,Login,Schema on all servers with procedure and LOG and send email v 1.3 - Рабочий экземпляр.ps1:83 знак:29
+ $srv.Databases[$database].Schemas[$Login].Drop()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArray
$srv.Databases[$database].User[$Login].Drop()
Исключение при вызове "Drop" с "0" аргументами: "Действие Удалить завершилось неудачно для объекта "Пользователь" "domain\GolovchenkoAO_test". "
C:\Users\GolovchenkoAO\Documents\Работа - Задания\20130215 - Удаление старых записей из SQL\powershell - sql - Drop User,Login,Schema on all servers with procedure and LO
G and send email v 1.3 - Рабочий экземпляр.ps1:114 знак:27
+ $database.Users[$Login].Drop();
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : FailedOperationExceptionСамое интересное что если я вручную (а не через скрипт) выполняю эти команды - все отрабатывает отлично.
- Изменено Frenzy from DP 13 марта 2013 г. 13:36
13 марта 2013 г. 9:19
Ответы
-
Думаю вопрос можно закрывать. Видимо заработался и надо было отдохнуть.
В общем ситуация следующая - из командной строки можно дропнуть с помощью
$srv.Databases['MyDB'].Users['domain\GolovchenkoAO_test'].Drop()
Но в скрипте необходимо использовать $database.Users[$Login].Drop()
- Помечено в качестве ответа Frenzy from DP 13 марта 2013 г. 13:36
13 марта 2013 г. 13:36
Все ответы
-
Вручную вы эти команды выполняете в той же последовательности, что и скрипт?13 марта 2013 г. 12:10
-
Да в той же. Это выглядело примерно так.
Для отлавливания ошибок я сделал что бы перед каждой командой мне выводило следующую информацию (Сервер БазаДанных Пользователь) - так видно с какими данными работает скрипт.
Собственно я увидев ошибку
Сервер БазаДанных Пользователь
Server MyDB domain\user
Не удается индексировать в массив NULL.
C:\Users\GolovchenkoAO\Documents\Работа - Задания\20130215 - Удаление старых записей из SQL\powershell - sql - Drop User,Login,Schema on all servers with procedure and LOG and send email v 1.3 - Рабочий экземпляр.ps1:83 знак:29
+ $srv.Databases[$database].Schemas[$Login].Drop()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArrayВыполняю команду
$srv.Databases['MyDB'].Schemas['domain\user'].Drop()
И схема удаляется без проблем.
13 марта 2013 г. 12:59 -
Думаю вопрос можно закрывать. Видимо заработался и надо было отдохнуть.
В общем ситуация следующая - из командной строки можно дропнуть с помощью
$srv.Databases['MyDB'].Users['domain\GolovchenkoAO_test'].Drop()
Но в скрипте необходимо использовать $database.Users[$Login].Drop()
- Помечено в качестве ответа Frenzy from DP 13 марта 2013 г. 13:36
13 марта 2013 г. 13:36