Отмена нескольких рабочих процессов SharePoint с помощью PowerShell
как можно отменить все запущенные рабочие процессы в списке SharePoint (2010)?
Я нашел этот скрипт через technet.
код:
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 ответов
дайте этому шанс.
Я изменил его так, чтобы он выполнялся в определенном списке в определенном интернете.
#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();
работал просто отлично для меня. Дай мне знать, если это сработает.
этот скрипт был мне очень полезен. Я делаю изменение, чтобы позволить мне отменить все рабочие процессы в одном списке или только один рабочий процесс, и думал, что я опубликую его здесь:
#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();
попробуйте это (простой "перевод" 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();
вот мой измененный скрипт:
$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
пользователь runnig скрипт является администратором на машине, он сам, sitecollection admin и sql-admin. я также создал дочерний сайт с этой учетной записью, поэтому я не думаю, что useracces будет проблемой.
Я нашел этот ответ (различия между PowerShell и C# при перечислении Коллекция) но я не знают, как использовать эту информацию для меня?!