1

我正在使用一个相当简单的 PowerShell 脚本来自动化恢复数据库的过程:

    #Script to restore database.
    $serverInstance = $args[0]
    $dbName = $args[1]
    $file = $args[2]
    $dataDestination = $args[3]
    $logDestination = $args[4]

    Import-Module sqlps

    $relocateData = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile(###LOGICALFILENAME###, $dataDestination)
    $relocateLog = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile(###LOGICALFILENAME###, $logDestination)

    Restore-SqlDatabase -ServerInstance $serverInstance -Database $dbName -BackupFile $file -RelocateFile @($relocateData,$relocateLog)

我正在寻找一种方法来动态获取数据库备份($file)中包含的文件的逻辑文件名并将它们存储到一个变量中,以便可以相应地重命名。

有人有想法么?我已经用头撞这个太久了!:)

谢谢你的帮助!

4

1 回答 1

2

与 Powershell 和 SQL Server 一样,Invoke-Sqlcmd是您的朋友。它返回一个易于导航的 DataTable。例如

$dt = Invoke-Sqlcmd "restore filelistonly from disk='c:\temp\aw.bak'"

$dataFileLogicalName = ""
$logFileLogicalName = ""
foreach ($r in $dt)
{
  if ($r.Type -eq "L")
  {
    $logFileLogicalName = $r.LogicalName
  }
  if ($r.Type -eq "D")
  {
    $dataFileLogicalName = $r.LogicalName
  }
  write-host "$($r.Type) $($r.LogicalName)  $($r.PhysicalName)"
}

write-host "data=$dataFileLogicalName  log=$logFileLogicalName"
于 2020-06-08T15:58:49.157 回答