Фильтр списка SharePoint PowerShell - PullRequest
0 голосов
/ 16 января 2020

в надежде, что кто-нибудь сможет руководствоваться указанным ниже кодом:

*$CreatedDate = (Get-Date $CreatedDateTime)
$AddedDateTime = (Get-Date $CreatedDate.AddMinutes(190))
Write-Host "CD:" $CreatedDate
Write-Host "AD:" $AddedDateTime
$ItemsColl = $ReviewList.Items | where {($_['Created'] -ge $CreatedDate) -and ($_['Created'] -le $AddedDateTime)}*

предполагается, что все возвращается в пределах диапазона дат, я передаю созданную дату, добавляю 190 минут к этой дате, и возврат должен быть все из списка задач рабочего процесса, который был создан как задача.

это действительно приносит некоторые, но пропускает большинство пунктов в списке, я надеялся на мнение, чтобы увидеть, есть ли какие-либо очевидные ошибки или, возможно, новый способ сделать это.

Заранее спасибо


хорошо, так вот сценарий, когда кто-то отправляет документ на утверждение, это создает новую версию документа (время Великобритании), затем создается задача по системному счету (швейцарское время + 1 час из Великобритании). У меня есть функция, которая экспортирует все метаданные для каждой версии документа в формат CSV. где я изо всех сил фильтрует список рецензентов, где хранятся все задачи для каждого рецензента.

У меня есть две функции в моем скрипте GetMetadata и GetReviews.

Получить метаданные получает все метаданные для каждой версии документа, где состояние изменяется для просмотра в процессе выполнения, что говорит о том, что документ отправлен на рецензирование, поэтому мы должны просмотреть список рецензий, чтобы найти этот элемент и Посмотрите, кто был рецензированием и каков был результат, однако документ мог быть рецензирован несколько раз, и поэтому мне нужно передать имя документа и дату и время создания, чтобы отфильтровать список, но дата и время создания в рецензии - 1 час. так что впереди. Скрипт:

# ******* Variables Section ******************
#Define these variables
$WebURL="http://site"
$ModuleList = "Library With Versions"
$ReportFile = "D:\Migration\Test\CSV\ItemsForum.csv"
$ReviewList = "Review Tasks"

    # *********************************************
    #delete file if exists
    If (Test-Path $ReportFile)
    {
        Remove-Item $ReportFile
    }

    #Get the Web and List
    $Web = Get-SPWeb $WebURL
    $ReviewList = $web.Lists.TryGetList($ReviewList)
    #Get reviewers from review list
    function GetReviews($DocumentName, $CreatedDateTime)
    {
        $CreatedDate = Get-Date $CreatedDateTime
        #add 80 minutes, this would be plus one hr to swiss time plus account for time it takes to create item
        $AddedCreatedList = Get-Date $CreatedDate.AddMinutes(80)

        #filter and get items where document name matches workflow related item (this works but it's missing a lot of items as er image)
        $ItemsColl = $ReviewList.Items | where {$_['WorkflowLink'] -match $DocumentName -and $_['Created'] -ge $CreatedDate -and $_['Created'] -le $AddedCreatedList}
        #$ItemsColl = $ReviewList.Items
        Write-Host "Item Count: " $ItemsColl.Count
        $itemIds = ""
        if($ItemsColl.Count -gt 0)
        {
            foreach ($item in $ItemsColl)
            {
                Write-Host $relatedItemUrl
                #$relatedItem = $relatedItemUrl -split ','
                #$rit = $relatedItem[1].Trim()
                $itemIds += $item.id
                $itemIds += ";"
            }

            Write-Host $itemIds
            $itemIds = $itemIds.TrimEnd(";")
        }
        return $itemIds
    }

        function GetMetadata{
        $List = $web.Lists.TryGetList($ModuleList)
        #Check if list exists
        if($List -ne $null)
        {
            #Get all list items
            $ItemsColl = $List.Items | where {$_['Module'] -match $ModuleName}
                #add headings
            Add-Content -Path $ReportFile -Value "Item ID, Status, File Name + Version, Created, Review ID"

                #Loop through each item
                foreach ($item in $ItemsColl)
                {
                    if ($item['Module'])
                    {
                        #Write-Host  $item['Module'] 
                        ForEach($version in $item.Versions)
                        {

                            #Add version label to file in format: [Filename]_v[version#].[extension]
                            $filesplit = $version['Name'].split(".")
                            $fullname = $filesplit[0]
                            $fileext = $filesplit[1]
                            #$FullFileName = $fullname+"_v"+$version.VersionLabel+"."+$fileext   
                            $FullFileName ="V_"+$version.VersionLabel+" " + $version['Name']


                            #Get Modified By
                            $user = $version["Editor"]
                            $userObj = New-Object Microsoft.SharePoint.SPFieldUserValue($web, $user)
                            $modifiedBy = $userObj.User.DisplayName

                            #get and format modified date 
                            $ModifiedDate = ($version['Modified'] -as [datetime]).DateTime
                            $ModifiedDateF = Get-Date $ModifiedDate -format "yyyy-MM-ddTHH:mm:ss.fffZ"
                            #Write-Host $ModifiedDateF

                            #get and format created date 
                            $CreatedDate = ($version.Created -as [datetime]).DateTime
                            $CreatedDateF = Get-Date $CreatedDate -format "yyyy-MM-ddTHH:mm:ss.fffZ"

                            $ReviwerID = ""
                            #get reviewers

                            #if status matches an item get review list id
                            if($version['WFStatus'] -eq 'Review in progress'){
                                #pass document name and created 
                                $ReviwerID = GetReviews $version['Name'].TrimEnd('.docx') $version.Created

                            }
                            #add data 
                            $VersionData = "$($item.id),$($version['WFStatus']),$($FullFileName),$($CreatedDateF),$($ReviwerID)"


                            #Write to report
                            Add-Content -Path $ReportFile -Value $VersionData
                        }
                    }
                }
            }


        }

    GetMetadata

    Write-Host "Version history has been exported successfully!"

Вывод: Ouput

1 Ответ

0 голосов
/ 17 января 2020

Пример сценария тестирования SharePoint PowerShell, если проблема существует, предоставьте более подробную информацию о своем сценарии.

if ((Get-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue) -eq $null) {
    Add-PSSnapin "Microsoft.SharePoint.PowerShell"
}

$sourceWebURL = "http://sp:12001"
$sourceListName = "TestList"
$CreatedDate = Get-Date 
$AddedDateTime = Get-Date $CreatedDate.AddMinutes(190)
$spSourceWeb = Get-SPWeb $sourceWebURL
$ReviewList = $spSourceWeb.Lists[$sourceListName]
$ItemsColl = $ReviewList.Items | where {($_['Created'] -ge $CreatedDate.AddMinutes(-10)) -and ($_['Created'] -le $AddedDateTime)}
Write-Host "CD:" $CreatedDate.AddMinutes(-10)
Write-Host "AD:" $AddedDateTime
$ItemsColl | ForEach-Object {
    Write-Host $_['ID']
    Write-Host $_['Title']
}

Обновление:

Вы можете использовать редактор Power GUI для отладки вашего Сценарий, инструмент поможет вам найти большую часть проблемы c.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...