The following Powershell script find and lists all the documents in a SharePoint Online document library which are checkout by current user and all other users.
#Add required references to SharePoint client assembly to use CSOM [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client") [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime") [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.UserProfiles") $siteUrl="https://spotenant.sharepoint.com/sites/testsite" $UserName = "admin@spotenant.onmicrosoft.com" $SecPwd = $(ConvertTo-SecureString 'adminPassword' -asplaintext -force) $ctx = New-Object Microsoft.SharePoint.Client.ClientContext($siteUrl) $credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName,$SecPwd) $ctx.credentials = $credentials $ctx.Load($ctx.Web) $ctx.ExecuteQuery() $list=$ctx.Web.Lists.GetByTitle("Documents") $ctx.Load($list) $ctx.ExecuteQuery() $camlQuery = New-Object Microsoft.SharePoint.Client.CamlQuery $camlQuery.ViewXml ="<View Scope='RecursiveAll' />"; $allItems=$list.GetItems($camlQuery) $ctx.Load($allItems) $ctx.ExecuteQuery() foreach($item in $allItems) { $file = $ctx.Web.GetFileByServerRelativeUrl($item["FileRef"]); $ctx.Load($file) $ctx.Load($file.ListItemAllFields) $CheckedOutByUser=$file.CheckedOutByUser $ModifiedBy=$file.ModifiedBy $ctx.Load($CheckedOutByUser) $ctx.Load($ModifiedBy) try { $ctx.ExecuteQuery() if($CheckedOutByUser.LoginName -ne $null){ Write-Host "##############" Write-Host "File:" $file.Name Write-Host "Url:" $item["FileRef"] Write-Host "CheckedOutBy:" $CheckedOutByUser.LoginName Write-Host "Last Modified By:" $ModifiedBy.LoginName Write-Host "##############" Write-Host "" }} catch{} }In the above powershell script first we are retrieving all the files from library and check every file if it is checked out by user or not, this process may time consuming in large document library, so alternatively we can use filter in caml query itself and retrieve checked out files alone.
#Add required references to SharePoint client assembly to use CSOM [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client") [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime") [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.UserProfiles") $siteUrl="https://spotenant.sharepoint.com/sites/testsite" $UserName = "admin@spotenant.onmicrosoft.com" $SecPwd = $(ConvertTo-SecureString 'adminPassword' -asplaintext -force) $ctx = New-Object Microsoft.SharePoint.Client.ClientContext($siteUrl) $credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName,$SecPwd) $ctx.credentials = $credentials $ctx.Load($ctx.Web) $ctx.ExecuteQuery() $list=$ctx.Web.Lists.GetByTitle("Documents") $ctx.Load($list) $ctx.ExecuteQuery() $camlQuery = New-Object Microsoft.SharePoint.Client.CamlQuery $camlQuery.ViewXml ="<View Scope='RecursiveAll'><Query><Where><IsNotNull><FieldRef Name='CheckoutUser' /></IsNotNull></Where></Query></View>"; $allItems=$list.GetItems($camlQuery) $ctx.Load($allItems) $ctx.ExecuteQuery() foreach($item in $allItems) { $file = $ctx.Web.GetFileByServerRelativeUrl($item["FileRef"]); $ctx.Load($file) $CheckedOutByUser=$file.CheckedOutByUser $ModifiedBy=$file.ModifiedBy $ctx.Load($CheckedOutByUser) $ctx.Load($ModifiedBy) $ctx.ExecuteQuery() Write-Host "##############" Write-Host "File:" $file.Name Write-Host "Url:" $item["FileRef"] Write-Host "CheckedOutBy:" $CheckedOutByUser.LoginName Write-Host "Last Modified By:" $ModifiedBy.LoginName Write-Host "##############" Write-Host "" }
Hi there! This blog post couldn't be written any better!
ReplyDeleteReading through this post reminds me of my previous roommate!
He continually kept talking about this. I will send this article to
him. Pretty sure he will have a great read. I appreciate you for sharing!