Пакет решений SharePoint Развертывание случайных сбоев

Я постоянно вижу эту ошибку во время развертывания решения и / или активации функции...

Копирование этого файла не удалось. Эта операция использует службу администрирования SharePoint (spadmin), с которой невозможно связаться. Если служба остановлена ​​или отключена, запустите ее и попробуйте снова.

Ниже приведен сценарий PowerShell, используемый для развертывания:

$programfiles_path = $null
$stsadm_path = $null
$url = $null
$solution = $null
$feature = $null
$appPoolName = $null



$url = "http://" + ${env:COMPUTERNAME}
$programfiles_path = ${env:ProgramW6432}

if ($programfiles_path -eq $null)
{
    $programfiles_path = ${env:ProgramFiles}
}

$stsadm_path = $programfiles_path + "\common files\microsoft shared\web server extensions\12\bin\stsadm.exe"

if(!(test-path $stsadm_path))
{
    echo "stsadm.exe was not found: $stsadm_path"
    exit -1
}


ECHO "***********************************"
ECHO "*** Contoso.Common.SolutionPackage ***"
ECHO "***********************************"

$solution = "Contoso.Common.SolutionPackage.wsp"

ECHO "*** add the solution ***"
& $stsadm_path -o addsolution -filename $solution 
if ($? -eq $false) { exit }

ECHO "*** execute admin jobs ***"
& $stsadm_path -o execadmsvcjobs        
if ($? -eq $false) { exit }

ECHO "*** deploy the solution ***"
& $stsadm_path -o deploysolution -name $solution -immediate -allowgacdeployment -url $url -force 
if ($? -eq $false) { exit }

ECHO "*** execute admin jobs ***"
& $stsadm_path -o execadmsvcjobs        
if ($? -eq $false) { exit }

$feature = "Contoso.Common.Infrastructure"

ECHO "*** activate feature(s) ***"
& $stsadm_path -o activatefeature -name $feature -url $url -force 
if ($? -eq $false) { exit }

ECHO "*** execute admin jobs ***"
& $stsadm_path -o execadmsvcjobs        
if ($? -eq $false) { exit }

$feature = "Contoso.CustomCAS"

ECHO "*** activate feature(s) ***"
& $stsadm_path -o activatefeature -name $feature -url $url -force 
if ($? -eq $false) { exit }

ECHO "*** execute admin jobs ***"
& $stsadm_path -o execadmsvcjobs        
if ($? -eq $false) { exit }

$feature = "Contoso.Common.WebParts"

ECHO "*** activate feature(s) ***"
& $stsadm_path -o activatefeature -name $feature -url $url -force 
if ($? -eq $false) { exit }

ECHO "*** execute admin jobs ***"
& $stsadm_path -o execadmsvcjobs        
if ($? -eq $false) { exit }

$feature = "Contoso.ExcelExtender"

ECHO "*** activate feature(s) ***"
& $stsadm_path -o activatefeature -name $feature -url $url -force 
if ($? -eq $false) { exit }

ECHO "*** execute admin jobs ***"
& $stsadm_path -o execadmsvcjobs        
if ($? -eq $false) { exit }



ECHO "*********************************"
ECHO "*** Contoso.Something ***"
ECHO "*********************************"

$solution = "Contoso.Something.wsp"

ECHO "*** add the solution ***"
& $stsadm_path -o addsolution -filename $solution 
if ($? -eq $false) { exit }

ECHO "*** execute admin jobs ***"
& $stsadm_path -o execadmsvcjobs        
if ($? -eq $false) { exit }

ECHO "*** deploy the solution ***"
& $stsadm_path -o deploysolution -name $solution -immediate -allowgacdeployment -url $url -force 
if ($? -eq $false) { exit }

ECHO "*** execute admin jobs ***"
& $stsadm_path -o execadmsvcjobs        
if ($? -eq $false) { exit }

$feature = "Contoso.Something"

ECHO "*** activate feature(s) ***"
& $stsadm_path -o activatefeature -name $feature -url $url -force 
if ($? -eq $false) { exit }

