Не уверен, что это делает:
$lib = $web.Lists | where { $_.title -eq $libname }
foreach ($libr in $lib) {
$ lib в этом случае должна быть единой библиотекой, почему foreach?
Могу ли я предложить вам получить библиотеку в явном виде, а затем убедиться, что она существует:
$lib = $web.lists.TryGetList($libname)
if ($lib) {
$items = $lib.items
foreach ($item in $items) {
#Your logic here
#Do you really want to delete? Maybe use $item.Recycle()
}
}
Также, если вы знаете, что вы хотите удалить заранее, посмотрите на пакетирование, так как вы можете удалять элементы намного быстрее.