Created
June 3, 2016 18:08
-
-
Save dinnouti/257e5383ee61994cd5cf57f31d234219 to your computer and use it in GitHub Desktop.
Read items from SharePoint Online in Powershell
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#Sample provided As-Is – Use after sufficient testing. | |
#replace these details – User name, domain, Password. (Also consider using Get-Credential to enter password securely as script runs) | |
#Ensure there is a folder called C:\OUTPUT | |
#from https://blogs.technet.microsoft.com/sharepointrecipes/2015/06/17/code-sample-spo-dump-out-list-items-to-csv/ | |
$username = "[email protected]" | |
$password = "pwd" | |
$url = "https://domain.sharepoint.com" | |
$securePassword = ConvertTo-SecureString $Password -AsPlainText -Force | |
#install the SharePoint Online client SDK | |
[system.reflection.assembly]::LoadWithPartialName('Microsoft.SharePoint.Client') | |
[system.reflection.assembly]::LoadWithPartialName('Microsoft.SharePoint.Client.Runtime') | |
# connect/authenticate to SharePoint Online and get ClientContext object. | |
$clientContext = New-Object Microsoft.SharePoint.Client.ClientContext($url) | |
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $securePassword) | |
$clientContext.Credentials = $credentials | |
if (!$clientContext.ServerObjectIsNull.Value) | |
{ | |
Write-Host "Connected to SharePoint Online site: '$Url'" -ForegroundColor Green | |
} | |
#The list name I have used is CSVTEST1, you will have to change to your list's name. | |
$web = $clientContext.Web | |
$clientContext.Load($web) | |
$clientContext.ExecuteQuery() | |
$list = $web.lists.GetByTitle('csvtest1') | |
$all_Items_caml = [microsoft.sharepoint.client.camlquery]::CreateAllItemsQuery() | |
$allitems = $list.GetItems($all_Items_caml) | |
$clientContext.Load($list) | |
$clientContext.Load($allitems) | |
$clientContext.ExecuteQuery() | |
#Defining the data table that holds all the list data in custom fields. | |
$datatable = @() | |
#Iterating through the list items with an AllItems query -> You will have to take care of list throttling scenarios. | |
#Multi values fields like names and email addresses are saved as semi colon separated strings – within the same custom field. | |
#These will need unpacking using custom code, where the CSV is being consumed. | |
#The people field in this list is called XPEOPLE, and this can hold multiple values. | |
foreach($listitem in $allitems) | |
{ | |
$emails = '' | |
foreach($p in $listitem['xpeople']) | |
{ | |
$u = $web.GetUserById($p.LookupId) | |
$clientContext.Load($u) | |
$clientContext.ExecuteQuery() | |
$emails=$emails+$u.email+';' | |
} | |
$peoplenames = '' | |
($listitem['xpeople'] | select lookupvalue).lookupValue | %{$peoplenames=$peoplenames+$_+';'} | |
#Use the SPList Field names below -> Use InternalNames as seen in SchemaXML | |
$obj = new-object -TypeName 'PSObject' -Property @{ | |
Title = $listitem['Title'] | |
Name = $listitem['Name'] | |
Phone = $listitem['Phone_No'] | |
PeopleCount = $listitem['xpeople'].count | |
PeopleEmailAddresses = $emails | |
PeopleNames = $peoplenames | |
} | |
$datatable += $obj | |
} | |
#Dumping out the datatable to CSV. | |
$datatable | Export-Csv C:\output\test.csv | |
#Testing the CSV by importing into a variable – OPTIONAL. | |
$all = Import-Csv C:\output\test.csv $all[0].PeopleEmailAddresses |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment