更大的睡眠时间可以是失败更新的解决方案吗?
-
09-12-2019 - |
题
我有一个问题在农场上更新解决方案。所以我们改变了一些功能并增加了两个功能。主要的变化是在解决方案的主要特征上完成的。 在我们的测试云上,它锻炼身体。在我们的测试环境中,它首先工作正常,但在重新部署之后,它还没有任何工作。更新的功能未完全安装。这也发生在客户环境中,其他一些测试部署已经存在了同样的问题。
所以我们改变了我们提供的更新脚本。在这一点中,我们在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);
}
.