С помощью некоторых онлайн-ресурсов я скомпилировал скрипт 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