Un tempo di sonno più grande potrebbe essere la soluzione per un aggiornamento fallito?

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/37446

  •  09-12-2019
  •  | 
  •  

Domanda

Ho un problema con un aggiornamento di una soluzione in fattoria. Quindi abbiamo cambiato alcune funzionalità e ha aggiunto due caratteristiche. Le principali modifiche sono state eseguite alla caratteristica principale della soluzione.

Sul nostro test cloud funziona bene. Nel nostro ambiente di test funziona prima, ma dopo una ridistribuzione non ha funzionato più. Le funzionalità aggiornate non sono state installate completamente. Questo è successo anche all'ambiente del cliente e alcune altre implementazioni di test hanno lo stesso problema.

Quindi abbiamo cambiato lo script di aggiornamento che abbiamo fornito. In questo punto abbiamo un orario di sospensione tra il comando di aggiornamento-spsolution e l'aggiornamento di tutte le funzionalità delle funzionalità distribuite. Abbiamo sollevato il tempo di sonno da 20 secondi a 5 minuti.

Un nuovo aggiornamento ora è andato bene, ma volevamo ricreare il vecchio stato e installato nuovamente la soluzione con il vecchio file di aggiornamento, ma funziona anche bene ;-). (Sì, questa è una situazione peggiore)

L'importante processo di aggiornamento appare in questo modo:

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);
}
.

Il valore del sonno è una volta 20 e una volta 300. Comunque, potrebbe essere che questo tempo di sonno risolve il problema di aggiornamento? Perché non penso così.

Grazie mille.

È stato utile?

Soluzione

La chiamata Update-SPSolution è asincrona.Più precisamente, questo comando crea solo un lavoro timer che verrà eseguito alla fine.

È possibile utilizzare questa funzione per attendere la fine dell'esecuzione del lavoro:

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);
}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top