ECHO "*** execute admin jobs ***"
& $stsadm_path -o execadmsvcjobs        
if ($? -eq $false) { exit }




ECHO "*********************************"
ECHO "*** Contoso.Nothing ***"
ECHO "*********************************"

$solution = "Contoso.Nothing.wsp"

ECHO "*** add the solution ***"
& $stsadm_path -o addsolution -filename $solution 
if ($? -eq $false) { exit }

ECHO "*** execute admin jobs ***"
& $stsadm_path -o execadmsvcjobs        
if ($? -eq $false) { exit }

ECHO "*** deploy the solution ***"
& $stsadm_path -o deploysolution -name $solution -immediate -allowgacdeployment -force 
if ($? -eq $false) { exit }

ECHO "*** execute admin jobs ***"
& $stsadm_path -o execadmsvcjobs        
if ($? -eq $false) { exit }

$feature = $null










ECHO "*****************************************"
ECHO "*** Contoso.Everything ***"
ECHO "*****************************************"

$solution = "Contoso.Everything.wsp"

ECHO "*** add the solution ***"
& $stsadm_path -o addsolution -filename $solution 
if ($? -eq $false) { exit }

ECHO "*** execute admin jobs ***"
& $stsadm_path -o execadmsvcjobs        
if ($? -eq $false) { exit }

ECHO "*** deploy the solution ***"
& $stsadm_path -o deploysolution -name $solution -immediate -allowgacdeployment -url $url -force 
if ($? -eq $false) { exit }

ECHO "*** execute admin jobs ***"
& $stsadm_path -o execadmsvcjobs        
if ($? -eq $false) { exit }

$feature = "Contoso.Everything"

ECHO "*** activate feature(s) ***"
& $stsadm_path -o activatefeature -name $feature -url $url -force 
if ($? -eq $false) { exit }

ECHO "*** execute admin jobs ***"
& $stsadm_path -o execadmsvcjobs        
if ($? -eq $false) { exit }




ECHO "*****************************"
ECHO "*** Contoso.CashMoneyMillionaires ***"
ECHO "*****************************"

$solution = "Contoso.CashMoneyMillionaires.wsp"

ECHO "*** add the solution ***"
& $stsadm_path -o addsolution -filename $solution 
if ($? -eq $false) { exit }

ECHO "*** execute admin jobs ***"
& $stsadm_path -o execadmsvcjobs        
if ($? -eq $false) { exit }

ECHO "*** deploy the solution ***"
& $stsadm_path -o deploysolution -name $solution -immediate -allowgacdeployment -url $url -force 
if ($? -eq $false) { exit }

ECHO "*** execute admin jobs ***"
& $stsadm_path -o execadmsvcjobs        
if ($? -eq $false) { exit }

$feature = "Contoso.CashMoneyMillionaires"

ECHO "*** activate feature(s) ***"
& $stsadm_path -o activatefeature -name $feature -url $url -force 
if ($? -eq $false) { exit }

ECHO "*** execute admin jobs ***"
& $stsadm_path -o execadmsvcjobs        
if ($? -eq $false) { exit }





ECHO "************************************"
ECHO "*** Contoso.DollaDollaBill ***"
ECHO "************************************"

$solution = "Contoso.DollaDollaBill.wsp"

ECHO "*** add the solution ***"
& $stsadm_path -o addsolution -filename $solution 
if ($? -eq $false) { exit }

ECHO "*** execute admin jobs ***"
& $stsadm_path -o execadmsvcjobs        
if ($? -eq $false) { exit }

ECHO "*** deploy the solution ***"
& $stsadm_path -o deploysolution -name $solution -immediate -allowgacdeployment -url $url -force 
if ($? -eq $false) { exit }

ECHO "*** execute admin jobs ***"
& $stsadm_path -o execadmsvcjobs        
if ($? -eq $false) { exit }

$feature = "Contoso.DollaDollaBill"

ECHO "*** activate feature(s) ***"
& $stsadm_path -o activatefeature -name $feature -url $url -force 
if ($? -eq $false) { exit }

ECHO "*** execute admin jobs ***"
& $stsadm_path -o execadmsvcjobs        
if ($? -eq $false) { exit }



