Проблема вызвана динамической типизацией.Сценарий начинается с установки guiltyItems
на ноль, поэтому он не имеет типа.Пока ничего странного.Проблема типизации возникает в цикле foreach.
$global:guiltyItems = $null;
...
foreach ($match in $allMatches) {
...
if ($currentItem.Template.Id -eq $quiltyTemplate) {
$global:guiltyItems += $_; # Boom!
Итак, здесь происходит то, что переменная null не имеет типа.В цикле foreach обработанные переменные имеют типы, так как они не являются нулевыми.Первая итерация установит guiltyItems
для любого типа итерируемого объекта.Как и в сообщениях об ошибках, добавление двух Sitecore.Data.Items.Item
не имеет смысла.
Когда guiltyItems
объявлено как массив, добавление имеет смысл.Это не добавление двух элементов Sitecore вместе, а добавление новых элементов в коллекцию.
Если ваша коллекция содержит только один элемент, сценарий, скорее всего, будет работать без изменений.Это потому, что сложение вызывается только один раз.
В соответствии с комментарием, чтобы решить проблему, объявите $global:guiltyItems
в явном виде в виде массива, подобного этому,
$global:guiltyItems = @()