Get-SPSolution как средства бекапирования разработки
В процессе разработки/администрирования SharePoint очень часто с одной и той же фермой работает множество разработчиков и администраторов. Особенно, если в компании процесс развертывания и применения разработки еще не полностью устоялся, множество работ производится на рабочей базе и некоторые из участников остаются в неведении происходящего с решениями на ферме. Да и существует множество других случаев, когда часть решений, опубликованных на ферме, проходят мимо администратора.
В данной статье речь пойдет о моментальной выгрузке существующих решений (Solution). Описанные ниже инструкции можно применять как для разовой выгрузки перед выполнением определенных манипуляций с веб-приложениями, так и для настройки постоянного бекапирования развернутой разработки (может использоваться как одна из составляющих бекапа).
Получение списка всех решений фермы можно осуществить с помощью PowerShell командлета Get-SPSolution.

Данный командлет хорошо описан тут
Описанный ниже скрипт PowerShell не является открытием, а лишь описывает возможную применимость для администраторов. Данный сценарий обходит список всех решений фермы, создает отдельные папки для веб-приложений и папку для решений развернутых глобально, выгружает решения в папки соответствующих веб-приложений и папку Global
function BackUpSolutions($BackupDirectory)
{
$DateFolderName = Get-Date -format "yyyyMMddHHmmss"
$FBackupDirectory = "$BackupDirectory$DateFolderName"
New-Item -ItemType Directory -Force -Path "$BackupDirectory" | Out-Null
Write-Host "$BackupDirectory - Export Started " -ForegroundColor Yellow
foreach ($Solution in Get-SPSolution)
{
$DeploymentState = $Solution.DeploymentState
if (($DeploymentState -eq "GlobalDeployed") -or ($DeploymentState -eq "GlobalAndWebApplicationDeployed"))
{
$GlobalDirectory = "Global"
$SubDirectory = "$FBackupDirectory$GlobalDirectory"
New-Item -ItemType Directory -Force -Path "$SubDirectory" | Out-Null
ExportSolution $Solution $SubDirectory
}
if (($DeploymentState -eq "WebApplicationDeployed") -or ($DeploymentState -eq "GlobalAndWebApplicationDeployed"))
{
$DeployedWebApplications = $Solution.DeployedWebApplications
foreach ($Application in $DeployedWebApplications)
{
$ApplicationName = $Application.DisplayName
$SubSDirectory = "$FBackupDirectory$ApplicationName"
New-Item -ItemType Directory -Force -Path "$SubSDirectory" | Out-Null
ExportSolution $Solution $SubSDirectory
}
}
}
}
function ExportSolution($Solution, $SubDirectory)
{
$Id = $Solution.SolutionID
$Title = $Solution.Name
$Filename = $Solution.SolutionFile.Name
try {
$Solution.SolutionFile.SaveAs("$SubDirectory$Filename")
Write-Host "Directory: $SubDirectory , Solution: $Title - Exported" -ForegroundColor Green
}
catch
{
Write-Host "Directory: $SubDirectory , Solution: $Title - Error $_" -ForegroundColor Red
}
}
BackUpSolutions "C:Tempwsp"
Опубликовано: 06.01.2014
Автор: Сергей Снитко