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
Автор: Сергей Снитко