SharePoint Online: How to Publish a File using PowerShell?

Requirement: Publish a Document in SharePoint Online.

How to Publish a File in SharePoint Online?

When you enable minor versions (or drafts) in SharePoint Online, changes to any document aren’t available to users with read-only permissions until it’s published. Published documents become major versions such as 1.0. Here is how to publish a file in SharePoint Online:

  1. Navigate to the document library where your file is located.
  2. Right-click on the document to publish >> In the context menu, choose More >> and then click on Publish.
    publish document in sharepoint online
  3. Enter a comment in the Comments box and click on OK.

It publishes a major version, and others can view the file now!

PowerShell to Publish a Document in SharePoint Online

Here is the PowerShell you need to publish a file from SharePoint Online:

#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/sites/marketing"
$FileRelativeURL ="/Sites/Marketing/Team Documents/Project Proposal.docx"
$Comment="Final Version"

#Get Credentials to connect
$Cred= Get-Credential

Try{
    #Setup the context
    $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
    $Ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)

    #Get the File to Publish
    $File = $Ctx.Web.GetFileByServerRelativeUrl($FileRelativeURL)
    $Ctx.Load($File)
    $Ctx.ExecuteQuery()

    #Publish the File
    $File.Publish($Comment)
    $Ctx.ExecuteQuery()       

    Write-Host -f Green $File.Name "has been published successfully!"
}
Catch {
Write-host -f Red "Error:" $_.Exception.Message
}

Similarly, you can unpublish a file using: “$File.Unpublish($Comment)” method.

How to Publish a Major Version in SharePoint Online using PnP PowerShell?

To publish a minor version file to a major version, use this PnP PowerShell script:

#Set Parameters
$SiteURL="https://crescent.sharepoint.com/sites/retail"
$FileServerRelativeURL ="/sites/Retail/Invoices V5/V1 Template.docx"

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

#Get the File
$File = Get-PnPFile -Url $FileServerRelativeURL -ErrorAction SilentlyContinue
$FileLevel = Get-PnPProperty -ClientObject $File -Property Level

If($File)
{
    #Check if file draft (Minor version)
    If($File.Level -eq "Draft")
    {
        $File.Publish("Major version Published by Script")
        $File.Update()
        Invoke-PnPQuery
        Write-host -f Green "File Published Successfully!"
    }
    Else
    {
        Write-host -f Yellow "File is not in draft Mode!"
    }
}
Else
{
    Write-host -f Yellow "File Doesn't Exists!"
}

To publish a major version for all the documents in a SharePoint Online document library in one go, use this PowerShell script:

#Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/retail" 
$ListName = "Invoices V5"

#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive
    
#Get all files from the document library
$ListItems = Get-PnPListItem -List $ListName -PageSize 2000 | Where { $_.FileSystemObjectType -eq "File" }

#Iterate through each file
ForEach ($Item in $ListItems)
{
    #Get the File from List Item
    $File = Get-PnPProperty -ClientObject $Item -Property File
    $Level = Get-PnPProperty -ClientObject $File -Property Level

    #Check if file draft (Minor version)
    If($File.Level -eq "Draft")
    {
        $File.Publish("Major version Published by Script")
        $File.Update()
        Invoke-PnPQuery
        Write-host -f Green "Published file at '$($File.ServerRelativeUrl)'"
    }
}

What if when the draft file is checked out, or content approval is enabled? Well, Here is another post for that scenario to bulk publish: SharePoint Online: Publish Multiple Documents using PowerShell

Salaudeen Rajack

Salaudeen Rajack - Information Technology Expert with Two-decades of hands-on experience, specializing in SharePoint, PowerShell, Microsoft 365, and related products. He has held various positions including SharePoint Architect, Administrator, Developer and consultant, has helped many organizations to implement and optimize SharePoint solutions. Known for his deep technical expertise, He's passionate about sharing the knowledge and insights to help others, through the real-world articles!

One thought on “SharePoint Online: How to Publish a File using PowerShell?

  • Big question. “Publish” will create new Major version of a file with “modified” and “modified by” being @utcNow and @me. Is there a way to push other values in these fields when publishing? To create sort of “publish as” process?
    Alternatively, can I change Field Values of published major version without it creating a minor version?
    (I need it to undo some changes in my sitePages library)
    Thank you very much

    Reply

Leave a Reply

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