none
скрипт по вложениям в список RRS feed

  • Вопрос

  • Господа , Добрый день.  прошу помочь в написании скрипта.

     Есть список. List1 В нем два поля типа строка. ID и link . Link имеет ссылку на файл типа \\server\folder\1.pdf и др Нужно из этой папки положить все файлы в каждый элемент списка. Путь можно сделать типа c:\...  без разницы.

    К примеру элементов всего 100.

    Большое спасибо.


    http://sharepoint3000.blogspot.ru/ Мой блог, не судите строго- только начинаю.

    24 ноября 2012 г. 11:39

Ответы

  • 1. что означает эта строка - foreach($link in$item["link"].split(";"))

    2. Я получаю ошибку, хотя все работает.

    Не удается найти перегрузку для "Update" и количества аргументов: "1".
    строка:5 знак:14
    +  $item.Update <<<< (1)
        + CategoryInfo          : NotSpecified: (:) [], MethodException
        + FullyQualifiedErrorId : MethodCountCouldNotFindBest

    1. in$item["link"].split(";") - создает массив из исходной строки разбивая по ";". Например из строки "1;2;3" будет получен массив ["1","2","3"]

    foreach ($link in "массив") - для каждого элемента в массиве. Это на тот случай если в поле link будет несколько ссылок (\\server\share\1.txt;\\server\share\2.txt) в таком случае будет добавлено 2 вложения.

    2. $item.Update() - можно убрать. Он у вас есть в самой функции...

    3. Надо написать еще скрипт который будет телепортировать пиво на расстояние 4111км. :)

    p.s.: Достаточно пометить ответ.

    • Помечено в качестве ответа Andrey Osinniy 28 ноября 2012 г. 12:34
    28 ноября 2012 г. 6:51

