代码之家  ›  专栏  ›  技术社区  ›  Daniel P. Bullington

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

  •  1
  • Daniel P. Bullington  · 技术社区  · 15 年前

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

    复制此文件失败。 此操作使用了无法联系的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 回复  |  直到 15 年前
        1
  •  7
  •   Chris Dibbs    15 年前

    我发现最好的方法是有一个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添加到服务器场,则该函数将失败。

        2
  •  2
  •   Trent    15 年前

    我也遇到了这个问题。我绕过它的唯一方法是每次在部署/收回之前重新启动WindowsSharePointServices管理服务。

    更新:我重新启动了WFE服务器,这个问题已经消失了。我希望我有更多的信息为什么,但经典的微软重启解决方案再次流行。

    真烦人。

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

        3
  •  0
  •   Greg Hurlman    15 年前

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

    更多: 如果有几个web前端,连接速度很慢,或者服务器很忙,或者任何其他导致这类事情需要一些时间的事情,那么您就会遇到麻烦。批处理文件无法处理它-Powershell脚本可以在继续之前使用对象模型检查是否真正部署了解决方案。

        4
  •  0
  •   Alex Angas Colin    15 年前

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

    在我多次尝试部署解决方案(每次复制的文件都比以前多)之后,它最终成功了。

        5
  •  0
  •   Fnop    15 年前

    我发现,当在具有多个web前端服务器的SharePoint场中使用Windows SharePoint Administration Service(SPAdmin)时,sp1中偶尔会出现故障。

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

    例子:

    psexec.exe@serverlist.txt“C:\程序文件\公用文件\ Microsoft共享\ Web服务器扩展名\12\BIN\stsadm.exe”-o execadmsvcjobs

    推荐文章