2013-02-16 2 views
3

PowerShell을 사용하여 Sharepoint 2010의 문서 라이브러리에 저장된 XML 문서를 열고 메모리로 읽어서 노드 중 하나를 수정 한 다음 수정 된 XML을 저장하고 싶습니다. 원래 문서를 덮어 씁니다. 차라리 로컬 파일을 쓰지 않을 것입니다. 나는 이것이 필요하다고 정말로 생각하지 않는다. 여기 powershell을 사용하여 sharepoint XML 문서 읽기/수정/다시 쓰기

내가 지금 가지고있는 스크립트입니다 :

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

$DocumentOpenBinary() 방법을 사용하여 열었으므로 곧 다시 저장하려면 SaveBinary() 방법을 사용해야합니다. XMLDocument 개체 $UDCXMemoryStream 개체에 저장 될 수 있으며이 개체는 Sharepoint로 바로 저장됩니다. 끝에 필요한 코드는 다음과 같습니다.

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

나는 희망이 있습니다.

+0

감사합니다. –

+0

반갑습니다. –

관련 문제