当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] SharePoint Online:使用 PowerShell 获取工作流清单

作者:精品下载站 日期:2024-12-14 15:00:15 浏览:16 分类:玩电脑

SharePoint Online:使用 PowerShell 获取工作流清单


要求:查找 SharePoint Online 网站集中的所有工作流并将工作流清单导出到 CSV 报告。

[玩转系统] SharePoint Online:使用 PowerShell 获取工作流清单

PowerShell 在 SharePoint Online 中导出工作流清单:

在 SharePoint Online 中管理工作流可能具有挑战性,尤其是当您有大量工作流跨多个网站和列表运行时。幸运的是,PowerShell 可用于创建 SharePoint Online 中所有工作流的清单,为您提供所有工作流的概述。在本文中,我们将了解如何使用 PowerShell 在 SharePoint Online 网站中创建所有工作流的清单。

此脚本从给定 SharePoint Online 网站集中的所有列表和库获取所有工作流,并将工作流数据导出到 CSV 文件中。


#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
Add-Type -Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\ISAPI\Microsoft.SharePoint.Client.WorkflowServices.dll"

#Function to Get workflows in a site
Function Get-SPOWorkflowInventory($SiteURL, $CSVPath)
{
    Try{
        $WorkflowInventory = @()
        #Setup the context
        $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
        $Ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
    
        #Get the Web and its Subsites
        $Web = $Ctx.Web
        $Ctx.Load($Web)
        $Ctx.Load($Web.Webs)
        $Lists = $Web.Lists
        $Ctx.Load($Lists)
        $Ctx.ExecuteQuery()

        #Initialize Workflow Manager Object
        $WorkflowServicesManager = New-Object Microsoft.SharePoint.Client.WorkflowServices.WorkflowServicesManager($Ctx, $Web)

        Write-host -f Yellow "Searching Workflows in Site: $SiteURL"
        #Loop through each list and get all workflows sharepoint online powershell
        ForEach($List in $Lists)
        {
            #Get SharePoint 2013 Workflows Associated with the List    
            $WorkflowSubscriptionService = $workflowServicesManager.GetWorkflowSubscriptionService()
            $WorkflowAssociations = $WorkflowSubscriptionService.EnumerateSubscriptionsByList($List.Id)
            $Ctx.Load($WorkflowAssociations)
            $Ctx.ExecuteQuery()

            #Loop through each workflow associated with the List
            Foreach ($Association in $WorkflowAssociations | Where {$_.Name -notlike "*Previous Version*"})
            { 
                $WorkflowData = New-Object PSObject
                $WorkflowData | Add-Member NoteProperty WorkflowName($Association.Name)
                $WorkflowData | Add-Member NoteProperty SiteURL($Web.Url)
                $WorkflowData | Add-Member NoteProperty ListName($List.Title)
                Write-host -f Green "`t Found Workflow '$($Association.Name)' in list '$($List.Title)'"
                $WorkflowInventory+=$WorkflowData
            }

            #Get SharePoint 2010 Workflows Associated
            $WorkflowAssociations = $List.WorkflowAssociations
            $Ctx.Load($WorkflowAssociations)
            $Ctx.ExecuteQuery()
            ForEach($Association in $WorkflowAssociations | Where {$_.Name -notlike "*Previous Version*"})
            {
                $WorkflowData = New-Object PSObject
                $WorkflowData | Add-Member NoteProperty WorkflowName($Association.Name)
                $WorkflowData | Add-Member NoteProperty SiteURL($Web.Url)
                $WorkflowData | Add-Member NoteProperty ListName($List.Title)
                Write-host -f Green "`t Found Workflow '$($Association.Name)' in list '$($List.Title)'"
                $WorkflowInventory+=$WorkflowData
            }
        }
        #Export Workflow data to CSV File
        If($WorkflowInventory) { $WorkflowInventory | Export-CSV -LiteralPath $CSVPath -NoTypeInformation -Append}

        #Process Subsites
        Foreach($Subweb in $Web.Webs)
        {
            Get-SPOWorkflowInventory -SiteURL $Subweb.url
        }
    }
    Catch {
    Write-host -f Red "Error:" $_.Exception.Message
    }
}

