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 

2 comments:

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

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

      Delete

Please Login and comment to get your questions answered!

Powered by Blogger.