Когда вы работаете со списками SharePoint в PowerShell через представления, вы приобретаете ряд преимуществ. Например, вы потом сможете изменить параметры фильтрации для представления прямо через веб-интерфейс, не прибегая к изменению скрипта. Тут есть одна интересная особенность: можно напороться на ограничение в 30 элементов при работе с представлением.
На тестовом сервере, когда вы отлаживаете скрипт, у вас может быть не очень много записей в списке, менее 30, и вы можете не заметить подвоха. Но на боевом SharePoint количество записей постоянно растет и ваш скрипт, если он написан не очень правильно, упрется в потолок 30 элементов.
Рассмотрим код для примера. Вот так можно получать элементы списка через представление:
$web = Get-SPWeb $siteUrl $list = $web.Lists[$listName] $view = $list.Views[$allItems] $viewItems = $list.GetItems($view) $cnt = 0 # Пробегаемся по элементам foreach($viewItem in $viewItems) { $cnt++ $itemID = $viewItem["ID"] Write-Host $cnt $itemID }
Код простой, демонстрационный. И демонстрирует он то, что будут взяты только те элементы, которые выводятся для представления в веб-интерфейсе на первом экране. Чаще всего пейджинг настроен на 30 элементов на странице, вот и будет выведено только первые 30 элементов.
Но работать-то надо со всеми элементами представления, а не с первыми тридцатью. Как быть? Использовать следующую конструкцию:
$web = Get-SPWeb $siteUrl $list = $web.Lists[$listName] $spQuery = New-Object Microsoft.SharePoint.SPQuery $spQuery.Query = $list.Views[$allItems].Query $viewItems = $list.GetItems($spQuery) $cnt = 0 # Пробегаемся по элементам foreach($viewItem in $viewItems) { $cnt++ $itemID = $viewItem["ID"] Write-Host $cnt $itemID }
Видите разницу? Точно также обращаемся к представлению, только через SPQuery. Во втором примере будут выведены все элементы представления, в первом примере - только 30 (сколько настроено для представления).
Мораль такова: надо быть внимательным, ведь SharePoint — очень коварная штука. Казалось бы, думаешь что будет работать одним образом, а работает совершенно другим. Поэтому на тестовом сервере лучше всегда проверять скрипты с большим количеством данных.