2013-02-16 2 views
3

Я хотел бы использовать PowerShell, чтобы открыть XML-документ, хранящийся в библиотеке документов в Sharepoint 2010, прочитать его в памяти, изменить один из узлов и затем сохранить измененный XML-файл назад, переписывая исходный документ. Я бы предпочел не писать локальные файлы; Я действительно не думаю, что это необходимо.Использование powershell для чтения/изменения/перезаписи sharepoint xml document

Вот сценарий, как я сейчас:

param 
(
    $siteCollection = $(read-host -prompt "Site Collection"), 
    $subSite = "StoreOps", 
    $libraryName = "Data Connections", 
    $UDCXName = $(read-host -prompt "UDCX document name"), 
    $listName = $(read-host -prompt "List name") 
) 

$site = get-spsite $siteCollection 
$web = $site.openweb($subSite) 
$library = $web.Folders[$libraryName] 
$document = $library.Files[$UDCXName] 

# Load the contents of the document. 

$data = $document.OpenBinary() 
$encode = New-Object System.Text.ASCIIEncoding 
$UDCX = [xml]($encode.GetString($data)) 
$ns = New-Object Xml.XmlNamespaceManager $UDCX.NameTable 
$ns.AddNamespace("udc", "http://schemas.microsoft.com/office/infopath/2006/udc") 
$root = $UDCX.DataSource 
$node = $root.SelectSingleNode("udc:ConnectionInfo/udc:SelectCommand/udc:ListId", $ns) 
$oldListId = $node."#text" 

# Get the ListId of the current list. 

$list = $web.Lists[$listName] 
$newListId = "{$($list.ID)}" 
write-host "List: $listName, Old ListId: $oldListId, New ListId: $newListId" 
$node."#text" = $newListId 

(Для тех из вас, кто заинтересован, этот сценарий будет изменять файлы соединений данных, используемых InfoPath форм).

Весь этот скрипт работает правильно, но как теперь я могу переписать XML обратно в Sharepoint? Я пробовал:

$document.SaveBinary($UDCX.xml) 

Но это не работает. Я немного смущен тем, как получить объект $ UDCX xml для создания текстового представления содержащегося в нем xml. Если бы я знал, как это сделать, тогда я мог бы решить эту проблему.

+0

Похоже, что это поможет - http://stackoverflow.com/questions/13401722/open-xml-from-sharepoint-document-library-in-poweshell –

ответ

2

$Document был открыт с использованием метода OpenBinary(), поэтому, чтобы сэкономить прямо на нем, нам нужно будет использовать метод SaveBinary(). Объект XMLDocument, $UDCX, может быть сохранен в объект MemoryStream, который затем используется для сохранения обратно обратно в Sharepoint. Код, который вам нужен на конце, следующий:

$Stream = New-Object System.IO.MemoryStream 
$UDCX.Save($Stream) 
$document.SaveBinary($Stream.ToArray()) 

Я надеюсь, что это поможет.

+0

Спасибо, это работает. –

+0

Добро пожаловать. –

Смежные вопросы