Все ответы

  • Вот мои жалкие попытки:

    System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
    function AddAttachment($item, $filePath)
    {
    $bytes = [System.IO.File]::ReadAllBytes($filePath)
    $item.Attachments.Add([System.IO.Path]::GetFileName($filePath), $bytes)
    $item.Update()
    }
    $site = [Microsoft.SharePoint.SPSite]("http://sp5")
    $web = $site.OpenWeb()
    $list = $web.Lists["list1"]
    $item = $list.GetItemById(1)
    AddAttachment $item "c:\documents\1.txt"
    этот скрипт добовляет вложения.

    Есть три проблемы.
    Первая я не смог заставить Sharepoint считывать данные со столбцов имеющие русские названия к примеру ИД. Мне придётся писать цикл по  другому полю , не по ИД. Я ввел поле Number. Оно дублирует ИД. Пока пытаюсь запустить добавить вложение только в один элемент.
    System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
    function AddAttachment($item, $filePath)
    {
    $bytes = [System.IO.File]::ReadAllBytes($filePath)
    $item.Attachments.Add([System.IO.Path]::GetFileName($filePath), $bytes)
    $item.Update()
    }
    $site = [Microsoft.SharePoint.SPSite]("http://sp5")
    $web = $site.OpenWeb()
    $list = $web.Lists["list1"]
    Foreach($item in $items)
    {
    if($item["number"] -eq "2")
    {
    AddAttachment $item “c:\documents\2.txt”
    }
    }
    Вторая проблема, не пойму как изменить AddAttachment $item “c:\documents\2.txt” , так что бы путь брался из свойства link данного элемента. Пытался ввести переменную, но в powershell подставляется название переменной а не ее содержимое.
    Ну и третья, в самом конце нужно будет запустить цикл.
    Кто-нибудь может помочь?


    http://sharepoint3000.blogspot.ru/ Мой блог, не судите строго- только начинаю.




    24 ноября 2012 г. 19:22

  • Есть три проблемы.
    Первая я не смог заставить Sharepoint считывать данные со столбцов имеющие русские названия к примеру ИД.

    Узнать внутренние имя поля можно просто. Идем в параметры списка. Щелкаем по имени поля. И смотри в адресную строку:

    http://МегаПортал/_layouts/FldEdit.aspx?List={F6245449-E317-4EF7-874D-C3DFC8613AF8}&Field=_x0424__x0430__x043c__x0438__x04

    _x0424__x0430__x043c__x0438__x04 - это внутренние имя поля. Поля написанные по русски всегда конвертируются во что-то такое.

    Список один? Как я понял:

    есть элемент списка:

    id=3

    link="\\server\file1.txt;\\server\file2.txt"

    attachment=null

    надо:

    id=3

    link="\\server\file1.txt;\\server\file2.txt"

    attachment=file1.txt;file2.txt

    Правильно?



    26 ноября 2012 г. 6:18
  • Алексей, спасибо.
    Опыт с powershell не большой. по форумам ищу подобные и пытаюсь видоизменить под мою задачу. Наткнулся на то, что с русскими названиями, не запускаются скрипты вообще, хотя внутренние поля у меня названы по английски, а отображения на русском.
    Но не это главная проблема вернее это вообще не проблема. Второй и третий вопрос более функциональны и более необходимы.
    Спасибо.

    Спасибо.


    http://sharepoint3000.blogspot.ru/ Мой блог, не судите строго- только начинаю.


    27 ноября 2012 г. 7:18
  • Не совсем понятна задача. Уточните задачу.
    27 ноября 2012 г. 7:31
  • Вот скрипт который перебирает элементы списка и выводит поле Title. Точно так же можно вывести иное поле.

    Param(
    [parameter(Mandatory=$true)] [string] $curWebUrl,
    [parameter(Mandatory=$true)] [string] $listName
    )
    $web=Get-SPWeb $curWebUrl
    $list=$web.Lists[$listName]
    foreach ($item in $list.Items)
    {
    Write-Host -f Green $item["Title"]
    }
    $web.Dispose()

    Немного модифицируем используя вашу функцию

    Param(
    [parameter(Mandatory=$true)] [string] $curWebUrl,
    [parameter(Mandatory=$true)] [string] $listName
    )
    $web=Get-SPWeb $curWebUrl
    $list=$web.Lists[$listName]
    foreach ($item in $list.Items)
    {
    //Разделяем ссылки по символу ;
    foreach($link in $item["link"].split(";"))
    {
    AddAttachment $item $link
    Write-Host -f Green $link
    }
    }
    $web.Dispose()
    



    27 ноября 2012 г. 7:39
  • Спасибо большое. Сегодня попробую вечером.


    http://sharepoint3000.blogspot.ru/ Мой блог, не судите строго- только начинаю.

    27 ноября 2012 г. 8:08
  • круто, работает.

    Можно еще 3 вопросика?

    1. что означает эта строка - foreach($link in$item["link"].split(";"))

    2. Я получаю ошибку, хотя все работает.

    Не удается найти перегрузку для "Update" и количества аргументов: "1".
    строка:5 знак:14
    +  $item.Update <<<< (1)
        + CategoryInfo          : NotSpecified: (:) [], MethodException
        + FullyQualifiedErrorId : MethodCountCouldNotFindBest

    c:\install\1.txt
    Не удается найти перегрузку для "Update" и количества аргументов: "1".
    строка:5 знак:14
    +  $item.Update <<<< (1)
        + CategoryInfo          : NotSpecified: (:) [], MethodException
        + FullyQualifiedErrorId : MethodCountCouldNotFindBest

    c:\install\2.txt

    3. как мне пиво передать?

    Param(
    [parameter(Mandatory=$true)] [string] $curWebUrl,
    [parameter(Mandatory=$true)] [string] $listName
    )
    $web=Get-SPWeb -site  "мой сайт"
    $list=$web.Lists["мой список"]
    foreach ($item in $list.Items)
    {

    foreach($link in $item["link"].split(";"))
    {
    AddAttachment $item $link
    Write-Host -f Green $link
    }
    $item.Update()
    }
    $web.Dispose()


    http://sharepoint3000.blogspot.ru/ Мой блог, не судите строго- только начинаю.


    27 ноября 2012 г. 20:28
  • Калининград это очень далеко :)))

    Огромнейшее спасибо. я все пытался через запросы в accese решить задачу


    http://sharepoint3000.blogspot.ru/ Мой блог, не судите строго- только начинаю.

    27 ноября 2012 г. 20:30
  • 1. что означает эта строка - foreach($link in$item["link"].split(";"))

    2. Я получаю ошибку, хотя все работает.

    Не удается найти перегрузку для "Update" и количества аргументов: "1".
    строка:5 знак:14
    +  $item.Update <<<< (1)
        + CategoryInfo          : NotSpecified: (:) [], MethodException
        + FullyQualifiedErrorId : MethodCountCouldNotFindBest

    1. in$item["link"].split(";") - создает массив из исходной строки разбивая по ";". Например из строки "1;2;3" будет получен массив ["1","2","3"]

    foreach ($link in "массив") - для каждого элемента в массиве. Это на тот случай если в поле link будет несколько ссылок (\\server\share\1.txt;\\server\share\2.txt) в таком случае будет добавлено 2 вложения.

    2. $item.Update() - можно убрать. Он у вас есть в самой функции...

    3. Надо написать еще скрипт который будет телепортировать пиво на расстояние 4111км. :)

    p.s.: Достаточно пометить ответ.

    • Помечено в качестве ответа Andrey Osinniy 28 ноября 2012 г. 12:34
    28 ноября 2012 г. 6:51