Удаление базы данных SQL Server из powershell

у меня есть экземпляр SQL Server на моем локальном компьютере под названием .SC. Я хочу удалить базу данных из этого экземпляра с помощью скрипта PowerShell. Мне нужно войти в систему с помощью sa пользователь для моей базы данных.

это код, который у меня есть до сих пор, но он не работает:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
$srv = new-object Microsoft.SqlServer.Management.Smo.Server(".SC")
$conContext = $srv.ConnectionContext
$conContext.LoginSecure = $FALSE
$conContext.Login = "sa"
$conContext.Password = "MyPlainTextPass"
$srv2 = new-object Microsoft.SqlServer.Management.Smo.Server($conContext)
$srv2.Databases

эта последняя строка должна содержать список баз данных в моем экземпляре SQL... но это дает мне эту ошибку:

следующее исключение при попытке перечислить коллекция: "не удалось подключиться к серверу .Южная Каролина.". В строке:1 char:1 + $srv2.База данных + ~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], ExtendedTypeSystemException + FullyQualifiedErrorId: ExceptionInGetEnumerator

что я делаю не так?

3 ответов


Я нашел другую команду для этого. Это было просто:--2-->

invoke-sqlcmd -ServerInstance ".\SC" -U "sa" -P "MyPlainTextPass" -Query "Drop database MyDatabase;"

для команды выше вам нужно:

import-module sqlps

со всей подготовкой у вас есть, вы, кажется, забыли на самом деле подключиться к серверу. Обратите внимание, что приведенный ниже пример называет ConnectionContext.Connect().

$dbServer = New-Object Microsoft.SqlServer.Management.Smo.Server $server
$smoSecurePassword = $Password  | ConvertTo-SecureString -asPlainText -Force
$dbServer.ConnectionContext.LoginSecure = $false
$dbServer.ConnectionContext.set_Login($User)            
$dbServer.ConnectionContext.set_SecurePassword($smoSecurePassword)
$dbServer.ConnectionContext.Connect() 
$db = $dbServer.Databases

если вы хотите проверить, существует ли база данных (как Лян указал), вы можете изменить последнюю строку с:

$db = $dbServer.Databases[$database]

и проверить, является ли $db имеет значение.