如何使用Powershell在Sitecore中获取创建日期

时间:2019-07-04 09:21:51

标签: powershell sitecore

我编写了一个脚本,目的是将许多Sitecore项目的发布日期"$date"替换为其创建日期(created)。

我在从Sitecore获取此字段时遇到问题。

我尝试过:

$rootItem = Get-Item master:/content
$sourceTemplate = Get-Item "/sitecore/content/.../item 1"
foreach($field in $sourceTemplate.Fields) {
    if (($field -ne $null) -And ($field -like '$date')) {
        $sourceTemplate.Editing.BeginEdit()
        $CreatedDate = .......
        $field.Value = [sitecore.dateutil]::ToIsoDate($CreatedDate)
        $sourceTemplate.Editing.EndEdit()
    }
}

我也尝试通过ID来获取此字段,但是它不起作用。

请问有人有主意吗? 谢谢

1 个答案:

答案 0 :(得分:0)

如果要检查Sitecore内置字段,则需要先致电$sourceTemplate.Fields.ReadAll();

您应该将字段的值与$date字符串进行比较,而不是与字段本身进行比较。

然后只获取存储在__Created字段中的字符串,而不是获取日期,然后将其格式化回ISO日期字符串。

最后一件事-不要为同一项目调用Editing.BeginEdit()Editing.EndEdit()多个时间-Sitecore在被调用时会执行一些繁重的操作,因此请确保每个项目仅调用一次需要它。

$sourceTemplate = Get-Item "/sitecore/content/home/test"
$sourceTemplate.Fields.ReadAll();
$editing = $false
foreach($field in $sourceTemplate.Fields) {
    if ($field.Value -eq '$date') {
        if (!$editing) {
            $editing = $true
            $sourceTemplate.Editing.BeginEdit();
        }
        $field.Value = $sourceTemplate.Fields["__Created"].Value
    }
}

if ($editing) {
    $edited = $sourceTemplate.Editing.EndEdit();
}