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 Items Created or Modified by a Specific User in SharePoint Online

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.

Salaudeen Rajack

Salaudeen Rajack - SharePoint Expert with Two decades of SharePoint Experience. Love to Share my knowledge and experience with the SharePoint community, through real-time articles!

8 thoughts on “SharePoint Online: Get All Items Created or Modified by a Specific User

  • Thanks, but this seems just for on-prem server.

    Reply
  • @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.

    Reply
  • The reason I ask so is because I did not see connect- to Sharepoint site command show up in the first script.

    Reply
  • 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 🙂

    Reply
  • Could you please let me know if this script can be used on Office 365 SharePoint Online? Thank you.

    Reply
  • Could you please post the script to get all files created by a particular user from a document library?

    Reply
    • Use: $ListItems = Get-PnPListItem -List $Listname -PageSize 2000 | where {$_.FieldValues.Author.Email -eq $AuthorEmail -and $_.FileSystemObjectType -eq “File”}

      Reply

Leave a Reply

Your email address will not be published. Required fields are marked *