Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Чтение информации из файла и передача ее на портал SharePoint (http://forum.oszone.net/showthread.php?t=264936)

iMakS27 25-07-2013 10:24 2190302

Чтение информации из файла и передача ее на портал SharePoint
 
Добрый день!
Возникла потребность в считывании информации с файла, txt или csv, в которых находится 4 значения: время, и 3 числа - информация с расходомеров.
Эти данные должны отправляться на портал в список, чтоб персонал мог наглядно видеть значения. При этом должна быть синхронизация значений из файла с порталом, когда в файл заносятся новые данные, на портале, допустим в 12 дня эта информация так же обновляется.
На просторах интернета был найден пример с файлом контактов:

Код:

Загрузка данных в список контактов SharePoint при помощи PowerShell

$web = Get-SPWeb http://portal

$users = Import-Csv -Delimiter "`t" -Path "c:\contacts.txt"

$list = $web.Lists["Контакты"]

#Выполните команду, которая позволит узнать имена полей в списке:

#$list.Fields | select InternalName,Title | Out-GridView

$users | where {

$item = $list.AddItem();

$item["FirstName"]=$_.Firstname;

$item["Title"]=$_.Lastname;

$item["JobTitle"]=$_.Job;

$item["Company"]=$_. Company;

$item["WorkPhone"]=$_.Phone;

$item.Update();

}

Подскажите, как оформить запрос к файлу, и при этом была синхронизация данных с SharePoint.

Iska 25-07-2013 11:02 2190322

Если б у меня был SharePoint… Но у меня и Вашего «файла, txt или csv» нет. А вот тому, у кого есть SharePoint, и кто будет писать, возможно, понадобится содержимое Вашего файла.

iMakS27 25-07-2013 13:18 2190400

Из файла берется информация с 3-х расходомеров, это просто 3 значения допустим 1111;22222;33;
Они должны быть записаны в список SharePoint и отображены там, при этом раз в день, допустим в 12 часов они опять должны быть взяты из файла и заменены в SharePoint'е

Molchune 25-07-2013 18:33 2190631

Ну раз файлики давать не хочешь то лови как есть :)
Структура CSV
читать дальше »
Код:

Столбец1;Столбец2;Столбец3
1111;22222;33
1sdf3;2232;33sdf
1131;2232;33sdf
14111;34342222;3234234


Незнаю нужно тебе или нет, но тут создание элементов из csv файла
читать дальше »
Код:

$Information  = Import-Csv "C:\1.csv" -Delimiter ';'
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$siteUrl = "http://test" # Адрес сервера Sharepoint Services
$webName = "/"  #Имя узла
$spSite = new-object Microsoft.SharePoint.SPSite($siteurl)
$spWeb = $spSite.OpenWeb($webName)
$listName = "test" #Имя списка
$spList = $spWeb.Lists[$listName]
$items=$spList.Items
ForEach  ($stroka in $Information ) {
$NewItem = $spList.Items.add()
$NewItem["Столбец1"] =  $stroka.Столбец1
$NewItem["Столбец2"] =  $stroka.Столбец2
$NewItem["Столбец3"] =  $stroka.Столбец3
$NewItem.Update()
}



а тут обновление элементов, в качестве ID принимается значения из 1 столбца
читать дальше »
Код:

$Information  = Import-Csv "C:\1.csv" -Delimiter ';'
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$siteUrl = "http://test" # Адрес сервера Sharepoint Services
$webName = "/"  #Имя узла
$spSite = new-object Microsoft.SharePoint.SPSite($siteurl)
$spWeb = $spSite.OpenWeb($webName)
$listName = "test" #Имя списка
$spList = $spWeb.Lists[$listName]
$items=$spList.Items
ForEach  ($stroka in $Information ) { 
    ForEach ($item in $items ) {
        if($stroka.Столбец1 -eq  $item["Столбец1"]){
            if($item["Столбец2"] -eq $stroka.Столбец2  ){} else {
                $item["Столбец2"]= $stroka.Столбец2
                $item.update()
                    }
            if($item["Столбец3"] -eq $stroka.Столбец3  ){} else {
              $item["Столбец3"]= $stroka.Столбец3
              $item.update()
              }       
            }
    }
}


iMakS27 26-07-2013 02:16 2190859

Попробовал сделать как вы говорите, но опять ошибки, ошибки, ошибки...

Код:

PS C:\Users\>  $Information  = Import-Csv "C:\1.csv" -Delimiter ';'
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$siteUrl = "http://doc.site.ru/production/" # Адрес сервера Sharepoint Services
$webName = "/Lists/1/Allitemsg.aspx"  #Имя узла
$spSite = new-object Microsoft.SharePoint.SPSite($siteurl)
$spWeb = $spSite.OpenWeb($webName)
$listName = "Расход ДТ" #Имя списка
$spList = $spWeb.Lists[$listName]
$items=$spList.Items
ForEach  ($stroka in $Information ) {
$NewItem = $spList.Items.add()
$NewItem["Столбец1"] =  $stroka.Столбец1
$NewItem["Столбец2"] =  $stroka.Столбец2
$NewItem["Столбец3"] =  $stroka.Столбец3
$NewItem.Update()
}