#Set Parameters
$SiteURL="https://Crescent.sharepoint.com"
$CSVPath = "C:\Temp\WorkflowInventory.csv"

#Remove the CSV file if exists
If(Test-Path $CSVPath) { Remove-Item $CSVPath}

#Get Credentials to connect
$Cred= Get-Credential

#Call the function to get workflow inventory
Get-SPOWorkflowInventory $SiteURL $CSVPath

获取 SharePoint Online 列表上所有正在运行的工作流实例

要获取所有正在运行的实例的列表,我们必须迭代列表中的每个项目并获取工作流状态:


#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
Add-Type -Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\ISAPI\Microsoft.SharePoint.Client.WorkflowServices.dll"

#Set Parameters
$SiteURL="https://Crescent.sharepoint.com/sites/Retail"
$ListName ="Project Tasks"

#Get Credentials to connect
$Cred= Get-Credential

Try{
    #Setup the context
    $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
    $Ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
    
    #Get the Web, List and List Item Objects
    $Web = $Ctx.Web
    $Ctx.Load($Web)
    $List = $Web.Lists.GetByTitle($ListName)
    $Ctx.Load($List)
    $Ctx.ExecuteQuery()

    #Initialize Workflow Manager and other related objects
    $WorkflowServicesManager = New-Object Microsoft.SharePoint.Client.WorkflowServices.WorkflowServicesManager($Ctx, $Web)
    $WorkflowSubscriptionService = $workflowServicesManager.GetWorkflowSubscriptionService()
    $WorkflowInstanceService = $WorkflowServicesManager.GetWorkflowInstanceService() 
    $WorkflowAssociations = $WorkflowSubscriptionService.EnumerateSubscriptionsByList($List.Id)
    $Ctx.Load($WorkflowAssociations)
    $Ctx.ExecuteQuery()
    
    #Define Query to get List Items in batch
    $Query = New-Object Microsoft.SharePoint.Client.CamlQuery
    $Query.ViewXml = "<View Scope='RecursiveAll'><RowLimit>2000</RowLimit></View>"
  
    #Batch process list items - to mitigate list threshold issue on larger lists
    Do {  
        #Get items from the list in batches
        $ListItems = $List.GetItems($Query)
        $Ctx.Load($ListItems)
        $Ctx.ExecuteQuery()            
        $Query.ListItemCollectionPosition = $ListItems.ListItemCollectionPosition

        #Loop through each List Item
        ForEach($ListItem in $ListItems)
        {
            #Get Workflow Instances of the List Item            
            $WorkflowInstanceCollection = $WorkflowInstanceService.EnumerateInstancesForListItem($List.Id, $ListItem.Id) 
            $Ctx.Load($WorkflowInstanceCollection)
            $Ctx.ExecuteQuery()
        
            #Get all Workflow Instances in progress
            ForEach ($WorkflowInstance in $WorkflowInstanceCollection | Where {$_.Status -eq "Started"}) 
            { 
                [PSCustomObject] @{
                                    ItemID              = $ListItem.ID
                                    Status              = $WorkflowInstance.Status
                                    WorkflowStarted     = $WorkflowInstance.InstanceCreated
                                    WorkflowAssociation = $WorkflowAssociations | where {$_.ID -eq $WorkflowInstance.WorkflowSubscriptionId} | Select -ExpandProperty Name
                                    ItemUrl = "$($Web.Context.Web.Url)/$($workflowInstance.Properties["Microsoft.SharePoint.ActivationProperties.CurrentItemUrl"])"
                                    StartedBy = $workflowInstance.Properties["Microsoft.SharePoint.ActivationProperties.InitiatorUserId"]
                }
            }
        }
    }While($Query.ListItemCollectionPosition -ne $null)
}
Catch {
Write-host -f Red "Error:" $_.Exception.Message
}

总之,使用 PowerShell 创建 SharePoint Online 中所有工作流的清单可以帮助您更有效地管理工作流。通过遵循本文中的脚本,您可以快速创建 SharePoint Online 网站中所有工作流的完整列表。通过利用 PowerShell 的自动化功能,您可以节省管理 SharePoint Online 工作流的时间和精力,并确保您的业务流程保持高效和有效。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