SharePoint Online: Delete Attachments from List Item using PowerShell
Requirement: Delete Attachment from SharePoint Online List Item.
How to Delete Attachments from List Items in SharePoint Online?
Are you looking for a way to delete attachments from list items? This blog post will show you how to remove an attachment from a SharePoint list item. We’ll also share the PowerShell scripts to delete attachments from SharePoint Online list items.
To delete an attachment from SharePoint list items, do the following:
- Navigate to the SharePoint Online List >> Select the List Item >> Click on Edit from tool pane.
- In the Edit panel, scroll down to the bottom and click on the little X Icon next to any attachment to delete it from the list item.
- Click on Save to commit your changes.
Delete All Attachments from a List Item using PowerShell:
Let’s delete all attachments from a SharePoint Online list item using PowerShell.
#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 Parameters
$SiteURL= "https://crescent.sharepoint.com"
$ListName="Projects"
$ItemID="4"
Try {
#Setup Credentials to connect
$Cred = Get-Credential
$Cred = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.UserName,$Cred.Password)
#Setup the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = $Cred
#Get the List & List Item
$List = $Ctx.Web.Lists.GetByTitle($ListName)
$Ctx.Load($List)
$ListItem = $List.GetItemByID($ItemID)
$Ctx.Load($ListItem)
$Ctx.ExecuteQuery()
#Get All existing attachments
$AttachmentFiles = $ListItem.AttachmentFiles
$Ctx.Load($AttachmentFiles)
$Ctx.ExecuteQuery()
ForEach($AttachmentFile in $AttachmentFiles)
{
$AttachmentFile.DeleteObject()
$Ctx.ExecuteQuery()
write-host -f Green "Attachment File '$AttachmentFile' Removed from List Item!"
}
}
Catch {
write-host -f Red "Error Removing Attachment From List!" $_.Exception.Message
}
PowerShell to Remove Attachment from SharePoint Online List Item:
#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"
Function Remove-AttachmentFromListItem()
{
param
(
[Parameter(Mandatory=$true)] [string] $SiteURL,
[Parameter(Mandatory=$true)] [string] $ListName,
[Parameter(Mandatory=$true)] [string] $ItemID,
[Parameter(Mandatory=$false)] [string] $AttachmentFileName
)
Try {
#Setup Credentials to connect
$Cred = Get-Credential
$Cred = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.UserName,$Cred.Password)
#Setup the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = $Cred
#Get the List & List Item
$List = $Ctx.Web.Lists.GetByTitle($ListName)
$Ctx.Load($List)
$ListItem = $List.GetItemByID($ItemID)
$Ctx.Load($ListItem)
$Ctx.ExecuteQuery()
#Get All existing attachments
$AttachmentFiles = $ListItem.AttachmentFiles
$Ctx.Load($AttachmentFiles)
$Ctx.ExecuteQuery()
#Check if attachment file name exists
$AttachmentFile = $AttachmentFiles | where { ($_.FileName -eq $AttachmentFileName) }
If($AttachmentFile -ne $Null)
{
$AttachmentFile.DeleteObject()
$Ctx.ExecuteQuery()
write-host -f Green "Attachment File '$AttachmentFileName' Removed from List Item!"
}
else
{
write-host -f Yellow "Attachment File '$AttachmentFileName' Doesn't Exist!"
}
}
Catch {
write-host -f Red "Error Removing Attachment From List!" $_.Exception.Message
}
}
#Set Parameters
$SiteURL= "https://crescent.sharepoint.com"
$ListName="Projects"
$ItemID="64"
$AttachmentFileName="ProjectProposal.docx"
#Call the function to copy list items
Remove-AttachmentFromListItem -SiteURL $SiteURL -ListName $ListName -ItemID $ItemID -AttachmentFileName $AttachmentFileName
PnP PowerShell to Delete Attachment from SharePoint Online List Item:
#Config Variables
$SiteURL = "https://Crescent.sharepoint.com"
$ListName ="Projects"
$ListItemTitle = "SharePoint 2016 Upgrade"
$AttachmentFileName= "Project Proposal.docx"
#Connect PnP Online
Connect-PnPOnline -Url $SiteURL -Credentials (Get-Credential)
#Get the Context
$Context = Get-PnPContext
#Get the List Item from "Title" field value
$Query = "<View><Query><Where><Eq><FieldRef Name='Title'/><Value Type='Text'>$ListItemTitle</Value></Eq></Where></Query></View>"
$ListItem = Get-PnPListItem -List $ListName -Query $Query -PageSize 1
#Get List attachment by its file name
$Attachment = $ListItem.AttachmentFiles.GetByFileName($AttachmentFileName)
#Delete the attachment
$Attachment.DeleteObject()
$Context.ExecuteQuery()