$Information  = Import-Csv "C:\1.csv" -Delimiter ';'
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$siteUrl = "http://doc.site.ru/production/" # Адрес сервера Sharepoint Services
$webName = "/Lists/1/Allitemsg.aspx"  #Имя узла
$spSite = new-object Microsoft.SharePoint.SPSite($siteurl)
$spWeb = $spSite.OpenWeb($webName)
$listName = "Расход ДТ" #Имя списка
$spList = $spWeb.Lists[$listName]
$items=$spList.Items
ForEach  ($stroka in $Information ) { 
    ForEach ($item in $items ) {
        if($stroka.Столбец1 -eq  $item["Столбец1"]){
            if($item["Столбец2"] -eq $stroka.Столбец2  ){} else {
                $item["Столбец2"]= $stroka.Столбец2
                $item.update()
                    }
            if($item["Столбец3"] -eq $stroka.Столбец3  ){} else {
              $item["Столбец3"]= $stroka.Столбец3
              $item.update()
              }       
            }
    }
}

New-Object : Не удается найти тип [Microsoft.SharePoint.SPSite]: убедитесь в том, что сборка, содержащая этот тип, загруж
ена.
строка:5 знак:21
+ $spSite = new-object <<<<  Microsoft.SharePoint.SPSite($siteurl)
    + CategoryInfo          : InvalidType: (:) [New-Object], PSArgumentException
    + FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand
 
