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

#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 = "[email protected]"
$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

#Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/Marketing"
$ListName = "Documents"
$AuthorEmail = "[email protected]"

#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -UseWebLogin

#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 

Salaudeen Rajack

Information Technology Professional with Two decades of SharePoint Experience.

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

  • May 5, 2021 at 1:16 AM

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

    Reply
  • March 4, 2021 at 7:17 PM

    @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
  • February 16, 2021 at 10:53 PM

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

    Reply
  • February 16, 2021 at 9:52 PM

    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
  • February 16, 2021 at 5:12 PM

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

    Reply
  • May 5, 2020 at 10:31 AM

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

    Reply
    • May 5, 2020 at 4:42 PM

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

      Reply

Leave a Reply