6

如何取消 SharePoint (2010) 列表中所有正在运行的工作流?

我通过 technet 找到了这个脚本。

http://social.technet.microsoft.com/Forums/en-US/sharepoint2010programming/thread/d3913265-9712-4e61-9e38-1f9b78c8f718/

代码:

using (SPSite oSite = new SPSite("<your url>"))
{
    foreach (SPWeb oWeb in oSite.AllWebs)
    {
        oWeb.AllowUnsafeUpdates = true;

        // stop list workflows
        foreach (SPList list in oWeb.Lists)
        {
            foreach (SPListItem oItem in list.Items)
            {
                foreach (SPWorkflow workflow in oItem.Workflows)
                {
                    SPWorkflowManager.CancelWorkflow(workflow);
                }
            }
        }

        // stop site workflows
        foreach (SPWorkflow workflow in oWeb.Workflows)
        {
            SPWorkflowManager.CancelWorkflow(workflow);
        }

        oWeb.AllowUnsafeUpdates = false;
        oWeb.Dispose();
    }
}

非常感谢您的帮助。

4

4 回答 4

13

试一试。

我对其进行了修改,以便在特定网络上的特定列表上完成。

#Site URL
$web = Get-SPWeb "http://urlforsite.com";
$web.AllowUnsafeUpdates = $true;    

#List Name
$list = $web.Lists["ListName"];

# Iterate through all Items in List and all Workflows on Items.         
foreach ($item in $list.Items) {
foreach ($wf in $item.Workflows) {

#Cancel Workflows        
[Microsoft.SharePoint.Workflow.SPWorkflowManager]::CancelWorkflow($wf);      
}
}
$web.Dispose();

对我来说工作得很好。请让我知道这对你有没有用。

于 2011-10-13T18:50:00.370 回答
3

这个脚本对我非常有用。我进行了修改以允许我取消一个列表中的所有工作流程或仅取消一个工作流程,并认为我也会将其发布在这里:

    #Parameters
    param($listToCancel,$WfToCancel)

    #Site URL 
    $web = Get-SPWeb "http://mydomain.com"; 
    $web.AllowUnsafeUpdates = $true;     

    #List Name 
    $list = $web.Lists[$listToCancel]; 

    #Add wildcards to Wf variable
    $WildcardWfToCancel = "*"+$WfToCancel+"*";

    # Iterate through all Items in List and all Workflows on Items.          
    foreach ($item in $list.Items) { 
    foreach ($wf in $item.Workflows) { 

    #Test for workflow complete and match criteria
    if (($wf.ParentAssociation.InternalName -like $WildcardWfToCancel) -and ($wf.IsCompleted  -ne $true))        {

    #Show status and cancel Workflows
    write-Host $wf.ItemName -nonewline;
    write-host "     " -nonewline;
    write-host $wf.ParentAssociation.InternalName;
    Write-Host " Status " -nonewline;
    Write-host $wf.InternalState;     

    [Microsoft.SharePoint.Workflow.SPWorkflowManager]::CancelWorkflow($wf);       
    }
    } 
    } 
    $web.Dispose(); 
于 2011-12-05T18:44:12.173 回答
0

试试这个(C# 到 powershell 的简单“翻译”):

$site = Get-SPSite "<your url>";

$site.AllWebs | foreach {
  $web = $_;
  $web.AllowUnsafeUpdates = $true;

  # stop list workflows
  $web.Lists | foreach {
    $list = $_;
    $list.Items | foreach {
      $item = $_;
      $item.Workflows | foreach {
         $wf = $_;
         [Microsoft.SharePoint.Workflow.SPWorkflowManager]::CancelWorkflow($wf);
      }
    }
  }

  # stop site workflows
  $web.Workflows | foreach {
    $wf = $_;
    [Microsoft.SharePoint.Workflow.SPWorkflowManager]::CancelWorkflow($wf);
  }    

  $web.AllowUnsafeUpdates = $false;
  $web.Dispose();
}

$site.Dispose();
于 2011-09-29T17:10:29.723 回答
0

这是我修改后的脚本:

$web = Get-SPWeb "http://site/subsite";

  $web.allowUnsafeUpdates = 'true';

  # stop list workflows
  $web.Lists | foreach {
    $list = $_;
    $list.Items | foreach {
      $item = $_;
      $item.Workflows | foreach {
         $wf = $_;
         [Microsoft.SharePoint.Workflow.SPWorkflowManager]::CancelWorkflow($wf);
      }
    }
  }

  $web.allowUnsafeUpdates = 'false';
  $web.Dispose();

这是我得到的错误(我使用的是服务器和共享点的德语本地化版本):

Fehler bei der Enumeration einer Auflistung: Collection was modified; enumeration operation may not execute..
Bei C:\stopwf.ps1:7 Zeichen:3
+    <<<< $web.Lists | foreach {
    + CategoryInfo          : InvalidOperation: (Microsoft.Share...on+SPEnumerator:SPEnumerator) [], RuntimeException
    + FullyQualifiedErrorId : BadEnumeration

运行脚本的用户是它自己的机器上的管理员、站点集合管理员和 sql-admin。我还使用此帐户创建了子站点,因此我认为 useracces 不是问题。

我找到了这个答案(Enumeration a Collection 时 PowerShell 和 C# 之间的差异),但我不知道如何为我使用这些信息?!

于 2011-10-06T07:16:23.413 回答