Нельзя вызвать метод для выражения со значением NULL.
строка:6 знак:25
+ $spWeb = $spSite.OpenWeb <<<< ($webName)
    + CategoryInfo          : InvalidOperation: (OpenWeb:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
 
Не удается индексировать в массив NULL.
строка:8 знак:24
+ $spList = $spWeb.Lists[ <<<< $listName]
    + CategoryInfo          : InvalidOperation: (Расход ДТ:String) [], RuntimeException
    + FullyQualifiedErrorId : NullArray
 
Нельзя вызвать метод для выражения со значением NULL.
строка:11 знак:29
+ $NewItem = $spList.Items.add <<<< ()
    + CategoryInfo          : InvalidOperation: (add:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
 
Не удается индексировать в массив NULL.
строка:12 знак:10
+ $NewItem[ <<<< "Столбец1"] =  $stroka.Столбец1
    + CategoryInfo          : InvalidOperation: (Столбец1:String) [], RuntimeException
    + FullyQualifiedErrorId : NullArray
 
Не удается индексировать в массив NULL.
строка:13 знак:10
+ $NewItem[ <<<< "Столбец2"] =  $stroka.Столбец2
    + CategoryInfo          : InvalidOperation: (Столбец2:String) [], RuntimeException
    + FullyQualifiedErrorId : NullArray
 
Не удается индексировать в массив NULL.
строка:14 знак:10
+ $NewItem[ <<<< "Столбец3"] =  $stroka.Столбец3
    + CategoryInfo          : InvalidOperation: (Столбец3:String) [], RuntimeException
    + FullyQualifiedErrorId : NullArray
 
Нельзя вызвать метод для выражения со значением NULL.
строка:15 знак:16
+ $NewItem.Update <<<< ()
    + CategoryInfo          : InvalidOperation: (Update:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
 
New-Object : Не удается найти тип [Microsoft.SharePoint.SPSite]: убедитесь в том, что сборка, содержащая этот тип, загруж
ена.
строка:22 знак:21
+ $spSite = new-object <<<<  Microsoft.SharePoint.SPSite($siteurl)
    + CategoryInfo          : InvalidType: (:) [New-Object], PSArgumentException
    + FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand
 
Нельзя вызвать метод для выражения со значением NULL.
строка:23 знак:25
+ $spWeb = $spSite.OpenWeb <<<< ($webName)
    + CategoryInfo          : InvalidOperation: (OpenWeb:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
 
Не удается индексировать в массив NULL.
строка:25 знак:24
+ $spList = $spWeb.Lists[ <<<< $listName]
    + CategoryInfo          : InvalidOperation: (Расход ДТ:String) [], RuntimeException
    + FullyQualifiedErrorId : NullArray
 
Не удается индексировать в массив NULL.
строка:29 знак:41
+          if($stroka.Столбец1 -eq  $item[ <<<< "Столбец1"]){
    + CategoryInfo          : InvalidOperation: (Столбец1:String) [], RuntimeException
    + FullyQualifiedErrorId : NullArray

Мне сказали, что надо скачать дополнение под названием PSRemoting, но найти в свободном доступе не получилось...
+ я так понимаю если в файле .csv находится всего 3 значения: 111;2222;3201 то их так и оставлять как строка1, строка2 или присвоить другое значение?
Туго у меня пока с пониманием работы PowerShell
Так же вопрос про
Код:

$siteUrl = "http://doc.site.ru/production/" # Адрес сервера Sharepoint Services
$webName = "/Lists/1/Allitemsg.aspx"  #Имя узла

Адрес сервера и имя узла - что и куда вписывать, если допустим адрес самого портала http://doc.site.ru
Раздел где будет находится информация http://doc.site.ru/production/
А сам список, куда будет закачиваться информация находится по адресу http://doc.site.ru/production/Lists/1/Allitemsg.aspx

Molchune 26-07-2013 09:29 2190948

С этого и надо было начинать.
Цитата:

Цитата iMakS27
Адрес сервера и имя узла - что и куда вписывать, если допустим адрес самого портала http://doc.site.ru
Раздел где будет находится информация http://doc.site.ru/production/
А сам список, куда будет закачиваться информация находится по адресу http://doc.site.ru/production/Lists/1/Allitemsg.aspx »

По поводу
Цитата:

Цитата iMakS27
Мне сказали, что надо скачать дополнение под названием PSRemoting »

ничего не надо, надо скрипт запускать на сервере Powershell.

Цитата:

Цитата iMakS27
я так понимаю если в файле .csv находится всего 3 значения: 111;2222;3201 то их так и оставлять как строка1, строка2 или присвоить другое значение? »

На это ответ был в предыдущем посте...
Цитата:

Цитата Iska
Если б у меня был SharePoint… Но у меня и Вашего «файла, txt или csv» нет. А вот тому, у кого есть SharePoint, и кто будет писать, возможно, понадобится содержимое Вашего файла. »

Адрес сервера Sharepoint Services - dns имя сайта, у тебя http://doc.site.ru
Имя узла - если у тебя ферма и там несколько сайтов то это будет имя этого сайта, вполне вероятно что это будет "production", но я незнаю твою структуру мб там будет пусто как и у меня. (это в случае если у тебя 1 сайт)
Имя списка - Это имя которые ты указывал при создании это листа. Либо просто посмотри в свойствах списка (открывашь список, далее верху "Работа со списком"->"Параметры списка"->"Название, описание и переходы"->"Имя списка") У тебя это "1"
И получаем
Типа такого
читать дальше »

Код:

$siteUrl = "http://doc.site.ru" # Адрес сервера Sharepoint Services
$webName = "/production"  #Имя узла
$listName = "1" #Имя списка


И в принципе ты сам можешь все проверить. На серевер SP, открой Powershell ISE и запусти, что покажет?
читать дальше »

Код:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$siteUrl = "http://doc.site.ru" # Адрес сервера Sharepoint Services
$webName = "/production"  #Имя узла
$spSite = new-object Microsoft.SharePoint.SPSite($siteurl)
$spWeb = $spSite.OpenWeb($webName)
$listName = "1" #Имя списка
$spList = $spWeb.Lists[$listName]
$items=$spList.Items
$items


iMakS27 26-07-2013 10:07 2190956

Вложений: 1
Файл, информацию с которого надо заносить в список SharePoint. Я понял свою ошибку, что сразу не прикрепил его.
Как изменится запрос, если файл будет иметь такой вид?
Файл 102098

Сейчас нет возможности проверить что Вы, Molchune, мне написали, но заранее говорю спасибо, думаю что в этот раз все получится)
В понедельник отпишусь как все прошло.

Цитата:

Имя списка - Это имя которые ты указывал при создании это листа. Либо просто посмотри в свойствах списка (открывашь список, далее верху "Работа со списком"->"Параметры списка"->"Название, описание и переходы"->"Имя списка") У тебя это "1"
Если так открыть, то я вижу такую информацию, название списка "Расход ДТ"
Имя: Расход ДТ
Но его веб адрес
Веб-адрес: http://doc.site.ru/production/Lists/1/Allitemsg.aspx
Это получается, что SharePoint сам присвоил ему имя "1"? И его и надо использовать?
Просто если нажать на СПИСКИ справа, это там, где располагаются все созданные списки, будет вообще вот такой адрес http://doc.site.ru/production/_layou...spx?BaseType=0

Molchune 26-07-2013 11:25 2190981

Имя списка задается при создании списка, если в последствии оно не менялось, то оно совпадает с тем что я написал(DisplayName=Name)., Если менялось то изначальное имя остается как и было при создании, а то что в свойствах это уже DisplayName.
Также если тебе нужно именно синхронизация, то в этом файле не хватает ID. Так как без него ничего не получится. Либо раз в день удалять все значения в листе и заново заполнять из файла.
Цитата:

Цитата iMakS27
Как изменится запрос, если файл будет иметь такой вид? »

$item["Столбец2"] = $item считай что это элемент в листе, а ["Столбец2"] - это название свойства(имя столбца, в таблице)
$stroka.Столбец3 = $stroka - это твоя строка в файле, Столбец3 - это имя твоего столбца (у тебя, это одно из значений в первой строке "дата", "расходомер 1", "расходомер 2", "расходомер 3")

Еще раз повторюсь у тебя нет ID в файлике. Без него обновление будет.. но зачастую не того чего будешь ожидать.
И в принципе наверное уже проще в личку переписываться.


Время: 13:43.

Время: 13:43.
© OSzone.net 2001-