SharePoint解决方案包部署随机失败

时间:2009-05-05 19:40:41

标签: sharepoint moss stsadm wsp solution-deployment

我在解决方案部署和/或功能激活期间偶尔会看到此错误...

复制此文件失败。 此操作使用无法联系的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 个答案:

答案 0 :(得分:7)

我发现要做的最好的事情是有一个Power Shell,它会等待一个待定的计时器作业完成,然后再继续下一个任务,你可以暂停,但这需要你检查以确保时间工作已经完成。

诀窍是使用stsadm -o displaysolution -name轮询服务器。如果在服务器场上安装了wsp,则该命令会返回一些xml,如果有部署的计时器作业,则xml中会有一个“SolutionDeploymentJob”标记。通过简单的循环,您可以等待时间工作完成

Function WaitForJobOn($name){
    [xml]$val = stsadm -o displaysolution -name $name
    while($val.Solution.SolutionDeploymentJob) {
        $log.Info("waiting for a job on $name")
        sleep 5
        [xml]$val = stsadm -o displaysolution -name $name
    }
    $log.Info("Job Compleated")
}

用法: WaitForJobOn somefeature.wsp

应该注意,如果没有将wsp添加到服务器场,该函数将失败。

答案 1 :(得分:2)

我也遇到了这个问题。我唯一能解决的问题是每次部署/撤消之前重新启动Windows SharePoint Services管理服务。

更新:我重启了WFE服务器,这个问题已经消失了。我希望我有更多的信息原因,但经典的Microsoft重启解决方案再次占上风。

非常讨厌。

另一个更新:我刚刚发布了一个名为smartexecjobdefs的stsadm命令来解决这个问题。在这个blog post中,我讨论了一个Job Definition Executor,它在返回控制之前监视正在运行的作业的完成情况。这个stsadm命令只是包装了这个类。

答案 2 :(得分:0)

您需要在部署解决方案和尝试激活功能之间暂停一下 - 这有点像竞争条件。

更多:如果有多个网络前端,并且连接速度很慢,或者服务器很忙,或者导致此类事情花费一些时间的任何其他因素,那么你遇到麻烦。批处理文件无法处理它 - Powershell脚本可以使用对象模型来检查解决方案是否真正部署后再继续。

答案 3 :(得分:0)

我也遇到过这个问题。每次我尝试部署解决方案时,都会复制一些文件,然后在复制所有文件之前它会停止并显示此错误。我没有任何证据,但我相信服务器上的防病毒软件锁定文件并干扰。

在我尝试多次部署解决方案之后(每次复制比以前更多的文件),它最终起作用。

答案 4 :(得分:0)

我发现在具有多个Web前端服务器的SharePoint场中使用时,Windows SharePoint管理服务(SPAdmin)偶尔会在sp1中失败。

我建议禁用spadmim并使用远程执行工具(如psexec)运行stsadm -o execadmsvcjobs。

示例:

psexec.exe @ serverlist.txt“C:\ Program Files \ Common Files \ Microsoft Shared \ Web Server Extensions \ 12 \ BIN \ stsadm.exe”-o execadmsvcjobs