Skip to content

Instantly share code, notes, and snippets.

@themaximax
Created April 22, 2018 18:34
Show Gist options
  • Save themaximax/085bc48ea7a06c2378cf7362414ed7a9 to your computer and use it in GitHub Desktop.
Save themaximax/085bc48ea7a06c2378cf7362414ed7a9 to your computer and use it in GitHub Desktop.
Backup Skif_BP MSSQL Database
$server = "localhost" #Адресс сервера (в моем случае локальный)
$db = "Skif_Bp" #База данных
$back_dir = "E:\backup" #Куда сохранять бэкапы
$file_name = $db + "_" + (Get-Date -Format yyyy-MM-dd) + ".bak" #имя бэкапа вида BaseName_2018-12-31.bak
$arch_type = "7z" #Тип архива
$days = 14 #сколько дней хранить бекапы
#Для бекапа сетевой базы нужно будет использовать логин и пароль для доступа к серверу
#cм. справку к команде Backup-SqlDatabase
Set-Location $back_dir
$back_dir = Get-Location
#ДЕЛАЕМ БЭКАП
Write-Host "Делаю резервную копию базы $db..."
Backup-SqlDatabase -ServerInstance $server -Database $db -BackupFile "$back_dir\$file_name"
if (-Not ($?)) {
Write-Host "Возникла непредвиденная ошибка!" -ForegroundColor Red
Read-Host "Для выхода нажмите Enter"
Exit
}
Write-Host "Архивирую..."
Compress-7Zip -Path $file_name -ArchiveFileName "$file_name.$arch_type"
Write-Host "Удаляю не сжатый $file_name"
Remove-Item $file_name -Force
Write-Host "`nРезервное копирование успешно завершено!" -ForegroundColor Green
#УДАЛЯЕМ СТАРЫЕ БЭКАПЫ
Write-Host "`nУдаляю устаревшие резервные копии:"
#Через Where-Object фильтруем вывод Get-ChildItem и циклом удаляем оставшиеся файлы
$date_limit = (Get-Date).AddDays(-$days)
Get-ChildItem | Where-Object {($_.Name -like "*.bak.$arch_type") -and ($_.LastWriteTime -lt $date_limit)} |
ForEach-Object {
Remove-Item $_ -Force
Write-Host "- $_"
}
#Трюк для запуска PowerShell с правами администратора
If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
# Relaunch as an elevated process:
Start-Process powershell.exe "-File",('"{0}"' -f $MyInvocation.MyCommand.Path) -Verb RunAs
exit
}
#Указываем пакеты, которые нам нужны, перебирая циклом, устанавливаем
$packages = '7Zip4Powershell', 'SqlServer'
foreach ($package in $packages)
{
Get-Package $package -ErrorAction SilentlyContinue | Out-Null #Проверяем наличие пакета
if (-Not ($?)) #Если ошибка, то устанавливаем
{
Clear-Host
Write-Host 'Устанавливаю'$package'...'
Install-Package -Name $package -Force
}
}
Write-Host 'Пакеты', $packages, 'установлены!' -ForegroundColor Green
Start-Sleep 3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment