4

PowerShellを使用してSharepoint2010のドキュメントライブラリに保存されているXMLドキュメントを開き、メモリに読み込み、ノードの1つを変更してから、変更した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のテキスト表現を生成する方法に少し混乱しています。私がそれを行う方法を知っていれば、私はこの問題を解決することができます。

4

1 に答える 1

2

$Documentメソッドを使用して開かれたのでOpenBinary()、直接保存するには、SaveBinary()メソッドを使用する必要があります。XMLDocumentオブジェクトは$UDCX、オブジェクトに保存できます。このオブジェクトはMemoryStream、Sharepointに直接保存するために使用されます。最後に必要なコードは次のとおりです。

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

それがお役に立てば幸いです。

于 2013-02-16T08:58:47.793 に答える