我有一个问题在农场上更新解决方案。所以我们改变了一些功能并增加了两个功能。主要的变化是在解决方案的主要特征上完成的。 在我们的测试云上,它锻炼身体。在我们的测试环境中,它首先工作正常,但在重新部署之后,它还没有任何工作。更新的功能未完全安装。这也发生在客户环境中,其他一些测试部署已经存在了同样的问题。

所以我们改变了我们提供的更新脚本。在这一点中,我们在Update-Spsolution命令和升级到部署功能的所有功能之间都有休眠时间。我们将睡眠时间从20秒从20秒提高到5分钟。

新更新现在正常,但我们想重新创建旧状态并再次使用旧更新文件安装解决方案,但这也很好;-)。 (是的那种情况差)

重要的更新过程如此:

Update-SPSolution -LiteralPath $wspFile -Identity $fileName -Force -GACDeployment -ErrorAction:Stop -ErrorVariable:updateError -Confirm:$false
Start-Sleep -Seconds $sleep
$site = Get-SPSite $SiteUrl
$siteFeatureToUpgrade = $site.QueryFeatures("Site", $true);
foreach($f in $siteFeatureToUpgrade)
{
    $f.Upgrade($false);
}
.

睡眠的值是每20次,无论如何,这可能是这个睡眠时间解决了更新问题吗?因为我不这么认为。

非常感谢。

有帮助吗?

解决方案

生成扫描码呼叫是异步的。更确切地说,此命令仅创建一个定时器作业,最终将运行。

您可以使用此函数等待作业执行结束:

function Wait-SPSolutionDeploymentJobToFinish
{
    param
    (
        [Parameter(Mandatory=$true)]
        [string]$SolutionFileName
    )
    process {
        $JobName = "*solution-deployment*$SolutionFileName*"
        $job = Get-SPTimerJob | ?{ $_.Name -like $JobName }
        if ($job -eq $null) 
        {
            Write-Host 'Timer job not found'
        }
        else
        {
            $JobFullName = $job.Name
            Write-Host -NoNewLine "Waiting to finish job $JobFullName"

            while ((Get-SPTimerJob $JobFullName) -ne $null) 
            {
                Write-Host -NoNewLine .
                Start-Sleep -Seconds 2
            }
            Write-Host  "Finished waiting for job.."
        }
    }
}

Update-SPSolution -LiteralPath $wspFile -Identity $fileName -Force -GACDeployment -ErrorAction:Stop -ErrorVariable:updateError -Confirm:$false


#Start-Sleep -Seconds $sleep
Wait-SPSolutionDeploymentJobToFinish $fileName

$site = Get-SPSite $SiteUrl
$siteFeatureToUpgrade = $site.QueryFeatures("Site", $true);
foreach($f in $siteFeatureToUpgrade)
{
    $f.Upgrade($false);
}
.

许可以下: CC-BY-SA归因
scroll top