Sitecore Powershell报告不返回任何结果

时间:2019-02-11 08:51:01

标签: powershell sitecore

我创建了一个报告,如果我从Powershell ISE手动运行它,它会生成期望的项目列表,但是当我从Reporting Tools运行它时,它不会返回任何结果。

该脚本会抓取所有项目的版本和语言,大约80,000个项目,这需要一段时间。

有没有一种方法可以增加延迟,直到生成所有项目的列表,或者有其他解决方法?

源代码:

private string GetDateTimestamp()
{
    string currentDate = DateTime.Now.Date.ToString();
    string currentTime = DateTime.Now.ToLongTimeString();
    return $"{currentDate} | {currentTime} | ";
}

谢谢

LE:对象$ allitems需要一段时间才能填充,并且sitecore客户端不会等待后端读取所有项目,因此,当我生成报告时,$ global:guiltyItems始终为空。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:使用过滤器。而且它应该可以正常工作。

$RichTextContentID = "";
$internalLinkPattern = '<a href="~\/link\.aspx\?_id=(?<sitecoreid>[a-zA-Z\d]{32})&amp;_z=z">';
$literatureTemplateID = "";

$root = Get-Item -Path "master:/sitecore/content/MyWebsite";

filter Where-HasLiterature{
    param([Parameter(Mandatory=$TRUE,ValueFromPipeline=$TRUE)][Sitecore.Data.Items.Item]$item)

    if($item)
    {
        foreach ($field in $item.Fields)
        {
            if ($field.Id -eq $RichTextContentID -and ($field.Value -match $internalLinkPattern))
            {
                $allMatches = [System.Text.RegularExpressions.Regex]::Matches($field.Value,$internalLinkPattern);

                foreach ($match in $allMatches)
                    {
                        $guiltyItem = Get-Item "master:" -Id ([Sitecore.Data.ID]::Parse($match.Groups["sitecoreid"].Value)).Guid;
                        $guiltyItemTemplate = [Sitecore.Data.Managers.TemplateManager]::GetTemplate($guiltyItem);

                        if ($guiltyItem -ne $null -and $guiltyItemTemplate.DescendsFromOrEquals($literatureTemplateID) )
                        {
                            $item;
                        }
                    }   

            }

        }
    }
}

$items = Get-ChildItem -Path $root.ProviderPath -Recurse | Where-HasLiterature

if ($items.Count -eq 0) 
{
    Show-Alert "Did not find any items to match your condition.";
} 
else 
{
    $props = @{
        Title = ""
        InfoDescription = ""
        PageSize = 50
    }

    $items | Show-ListView @props -Property @{ Label="Item name"; Expression={$_.Name}; },
            @{ Label="ID"; Expression={$_.ID}; },
            @{ Label="Display name"; Expression={$_.DisplayName}; },
            @{ Label="Language"; Expression={$_.Language}; },
            @{ Label="Version"; Expression={$_.Version}; },
            @{ Label="Path"; Expression={$_.ItemPath}; },
            @{ Label="Created"; Expression={$_.__Created}; },
            @{ Label="Created by"; Expression={$_."__Created by"}; },
            @{ Label="Updated"; Expression={$_.__Updated}; },
            @{ Label="Updated by"; Expression={$_."__Updated by"}; }
}