在使用前先加载库文件
$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"
foreach ($asm in $assemblylist)
{
$asm = [Reflection.Assembly]::LoadWithPartialName($asm)
}
# Set SQL Server instance name
$sqlName= "localhost"
$backupPath= "e:\zach\"
$destPath = 'c:\SQL Data'
$sqlServer = New-Object ('Microsoft.SqlServer.Management.Smo.Server') $sqlName
$sqlServer.ConnectionContext .LoginSecure=$false ;
$sqlServer.ConnectionContext .set_Login("sa");
$sqlServer.ConnectionContext .set_Password("jj")
[System.Reflection.Assembly]:: LoadWithPartialName("Microsoft.SqlServer.SMO" ) | Out-Null
[System.Reflection.Assembly]:: LoadWithPartialName("Microsoft.SqlServer.SmoExtended" ) | Out-Null
$items =Get-ChildItem $backupPath
foreach ($item in $items )
$dbRestore = new-object ("Microsoft.SqlServer.Management.Smo.Restore")
$dbRestore.Devices .AddDevice ($item .FullName , "File" )
$dt = $dbRestore .ReadFileList ($sqlServer )
$header = $dbRestore .ReadBackupHeader ($sqlServer )
$db=$header .Rows [0].DatabaseName
$dbRestore.Database = $db
$db
foreach($r in $dt .Rows )
{
$p=''
$dbRestoreFile = new-object("Microsoft.SqlServer.Management.Smo.RelocateFile" )
$r. LogicalName;
$dbRestoreFile.LogicalFileName = $r .LogicalName ;
$p = $r. PhysicalName.split ("\" )
$destPath+ "\"+ $p[ $p.length -1]
$dbRestoreFile.PhysicalFileName = $destPath + "\" +$p[$p.length -1]
$dbRestore.RelocateFiles .Add ($dbRestoreFile )
}
$dbRestore. RelocateFiles
$sqlServer. KillAllProcesses($db )
# Call the SqlRestore mathod to complete restore database
$dbRestore.SqlRestore ($sqlServer )