Backup и PowerShell
Сегодня столкнулся с такой задачей, по созданию скрипта который будет выполнять следующие функции:
Получилось что-то вот такое:
Рабочий пример:
cls
if((Get-PSSnapin | Where {$_.Name -eq "Microsoft.SharePoint.PowerShell"}) -eq $null) {
Add-PSSnapin Microsoft.SharePoint.PowerShell;
}
# Определение функции Backup-SPSiteCollections
Function Backup-SPSiteCollections ()
{
param(
[Parameter(
Position=0,
Mandatory=$true
)]
[Guid]$SPSiteID,
[Parameter(
Position=0,
Mandatory=$true
)]
[string]$BackupFolder,
[Parameter(
Position=0,
Mandatory=$true
)]
[string]$SiteName,
[Parameter(
Position=0,
Mandatory=$true
)]
[int]$BackupFilesLimit,
[Parameter(
Position=0,
Mandatory=$false
)]
[string]$Email = "",
[Parameter(
Position=0,
Mandatory=$false
)]
[string]$SmtpServer = ""
)
$siteNameSlug = $SiteName -replace "https://", ""
$siteNameSlug = $siteNameSlug -replace "http://", ""
$siteNameSlug = $siteNameSlug -replace ":", "-"
$siteNameSlug = $siteNameSlug -replace " ", "-"
$siteNameSlug = $siteNameSlug -replace "/", "-"
$siteNameSlug = $siteNameSlug -replace "\.", "-"
# Проверка существует ли папка для резервного копирования
if (Test-Path $BackupFolder)
{
# Получаем предыдущие копии, сортируем по времени
$files = Get-Childitem $BackupFolder | where {$_.Name -like ("*" + $siteNameSlug + "*.bak")} | Sort $_.LastWriteTime
$filesCount = @($files).Count
# Если лимит превышен
if($filesCount -ge $BackupFilesLimit)
{
# Удаляет старые копии
for ( $i=0; $i -lt $filesCount-$BackupFilesLimit+1; $i++)
{
Remove-Item ($BackupFolder + $files[$i].Name)
}
}
}
# Если папки нет то создаем
else
{
New-Item $BackupFolder -type directory
}
$backupFileName = ("" + $siteNameSlug + "_" + (Get-Date -Format yyyy_MM-dd_hh-mm) + ".bak")
$backupFilePath = $BackupFolder + $backupFileName
$startTime = Get-Date
Backup-SPSite -identity $_.ID -path ($backupFilePath) -force
$endTime = Get-Date
# Проверка аттрибутов для отправки сообщения
if($Email -ne "" -and $SmtpServer -ne "")
{
$subject = "SharePoint: Резервное копирование успешно завершено!"
$body = "В резервном хранилище находится следующая коллекция сайта: " + $SiteName + "`n"
$body += "Коллекция сайтов в резервном хранилище: " + $backupFileName + "`n"
$body += "Резервное копирование началось: " + $startTime + ", и была завершена: " + $endTime + "`n`n"
# Получение размеров коллеекции сайта
$SiteCollectionSize = Get-SPSite "<URL Web Application>" | Select @{Label="Size"; Expression={$_.Usage.Storage/1MB}} | Select Size
# Получение размеров резервной копии
$backupFileSize = Get-ChildItem $backupFilePath
$backupFileSize = [Math]::Round($backupFileSize.length/1MB, 2)
$body += "Site collection size on SharePoint system is: " + [Math]::Round($SiteCollectionSize.Size, 2) + " MB`n"
$body += "Backup file size: " + $backupFileSize + " MB"
$smtp = new-object Net.Mail.SmtpClient($SmtpServer)
# Отправка почты
$smtp.Send($Email, $Email, $subject, $body)
}
}
# Резервное копирование определенных коллекций сайта
Get-SPSite <URL Site Collection> | ForEach-Object {Backup-SPSiteCollections -SPSiteID $_.ID -BackupFolder "d:\Backups\" -SiteName $_.Url -BackupFilesLimit 10 -Email "Ваш ящик" -SmtpServer "<Ваш SMTP Server>"}
Links: http://www.spdockit.com/
http://technet.microsoft.com/en-us/library/ee428315.aspx
- Выполнить копирование определенной коллекции сайтов
- Подставлять в название дату и рендерить само название
- Отправлять почту по завершению копирования
Получилось что-то вот такое:
Рабочий пример:
cls
if((Get-PSSnapin | Where {$_.Name -eq "Microsoft.SharePoint.PowerShell"}) -eq $null) {
Add-PSSnapin Microsoft.SharePoint.PowerShell;
}
# Определение функции Backup-SPSiteCollections
Function Backup-SPSiteCollections ()
{
param(
[Parameter(
Position=0,
Mandatory=$true
)]
[Guid]$SPSiteID,
[Parameter(
Position=0,
Mandatory=$true
)]
[string]$BackupFolder,
[Parameter(
Position=0,
Mandatory=$true
)]
[string]$SiteName,
[Parameter(
Position=0,
Mandatory=$true
)]
[int]$BackupFilesLimit,
[Parameter(
Position=0,
Mandatory=$false
)]
[string]$Email = "",
[Parameter(
Position=0,
Mandatory=$false
)]
[string]$SmtpServer = ""
)
$siteNameSlug = $SiteName -replace "https://", ""
$siteNameSlug = $siteNameSlug -replace "http://", ""
$siteNameSlug = $siteNameSlug -replace ":", "-"
$siteNameSlug = $siteNameSlug -replace " ", "-"
$siteNameSlug = $siteNameSlug -replace "/", "-"
$siteNameSlug = $siteNameSlug -replace "\.", "-"
# Проверка существует ли папка для резервного копирования
if (Test-Path $BackupFolder)
{
# Получаем предыдущие копии, сортируем по времени
$files = Get-Childitem $BackupFolder | where {$_.Name -like ("*" + $siteNameSlug + "*.bak")} | Sort $_.LastWriteTime
$filesCount = @($files).Count
# Если лимит превышен
if($filesCount -ge $BackupFilesLimit)
{
# Удаляет старые копии
for ( $i=0; $i -lt $filesCount-$BackupFilesLimit+1; $i++)
{
Remove-Item ($BackupFolder + $files[$i].Name)
}
}
}
# Если папки нет то создаем
else
{
New-Item $BackupFolder -type directory
}
$backupFileName = ("" + $siteNameSlug + "_" + (Get-Date -Format yyyy_MM-dd_hh-mm) + ".bak")
$backupFilePath = $BackupFolder + $backupFileName
$startTime = Get-Date
Backup-SPSite -identity $_.ID -path ($backupFilePath) -force
$endTime = Get-Date
# Проверка аттрибутов для отправки сообщения
if($Email -ne "" -and $SmtpServer -ne "")
{
$subject = "SharePoint: Резервное копирование успешно завершено!"
$body = "В резервном хранилище находится следующая коллекция сайта: " + $SiteName + "`n"
$body += "Коллекция сайтов в резервном хранилище: " + $backupFileName + "`n"
$body += "Резервное копирование началось: " + $startTime + ", и была завершена: " + $endTime + "`n`n"
# Получение размеров коллеекции сайта
$SiteCollectionSize = Get-SPSite "<URL Web Application>" | Select @{Label="Size"; Expression={$_.Usage.Storage/1MB}} | Select Size
# Получение размеров резервной копии
$backupFileSize = Get-ChildItem $backupFilePath
$backupFileSize = [Math]::Round($backupFileSize.length/1MB, 2)
$body += "Site collection size on SharePoint system is: " + [Math]::Round($SiteCollectionSize.Size, 2) + " MB`n"
$body += "Backup file size: " + $backupFileSize + " MB"
$smtp = new-object Net.Mail.SmtpClient($SmtpServer)
# Отправка почты
$smtp.Send($Email, $Email, $subject, $body)
}
}
# Резервное копирование определенных коллекций сайта
Get-SPSite <URL Site Collection> | ForEach-Object {Backup-SPSiteCollections -SPSiteID $_.ID -BackupFolder "d:\Backups\" -SiteName $_.Url -BackupFilesLimit 10 -Email "Ваш ящик" -SmtpServer "<Ваш SMTP Server>"}
Links: http://www.spdockit.com/
http://technet.microsoft.com/en-us/library/ee428315.aspx
Комментарии
Отправить комментарий