I wanted to get a list’s contents in a SharePoint 2007 site via PowerShell. I ran into only one issue – how to handle the pagination. When creating the Xml to include the next page, I was running into formatting issues because the text contained a “=”. This link suggested that I create the XML element first then add the innerText after. Worked after that!
TheBelow is my script to get the contents of a SharePoint 2007 list.
$listName = "List Name"
$xmlDoc = new-object System.Xml.XmlDocument
$query = $xmlDoc.CreateElement("Query")
$viewFields = $xmlDoc.CreateElement("ViewFields")
$queryOptions = $xmlDoc.CreateElement("QueryOptions")
$rowLimit = "50"
$service = New-WebServiceProxy -UseDefaultCredential -uri http://sharepoint2007.comapny.com/_vti_bin/lists.asmx?WSDL
$nextPage=$true
while($nextPage){
$list = $service.GetListItems($listName, "", $query, $viewFields, $rowLimit, $queryOptions, "")
$list.data.row | select ows_ID,ows_Created,ows_Title
if ($list.data.ListItemCollectionPositionNext){
$nextPage=@"
<Paging ListItemCollectionPositionNext="" />
"@
$queryOptions.set_InnerXml($nextPage)
$queryOptions.ChildNodes[0].Attributes["ListItemCollectionPositionNext"].InnerText = "$($list.data.ListItemCollectionPositionNext)"
}
else {
write-host "done"
$nextPage=$false
}
}
Hi, I was looking to use PS to extract data from a SharePoint 2007 list, and this has gotten me fairly close, however, I get the following message, looping after what I assume is the first page of data. I don’t think the pagination is working:-
Unable to index into an object of type System.Xml.XmlChildNodes.
At C:\ReadFromSPListViaSOAP.ps1:17 char:26
+ $queryOptions.ChildNodes[ <<<< 0].Attributes["ListItemCollectionPositionNext"].InnerText = "$($li
st.data.ListItemCollectionPositionNext)"
+ CategoryInfo : InvalidOperation: (0:Int32) [], RuntimeException
+ FullyQualifiedErrorId : CannotIndex
Can you point me in the right direction with a fix? I've only started manipulation of XML with PS recently Thanks! Ben
I will have to take a look. I haven’t used that code all that much, I have been working more with 2010 and REST.
Hi Jeff, thanks. I’ve gotten it working by just ignoring pagination and setting $rowLimit to a number greater than the number of expected records, but I’d still like to get my head around how it would work (this particular script is about 55% practical application 45% learning!).
Now that you mention it, that is what I did. I just just put the row limit more that my list had.