Code Sample - SharePoint Online – Shared With Me
#Below Script Sample emulates the Search Query that is sent out while browsing to Shared With Me page.
#The oob page will have a row limit of 30 that is hard coded - but in this script, we can alter it.
#The sample gives you Raw search results. Further development will be required to utilize these search results in a useful manner.
#Note - the results are heavily dependent on Search Freshness.
# replace these details (also consider using Get-Credential to enter password securely as script runs)
$username = "administrator@domain.com"
$password = "pwd"
$url = "https://domain-my.sharepoint.com"
$securePassword = ConvertTo-SecureString $Password -AsPlainText -Force
#Install SharePoint Online Client SDK
[system.reflection.assembly]::LoadWithPartialName('Microsoft.SharePoint.Client')
[system.reflection.assembly]::LoadWithPartialName('Microsoft.SharePoint.Client.Search')
[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
}
$web = $clientContext.Web
$clientContext.Load($web)
$clientContext.ExecuteQuery()
#enter the UPN of the user for whom you need to get SharedWithMe details.
$username = 'testuser@domain.onmicrosoft.com'
#set RowLimit below to the number of results you want to see.
$keywordQuery = New-Object Microsoft.SharePoint.Client.Search.Query.KeywordQuery($clientContext)
$keywordQuery.QueryText = 'SharedWithUsersOWSUSER:\' + $userName.ToString() + '\'
$keywordQuery.ClientType = "DocsSharedWithMe"
$keywordQuery.StartRow = 0
$keywordQuery.RowLimit = 100
$keywordQuery.ProcessBestBets = $false
$keywordQuery.BypassResultTypes = $true
$keywordQuery.EnableInterleaving = $false
$keywordQuery.EnableQueryRules = $false
$keywordQuery.EnableStemming = $true
#modify below property set as per requirement - pull down only the ones that are required and will be used down the pipeline in your code.
$keywordQuery.SelectProperties.Add("Author");
$keywordQuery.SelectProperties.Add("ContentTypeId");
$keywordQuery.SelectProperties.Add("FileExtension");
$keywordQuery.SelectProperties.Add("Filename");
$keywordQuery.SelectProperties.Add("IsMyDocuments");
$keywordQuery.SelectProperties.Add("LastModifiedTime");
$keywordQuery.SelectProperties.Add("ListID");
$keywordQuery.SelectProperties.Add("ListItemID");
$keywordQuery.SelectProperties.Add("EditorOWSUSER");
$keywordQuery.SelectProperties.Add("ServerRedirectedURL");
$keywordQuery.SelectProperties.Add("ServerRedirectedEmbedURL");
$keywordQuery.SelectProperties.Add("ServerRedirectedPreviewURL");
$keywordQuery.SelectProperties.Add("SiteID");
$keywordQuery.SelectProperties.Add("SPSiteURL");
$keywordQuery.SelectProperties.Add("Path");
$keywordQuery.SelectProperties.Add("Title");
$keywordQuery.SelectProperties.Add("ParentLink");
$keywordQuery.SelectProperties.Add("IsContainer");
$searchExecutor = new-object Microsoft.SharePoint.Client.Search.Query.SearchExecutor($clientContext)
$results = $searchExecutor.ExecuteQuery($keywordQuery)
$clientContext.ExecuteQuery()
#This gives you all the documents that are shared with the user -> 'testuser@domain.onmicrosoft.com'
$results.Value
$results.Value[0].ResultRows
Comments
- Anonymous
June 18, 2015
Is this code worth full to try in our works?
http://staygreenacademy.com/