SharePoint Online: Get All Items Created or Modified by a Specific User
Requirement: Find All List Items Created or Modified by a Specific User.
PowerShell to Get All Files Created or Modified by a Particular User
If you need to get a list of all items created or modified by a specific user in SharePoint Online, Here is the PowerShell script to do that! Probably, You may need this data for auditing purposes or simply want to extract all files created by a user in your SharePoint Online site.
#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
#Set Variables
$SiteURL = "https://crescent.sharepoint.com/sites/marketing"
$ListName = "Team Documents"
$UserAccount = "Salaudeen@Crescent.com"
$CSVPath = "C:\Temp\UserData.csv"
#Get Credentials to connect
$Cred= Get-Credential
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
#Setup the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = $Credentials
#Resolve User account
$User = $Ctx.web.EnsureUser($UserAccount)
$Ctx.Load($User)
$Ctx.ExecuteQuery()
#Get the List
$List=$Ctx.Web.Lists.GetByTitle($ListName)
$Ctx.Load($List)
$Ctx.ExecuteQuery()
#Define CAML Query to filter items created or modified by a specific user
$Query = New-Object Microsoft.SharePoint.Client.CamlQuery
$Query.ViewXml ="@
<View Scope='RecursiveAll'>
<Query>
<OrderBy><FieldRef Name='Created' Ascending='FALSE'/></OrderBy>
<Where>
<Or>
<Eq>
<FieldRef Name='Author' LookupId='TRUE'/><Value Type='User'>$($user.Id)</Value>
</Eq>
<Eq>
<FieldRef Name='Editor' LookupId='TRUE' /><Value Type='User'>$($user.Id)</Value>
</Eq>
</Or>
</Where>
</Query>
</View>"
#Get List Items matching CAML Query
$ListItems = $List.GetItems($Query)
$Ctx.Load($ListItems)
$Ctx.ExecuteQuery()
Write-host "Total Number of List Items Found:"$ListItems.count
$DataCollection = @()
#Iterate through each item
ForEach($ListItem in $ListItems)
{
#Collect data
$Data = New-Object PSObject -Property ([Ordered] @{
Name = $ListItem.FieldValues.FileLeafRef
RelativeURL = $ListItem.FieldValues.FileRef
CreatedBy = $ListItem.FieldValues.Author.Email
CreatedOn = $ListItem.FieldValues.Created
ModifiedBy = $ListItem.FieldValues.Editor.Email
ModifiedOn = $ListItem.FieldValues.Modified
FileSize = $ListItem.FieldValues.File_x0020_Size
})
$DataCollection += $Data
}
$DataCollection
#Export data to CSV File
$DataCollection | Export-Csv -Path $CSVPath -NoTypeInformation
PnP PowerShell to Get All Files Created by a Particular user from a SharePoint Online Library
Imagine you are the administrator of a SharePoint Online site and need to know who has been creating items in a document library. Let’s explore the PowerShell to get a list of all files in a SharePoint Online site that a specific user has created:
#Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/Marketing"
$ListName = "Documents"
$AuthorEmail = "salaudeen@crescent.com"
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive
#Get all files created by a particular user from the Library
$ListItems = Get-PnPListItem -List $Listname -PageSize 2000 | where {$_.FieldValues.Author.Email -eq $AuthorEmail -and $_.FileSystemObjectType -eq "File"}
$Resultset = @()
#Collect documents data
$ListItems | ForEach-Object {
$Resultset += New-Object PSObject -Property ([Ordered] @{
Name = $_.FieldValues.FileLeafRef
RelativeURL = $_.FieldValues.FileRef
CreatedBy = $_.FieldValues.Author.Email
CreatedOn = $_.FieldValues.Created
ModifiedBy = $_.FieldValues.Editor.Email
ModifiedOn = $_.FieldValues.Modified
FileSizeInKB = $_.FieldValues.File_x0020_Size
})
}
#Get Result set
$Resultset
Similarly, to get all files modified by a specific user in a SharePoint Online document library, use:
#Variables
$SiteURL = "https://crescent.sharepoint.com/sites/Marketing"
$ListName= "Branding"
$ModifiedByUserEmail = "Salaudeen@crescent.com"
#Connect to SharePoint
Connect-PnPOnline -Url $SiteURL -Interactive
#Get All Files from the library that are modified by the given user
$Files = Get-PnPListItem -List $Listname -PageSize 2000 | Where {$_.FieldValues.Editor.Email -eq $ModifiedByUserEmail -and $_.FileSystemObjectType -eq "File"}
You can use this PowerShell to Get All Items Created or Modified by a Specific User, to track all the changes made by a specific user in your SharePoint Online site or document library, or to filter items modified by a particular user.
Thanks, but this seems just for on-prem server.
@Yifeng
May be try the Advanced Search
https://support.microsoft.com/en-gb/office/find-content-by-using-advanced-search-2979bb4d-56e9-4ccd-8316-472eba777349#:~:text=To display the Advanced Search,shown in the following illustration.&text=Click Search to display your search results.
The reason I ask so is because I did not see connect- to Sharepoint site command show up in the first script.
Could you please let me know if there is a way to search the entire site, not just Documents folder, including subsite and all site content? Appreciate for that 🙂
Could you please let me know if this script can be used on Office 365 SharePoint Online? Thank you.
Yes! This script is written for SharePoint Online.
Could you please post the script to get all files created by a particular user from a document library?
Use: $ListItems = Get-PnPListItem -List $Listname -PageSize 2000 | where {$_.FieldValues.Author.Email -eq $AuthorEmail -and $_.FileSystemObjectType -eq “File”}