2011-09-29 12 views
6

का उपयोग कर एकाधिक SharePoint वर्कफ़्लो को रद्द करें SharePoint (2010) सूची में सभी चल रहे वर्कफ़्लो को रद्द करना कैसे संभव है?PowerShell

मुझे इस स्क्रिप्ट को तकनीकी के माध्यम से मिला।

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

आपकी मदद के लिए बहुत धन्यवाद।

उत्तर

11

इसे एक शॉट दें।

मैंने इसे संशोधित किया ताकि यह एक विशिष्ट वेब पर एक विशिष्ट सूची पर किया जा सके।

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

मेरे लिए ठीक काम किया। अगर यह आप के लिए काम करता है तो मुझे बतलाएगा।

+0

वास्तव में यह बहुत उपयोगी है !!! मैं अब खुश हूं;) THX – DaviideSnow

+0

अच्छा सौदा। मुझे खुशी है कि यह आपके लिए काम करता है। –

0

इस (सरल powershell सी # का "अनुवाद") का प्रयास करें:

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

त्रुटि मैं प्राप्त एक यह है (मैं एक जर्मन उपयोग कर रहा हूँ:

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

अरे पेड्रो, आपकी मदद के लिए बहुत धन्यवाद! आपका उत्तर मेरे लिए बहुत उपयोगी था। मैंने स्क्रिप्ट को केवल subwebs के माध्यम से चलाने के लिए बदल दिया। स्क्रिप्ट वर्कफ़्लो को रद्द करने से पहले ही काम करता है, लेकिन एक समस्या बाकी है। मुझे एक "गणना त्रुटि" मिलती है। मैं इसका कैसे समाधान करूं। मुझे पता चला कि SharePoint-Web को बदलते समय यह एक सरणी समस्या है। – DaviideSnow

+0

क्या आप पावरहेल "स्टैक ट्रेस" और/या स्क्रिप्ट के संशोधित संस्करण को पोस्ट कर सकते हैं? क्या आप वाकई उस पावरहेल स्क्रिप्ट को चलाने वाले उपयोगकर्ता के पास सभी जाल या आपके एसपीएससाइट को गिनने और एक्सेस करने के लिए विशेषाधिकार हैं? –

0
यहाँ

मेरी संशोधित स्क्रिप्ट है सर्वर और 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 मशीन यह है पर व्यवस्थापक है एल्फ, साइटकोलेक्शन व्यवस्थापक और एसक्यूएल-एडमिन। मैंने इस खाते के साथ सबसाइट भी बनाया है, इसलिए मुझे नहीं लगता कि उपयोगकर्ताैक समस्या होगी।

मुझे यह उत्तर मिला (Differences Between PowerShell and C# when Enumerating a Collection) लेकिन मुझे इस जानकारी का उपयोग करने के लिए कोई संकेत नहीं मिलता है ?!

2

यह स्क्रिप्ट मेरे लिए बुरी तरह उपयोगी है। मैं मुझे एक सूची में सभी कार्य प्रवाह या सिर्फ एक कार्यप्रवाह रद्द करने के लिए अनुमति देने के लिए एक संशोधन करना है और मैं इसे पोस्ट होगा यहाँ भी सोचा:

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