Windows PowerShell – Workflows programmatisch aus SharePoint Listen entfernen

Vor kurzem tauchte eine Anforderung auf, bei dem aus einer SharePoint Liste mehrere Workflows programmatisch entfernt werden mussten. Dieses Problem soll mit Hilfe eine Windows PowerShell Skriptes gelöst werden. Im folgenden soll anhand des Quellcodes dargestellt werden, wie dieser Anforderung begegnet werden kann.

Import der SharePoint cmdlets und laden des SharePoint-Web

First things first werden eine Reihe von PowerShell CMDlets für MS SharePoint benötigt. Mit dem folgenden Befehl können diese importiert werden

Add-PSSnapin Microsoft.SharePoint.PowerShell

Als nächstes muss das Root-Web der betreffenden SharePoint Liste geladen werden. Über das SPWeb Objekt können wir die Listen zugreifen, die eine Eigenschaft dieses Objektes sind.

#load the root web of your list
$WebURL ="http://your-spweb"
[Microsoft.SharePoint.SPWeb] $SPWeb = Get-SPWeb $WebURL -ErrorAction Continue

#load your list
$ListName ="your list name"
[Microsoft.SharePoint.SPList]$List= $SPWeb.Lists[$ListName]

 

Löschen der SharePoint Listen Workflows über die WorkflowAssociations

SharePoint Listen haben eine Property namens „WorkflowAssociations“, eine Collection vom Typ „WorkflowAssociation“. Über diese kann der Zugriff auf die einzelnen Workflows erfolgen. Zum löschen des Workflows kann die Instanz-Methode RemoveWorkflowAssociation([Microsoft.SharePoint.WorkflowAssociation] $wa) der Klasse „SPList“ genutzt werden, der wiederum die betreffende „WorkflowAssociation“ übergeben wird.

[Microsoft.SharePoint.Workflow.SPWorkflowAssociationCollection]$Ass = $List.WorkflowAssociations
[Microsoft.SharePoint.Workflow.SPWorkflowAssociation]$a=$null
    [Microsoft.SharePoint.Workflow.SPWorkflowAssociation [] ] $WArray=@()
[int]$i = $Ass.Count

for($j=0; $j-lt$i;$j++){
    
        $a=$Ass[$j]
        $WArray+=$a

}

ForEach($W in $WArray){
           $List.RemoveWorkflowAssociation($W)
        $List.Update()

    }

Das Ergebnis sollte eine Liste ohne Workflows sein, d.h. alle Workflows wurden aus der SharePoint-Liste gelöscht. Auch alte deaktivierte Versionen sind von diesem Löschvorgang betroffen. Um hier ggf. eine Unterscheidung zu treffen, könnte z.B. die Eigenschaft „Enabled“ der „WorkflowAssociation“ abgefragt werden. Für Details sei auf die Dokumentation verwiesen

https://docs.microsoft.com/de-de/dotnet/api/microsoft.sharepoint.workflow.spworkflowassociation?view=sharepoint-server

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.