Сценарий Powershell для автоматического удаления, загрузки и восстановления базы данных SQL, выполняемой не полностью - PullRequest
0 голосов
/ 18 декабря 2018

С помощью некоторых онлайн-ресурсов я скомпилировал скрипт PowerShell, который будет:

  • Удалить любой файл старше 60 минут в заданной папке
  • Подключиться к SFTPсервер и загрузите один файл .bak
  • Восстановите загруженный файл .bak в экземпляр SQL

Код работает нормально, если я его разберу и запускаю по отдельности.Однако когда я их объединяю, он работает до восстановления и просто останавливается.Ниже приведен код.Любая помощь, определяющая, почему я могу выбрать сценарий восстановления, запустить его только и он работает, но не тогда, когда он запускается в целом, будет полезна.

Обновление 1: я создал упрощенную версию кода, котораявсе еще не функционирует, но имеет только соединение, используя WINSCP, завершает процесс SSMS и восстанавливает.Процесс уничтожения - это просто визуальная очередь для меня, чтобы увидеть, что он выполняется.

Обновление 2: я обнаружил, что если поместить скрипт восстановления в session.open, он будет работать нормально.Однако я не чувствую себя комфортно, оставляя сеанс открытым, так как sql делает его восстановление, кажется ... я не могу его выразить, но неправильно.

$localPath = "C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\MSSQL\Backup\"

# Load WinSCP .NET assembly
Add-Type -Path "C:\Program Files (x86)\WinSCP\WinSCPnet.dll"

# Set up session options
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
    Protocol = [WinSCP.Protocol]::Sftp
    HostName = "url.com"
    UserName = "username"
    Password = "password"
    SshHostKeyFingerprint = "ssh stuff"
}

$session = New-Object WinSCP.Session
    try
    {
        # Connect
        $session.Open($sessionOptions)

    }
    finally
    {
        # Disconnect, clean up
        $session.Dispose()
    }  
    exit 0
catch
{ 
   Write-Host "Error: $($_.Exception.Message)"    
    exit 1
}

        #restore database
        $Program = Get-Process SSMS -erroraction SilentlyContinue
        if ($Program)
        {
        $Program.closeMainWindow()
        Sleep 5
        If (!$Program.hasexited)
        {
        $program | stop-process -force
        }
        }
        remove-variable Program
        $FileNam = Get-ChildItem -path $localpath

        Restore-SqlDatabase -ServerInstance "machine\instance" -Database "Test" -BackupFile $FileName -ReplaceDatabase

1 Ответ

0 голосов
/ 04 января 2019

Ответ решен / найден.Перемещение восстановления в раздел «try» решило проблему, даже если это произошло после удаления соединения.Скорее всего, это как-то связано с выходом 0. Другое решение - полностью удалить коды try / catch и exit.

...