Frage

Ich habe ein Problem mit einem Update einer Lösung auf der Farm.Deshalb haben wir einige Funktionen geändert und zwei Funktionen hinzugefügt.Die wichtigsten Änderungen wurden an der Hauptfunktion der Lösung vorgenommen.

Auf unserer Test-Cloud funktioniert es einwandfrei.In unserer Testumgebung funktionierte es zunächst gut, aber nach einer erneuten Bereitstellung funktionierte es nicht mehr.Die aktualisierten Funktionen wurden nicht vollständig installiert.Dies geschah auch in der Kundenumgebung und bei einigen anderen Testbereitstellungen trat das gleiche Problem auf.

Daher haben wir das von uns bereitgestellte Update-Skript geändert.An diesem Punkt haben wir eine Ruhezeit zwischen dem Update-SPSolution-Befehl und dem Upgrade aller Funktionen der bereitgestellten Funktionen.Wir haben die Schlafzeit von 20 Sekunden auf 5 Minuten erhöht.

Ein neues Update hat jetzt problemlos funktioniert, wir wollten aber den alten Stand wiederherstellen und haben die Lösung mit der alten Update-Datei erneut installiert, aber das funktioniert auch einwandfrei ;-).(Ja, das ist eine schlimmere Situation)

Der wichtige Update-Prozess sieht folgendermaßen aus:

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

Der Schlafwert beträgt einmal 20 und einmal 300.Könnte es sein, dass diese Ruhezeit das Update-Problem löst?Weil ich das nicht glaube.

Vielen Dank.

War es hilfreich?

Lösung

Der Update-SPSolution Aufruf ist asynchron.Genauer gesagt erstellt dieser Befehl lediglich einen Zeitgeberauftrag, der irgendwann ausgeführt wird.

Mit dieser Funktion können Sie auf das Ende der Ausführung des Jobs warten:

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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top