批量数据库还原

时间:2021-04-21 20:44:08
在使用前先加载库文件

$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  )
 
}