Отмена нескольких рабочих процессов SharePoint с помощью PowerShell - PullRequest
6 голосов
/ 29 сентября 2011

Как можно отменить все запущенные рабочие процессы в списке 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 ]

12 голосов
/ 13 октября 2011

Дайте этому шанс.

Я изменил его так, чтобы он выполнялся в определенном списке в определенной сети.

#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();

Отлично сработало для меня. Дайте мне знать, если это работает для вас.

2 голосов
/ 05 декабря 2011

Этот скрипт был чрезвычайно полезен для меня.Я сделал модификацию, чтобы позволить мне отменить все рабочие процессы в одном списке или только одном рабочем процессе, и подумал, что я тоже опубликую его здесь:

    #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(); 
0 голосов
/ 06 октября 2011

вот мой модифицированный скрипт:

$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();

и это ошибка, которую я получаю (я использую локализованную на немецком языке версию сервера и sharepoint):

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-администрирования. я также создал дочерний сайт с этой учетной записью, так что я не думаю, что проблема будет в использовании ссылок.

Я нашел этот ответ ( Различия между PowerShell и C # при перечислении коллекции ), но я не понимаю, как использовать эту информацию для меня?!

0 голосов
/ 29 сентября 2011

Попробуйте это (простой «перевод» 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...