Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server 2008没有';从提示符运行powershell脚本时,请不要使用备份设备路径_Sql_Sql Server_Powershell_Sqldmo - Fatal编程技术网

SQL Server 2008没有';从提示符运行powershell脚本时,请不要使用备份设备路径

SQL Server 2008没有';从提示符运行powershell脚本时,请不要使用备份设备路径,sql,sql-server,powershell,sqldmo,Sql,Sql Server,Powershell,Sqldmo,我制作了一个脚本来备份远程服务器的所有数据库。当我从PowerShell ISE界面运行脚本时,我在备份设备中确定的路径工作正常,但当我从提示符运行脚本时,我设置的路径将被忽略,并且备份到SQL Server的默认备份目录。为什么会这样,我该如何修复它? 以下是我的脚本: $DestSqlTpb = "E:\BackupBD\SQL-TPB-01\"; $PastaRede = "\\sql-tpb1-01\BackupBD\SQL-TPB-01\"; Write-Output ("Starte

我制作了一个脚本来备份远程服务器的所有数据库。当我从PowerShell ISE界面运行脚本时,我在备份设备中确定的路径工作正常,但当我从提示符运行脚本时,我设置的路径将被忽略,并且备份到SQL Server的默认备份目录。为什么会这样,我该如何修复它? 以下是我的脚本:

$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));    
$DestSqlTpb=“E:\backupd\SQL-TPB-01\”;
$PastaRede=“\\sql-tpb1-01\backupd\sql-TPB-01\”;
写入输出(“开始删除时间:”+(获取日期-格式yyyy MM dd HH:MM:ss));
$COMANDODELETERED=$PastaRede+“*”
删除项目$COMANDODELETERED
$ComandoSqlTpbLocal=$DestSqlTpb+“*”
删除项目$ComandoSqlTpbLocal
写入输出(“完成删除时间:”+(获取日期-格式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实例。
$srv=新对象(“Microsoft.SqlServer.Management.Smo.Server”)$Server
写入输出(“在以下位置启动SQL-TPB1-01:”+(获取日期-格式yyyy-MM-dd HH:MM:ss));
$dbs=$srv.Databases
foreach($db单位为$dbs)
{
如果($db.Name-ne“tempdb”)-和(!$db.IsDatabaseSnapshot))#我们不想备份tempdb数据库
{
$timestamp=获取日期-格式yyyy MM dd HH MM ss;
$backup=新对象(“Microsoft.SqlServer.Management.Smo.backup”);
$backup.Action=“数据库”;
$backup.Database=$db.Name;
$backup.Devices.AddDevice($Dest+$db.Name+“_full”+$timestamp+”.bak,“File”);
$backup.BackupSetDescription=“完全备份”+$db.Name+“”+$timestamp;
$backup.Incremental=0;
$backup.CompressionOption=1;
#正在启动完全备份过程。
$backup.SqlBackup($srv);
#对于恢复模式简单的数据库:日志备份。
如果($db.RecoveryModel-ne 3)
{            
$timestamp=获取日期-格式yyyy MM dd HH MM ss;
$backup=新对象(“Microsoft.SqlServer.Management.Smo.backup”);
$backup.Action=“Log”;
$backup.Database=$db.Name;
$backup.Devices.AddDevice($Dest+$db.Name+“_log_u“+$timestamp+”.trn”,“File”);
$backup.BackupSetDescription=“日志备份”+$db.Name+“”+$timestamp;
#指定备份完成后必须截断日志。
$backup.LogTruncation=“Truncate”;
#正在启动日志备份过程
$backup.SqlBackup($srv);
};
};
};
写入输出(“完成的SQL-TPB1-01位于:”+(获取日期-格式yyyy-MM-dd HH:MM:ss));
写入输出(“开始复制时间:”+(获取日期-格式yyyy-MM-dd HH:MM:ss));
复制项目$COMANDODELETREDE$DestSqlTpb
写入输出(“完成的副本:”+(获取日期-格式yyyy-MM-dd HH:MM:ss));

当我刚从ISE运行时,运行正常,但是如果我保存ps1文件并从提示符执行,设备中的路径将被忽略。Tks

我敢打赌问题出在这一行:

$backup.Devices.AddDevice($Dest + $db.Name + "_full_" + $timestamp + ".bak", "File"); 
您正在使用$Dest变量,该变量未在脚本中的任何位置定义。我打赌$Dest变量设置为ISE会话中所需的路径,这就是它在那里工作的原因


但是在一个新的控制台窗口中,$Dest为空,因此SQL使用默认路径。

是否有最终的完整源代码脚本工作?