SQL Server 2008 no usa la ruta del dispositivo de respaldo al ejecutar el script de PowerShell de la solicitud

StackOverflow https://stackoverflow.com//questions/20006835

Pregunta

Hice un script que copia de seguridad de todas las bases de datos de mi servidor remoto.Cuando ejecuto el script de la interfaz de PowerShell ISE, la ruta que determinamos en el dispositivo de copia de seguridad funciona bien, pero cuando lo ejecuto desde el indicador, la ruta que establece se ignora, y la copia de seguridad se realiza al directorio de respaldo predeterminado de SQL Server..¿Por qué es eso, y cómo puedo arreglarlo? A continuación se muestra mi guión:

$DestSqlTpb = "E:\BackupBD\SQL-TPB-01\";
$PastaRede = "\\sql-tpb1-01\BackupBD\SQL-TPB-01\";
Write-Output ("Started DELETE at: " + (Get-Date -format yyyy-MM-dd-HH:mm:ss));    
$ComandoDeleteRede = $PastaRede + "*"
remove-item $ComandoDeleteRede
$ComandoSqlTpbLocal = $DestSqlTpb + "*"
remove-item $ComandoSqlTpbLocal
Write-Output ("Finished DELETE at: " + (Get-Date -format yyyy-MM-dd-HH:mm:ss));    
[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.ConnectionInfo');            
[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.Management.Sdk.Sfc');            
[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO');
[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMOExtended');  
$Server = "SQL-TPB1-01\SQL2008";     # SQL Server Instance.    
$srv = new-object ("Microsoft.SqlServer.Management.Smo.Server") $Server

Write-Output ("Started SQL-TPB1-01 at: " + (Get-Date -format yyyy-MM-dd-HH:mm:ss));
$dbs = $srv.Databases
foreach ($db in $dbs) 
{
  if (($db.Name -ne "tempdb") -and (!$db.IsDatabaseSnapshot)) #We don't want to backup the tempdb database 
  {
    $timestamp = Get-Date -format yyyy-MM-dd-HH-mm-ss;
    $backup = New-Object ("Microsoft.SqlServer.Management.Smo.Backup");            
    $backup.Action = "Database";            
    $backup.Database = $db.Name;            
    $backup.Devices.AddDevice($Dest + $db.Name + "_full_" + $timestamp + ".bak", "File");            
    $backup.BackupSetDescription = "Full backup of " + $db.Name + " " + $timestamp;            
    $backup.Incremental = 0;     
    $backup.CompressionOption = 1;
    # Starting full backup process.            
    $backup.SqlBackup($srv);     
    # For db with recovery mode <> simple: Log backup.            
    If ($db.RecoveryModel -ne 3)            
    {            
        $timestamp = Get-Date -format yyyy-MM-dd-HH-mm-ss;            
        $backup = New-Object ("Microsoft.SqlServer.Management.Smo.Backup");            
        $backup.Action = "Log";            
        $backup.Database = $db.Name;            
        $backup.Devices.AddDevice($Dest + $db.Name + "_log_" + $timestamp + ".trn", "File");            
        $backup.BackupSetDescription = "Log backup of " + $db.Name + " " + $timestamp;            
        #Specify that the log must be truncated after the backup is complete.            
        $backup.LogTruncation = "Truncate";
        # Starting log backup process            
        $backup.SqlBackup($srv);    
    };
  };
};
Write-Output ("Finished SQL-TPB1-01 at: " + (Get-Date -format yyyy-MM-dd-HH:mm:ss));
Write-Output ("Started COPY at: " + (Get-Date -format yyyy-MM-dd-HH:mm:ss));    
copy-item $ComandoDeleteRede $DestSqlTpb
Write-Output ("Finished COPY at: " + (Get-Date -format yyyy-MM-dd-HH:mm:ss));    

Cuando acabo de correr de ISE, va bien, pero si guardo el archivo PS1 y ejecuto de la solicitud, la ruta en el dispositivo se ignora.TKS

¿Fue útil?

Solución

Estoy apostando el problema es con esta línea:

$backup.Devices.AddDevice($Dest + $db.Name + "_full_" + $timestamp + ".bak", "File"); 

Está utilizando la variable $ DEST, que no se define en ninguna parte de su script.Apuesto a que tiene la variable de $ DAST establecida en el camino que desea en la sesión de ISE, por lo que está trabajando allí.

Pero en una nueva ventana de consola, $ DET es nula, por lo que SQL está usando la ruta predeterminada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top