首先,使用这段代码:new-Object Microsoft.SqlServer.Management.Smo.Server(".")
,它使用Windows身份验证,因此它使用代理服务帐户,确保代理服务帐户可以连接到数据库(默认情况下,如果代理作为服务运行,则为网络服务)
我建议您可以使用 SQL 身份验证和如下代码:
$assemblylist =
"Microsoft.SqlServer.Management.Common",
"Microsoft.SqlServer.Smo",
"Microsoft.SqlServer.Dmf ",
"Microsoft.SqlServer.Instapi ",
"Microsoft.SqlServer.SqlWmiManagement ",
"Microsoft.SqlServer.ConnectionInfo ",
"Microsoft.SqlServer.SmoExtended ",
"Microsoft.SqlServer.SqlTDiagM ",
"Microsoft.SqlServer.SString ",
"Microsoft.SqlServer.Management.RegisteredServers ",
"Microsoft.SqlServer.Management.Sdk.Sfc ",
"Microsoft.SqlServer.SqlEnum ",
"Microsoft.SqlServer.RegSvrEnum ",
"Microsoft.SqlServer.WmiEnum ",
"Microsoft.SqlServer.ServiceBrokerEnum ",
"Microsoft.SqlServer.ConnectionInfoExtended ",
"Microsoft.SqlServer.Management.Collector ",
"Microsoft.SqlServer.Management.CollectorEnum",
"Microsoft.SqlServer.Management.Dac",
"Microsoft.SqlServer.Management.DacEnum",
"Microsoft.SqlServer.Management.Utility",
"Microsoft.SqlServer.Management.Smo"
foreach ($asm in $assemblylist)
{
$asm = [Reflection.Assembly]::LoadWithPartialName($asm)
}
$conn = new-object Microsoft.SqlServer.Management.Common.ServerConnection("{sql server instance name}","{sql user name}","{password}")
$srv = new-object Microsoft.SqlServer.Management.Smo.Server($conn)
Write-Host $srv.Information.Version
$db = New-Object Microsoft.SqlServer.Management.Smo.Database($srv, "{database name}")
$srv.KillAllProcesses($db)
$srv.databases[$db.Name].drop()