none
Удаление элементов списка powershell RRS feed

  • Вопрос

  • Коллеги, доброго дня! Подскажите, пожалуйста, что в моем скрипте не так?

    Мне необходимо удалить элементы из списка ImportJournal, у которых столбец NdIdClient = 2AL-152D400

    if ((Get-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue) -eq $null) {
        Add-PSSnapin "Microsoft.SharePoint.PowerShell"
    }
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Sharepoint")
    cls
    $web = Get-SPWeb "http://ru1"
    $list = $web.GetList("http://ru1/Lists/ImportJournal")
    $caml = '<where><lt><fieldref name="NdIdClient"><value="2AL-152D400"></value></fieldref></lt></where>'
    $query = new-object Microsoft.SharePoint.SPQuery
    $query.Query = $caml
    $deleteItems = $list.GetItems($query)
    $deleteItems.Count
    $deleteItems | % { $list.GetItemById($_.Id).Delete() }
    $web.Dispose()

     

Ответы

  • Посмотрите имена полей. Я не вижу Ваши имена отсюда - может, столбец иначе называется?

    Как вариант "упрощенный" - сделайте представление, где будут отображены нужные записи (фильтром), запишите их количество (чтобы не удалять/восстанавливать каждый раз). Далее откройте представление в SharePoint Designer - внутри будет CAML, возьмите из него часть <Where>...</Where> - вставьте в свой код, закомментируйте удаление, после чего строка $deleteItems.Count должна выдавать правильное количество элементов и вы можете безопасно раскомментировать удаление.

    • Помечено в качестве ответа Valdemar.Miller 12 мая 2014 г. 9:23
  • На мой взгляд, неправильный CAML.

    Вот так попробуйте:

    $caml = '<Where><Eq><FieldRef name="NdIdClient" /><Value Type="Text">2AL-152D400</Value></Eq></Where>'
    P.S. Регистр важен

Все ответы

  • На мой взгляд, неправильный CAML.

    Вот так попробуйте:

    $caml = '<Where><Eq><FieldRef name="NdIdClient" /><Value Type="Text">2AL-152D400</Value></Eq></Where>'
    P.S. Регистр важен

  • На мой взгляд, неправильный CAML.

    Вот так попробуйте:

    $caml = '<Where><Eq><FieldRef name="NdIdClient" /><Value Type="Text">2AL-152D400</Value></Eq></Where>'
    P.S. Регистр важен

    С таким CAML у меня удаляет все записи, а не конкретно те, что указаны в запросе.

    Может ошибка в этой строке $deleteItems | % { $list.GetItemById($_.Id).Delete() }, но что неправильно не пойму.

     

  • Посмотрите имена полей. Я не вижу Ваши имена отсюда - может, столбец иначе называется?

    Как вариант "упрощенный" - сделайте представление, где будут отображены нужные записи (фильтром), запишите их количество (чтобы не удалять/восстанавливать каждый раз). Далее откройте представление в SharePoint Designer - внутри будет CAML, возьмите из него часть <Where>...</Where> - вставьте в свой код, закомментируйте удаление, после чего строка $deleteItems.Count должна выдавать правильное количество элементов и вы можете безопасно раскомментировать удаление.

    • Помечено в качестве ответа Valdemar.Miller 12 мая 2014 г. 9:23
  • При составлении CAML запроса в помощь воспользуйтесь U2U Caml Query Builder

    Скачайте утилиту и в реальном режиме времени составьте правильный CAML запрос. Затем скопируйте его себе в код.

  • Спасибо! Помогло.

  • Для меня очень полезна будет данная утилита, спасибо, Вам.