ECHO "************************"
ECHO "*** IIS APPPOOL MGMT ***"
ECHO "************************"

ECHO "*** query wmi for apppool ***"
$appPoolName = "SharedServices1"
$appPool = get-wmiobject -namespace "root\MicrosoftIISv2" -class "IIsApplicationPool" | Where-Object {$_.Name -eq "W3SVC/APPPOOLS/$appPoolName"}
if ($? -eq $false) { exit }

ECHO "*** recycle apppool ***"
$appPool.Recycle()
if ($? -eq $false) { exit }

У меня есть эквивалентный пакетный файл, который также случайным образом терпит неудачу. Сбой на разных серверах. Я совершенно сбит с толку относительно причины и решения.

Любая помощь будет оценена.

5 ответов

Лучшее, что я нашел для этого, - это Power Shell, который будет ожидать завершения отложенного задания таймера, прежде чем перейти к следующему заданию, однако вы можете сделать паузу, однако вам потребуется проверить, чтобы убедиться, что задание времени закончен.

Хитрость заключается в опросе сервера с использованием stsadm -o displayolution -name. если в ферме установлен wsp, команда возвращает некоторый xml, если для развертывания есть задание таймера, в xml есть тег "SolutionDeploymentJob". С помощью простого цикла вы можете дождаться окончания рабочего времени

Функция WaitForJobOn($name){
    [xml]$val = stsadm -o displayolution -name $name
    while($val.Solution.SolutionDeploymentJob) {
        $log.Info("ожидание работы на $name")
        спать 5
        [xml]$val = stsadm -o displayolution -name $name
    }
    $log.Info("Задание выполнено")
}

использование:WaitForJobOn somefeature.wsp

Следует отметить, что функция не будет работать, если wsp не будет добавлен в ферму.

Я тоже сталкиваюсь с этой проблемой. Единственный способ обойти это - перезапускать службу администрирования Windows SharePoint Services каждый раз перед развертыванием / удалением.

ОБНОВЛЕНИЕ: я перезагрузил сервер WFE, и эта проблема исчезла. Хотелось бы, чтобы у меня было больше информации, почему, но классическое решение перезагрузки Microsoft снова преобладает.

Это очень раздражает.

ДРУГОЕ ОБНОВЛЕНИЕ: я только что выпустил команду stsadm под названием smartexecjobdefs, которая решает эту проблему. В этой записи блога я рассказываю об исполнителе определения задания, который отслеживает завершение выполнения заданий перед возвратом управления. Эта команда stsadm просто переносит этот класс.

Я считаю, что служба администрирования Windows SharePoint (SPAdmin) время от времени дает сбой в SP1 при использовании в ферме SharePoint с несколькими веб-интерфейсными серверами.

Я предлагаю отключить spadmim и запустить stsadm -o execadmsvcjobs с помощью инструмента удаленного выполнения, такого как psexec.

Пример:

psexec.exe @ serverlist.txt "C: \ Program Files \ Common Files \ Microsoft Shared \ Расширения веб-сервера \12\BIN\stsadm.exe" -o execadmsvcjobs

Вам нужно сделать паузу между развертыванием своего решения и попыткой активировать свои функции - это немного состязание.

Более того: если имеется несколько веб-интерфейсов, а подключение медленное, либо серверы заняты, или любое другое, из-за чего такие вещи могут занять некоторое время, - у вас возникают проблемы. Пакетные файлы не могут справиться с этим - сценарий Powershell может использовать объектную модель, чтобы проверить, действительно ли решение развернуто, прежде чем двигаться дальше.

У меня тоже была эта проблема. Каждый раз, когда я пытался развернуть решение, некоторые из файлов были скопированы, затем он остановился с этой ошибкой перед копированием всех из них. У меня нет никаких доказательств, но я считаю, что антивирусное программное обеспечение на сервере блокировало файлы и вмешивалось.

В конечном итоге это сработало после того, как я несколько раз пытался развернуть решение (каждый раз копируя на несколько файлов больше, чем раньше).

Другие вопросы по тегам