在一些在线资源的帮助下,我编译了一个PowerShell脚本,该脚本将:
如果我将其分解并单独运行,则代码可以正常工作。但是,当我组合它们时,它会一直运行到还原为止,然后停止。下面是代码。任何有助于确定为什么我可以选择还原脚本,仅运行还原脚本且可以正常运行的帮助,但是当整体运行时却无济于事。
更新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
答案 0 :(得分:0)
答案已解决/找到。将还原移动到“尝试”部分即可解决该问题,即使它在连接处置之后也是如此。很有可能与退出0有关。另一种解决方案是完全删除try / catch和退出代码。