Búsqueda de sitios web

SharePoint Online: publicar todos los archivos en una biblioteca usando PowerShell


Requisito: Publicar de forma masiva varios archivos en SharePoint Online.

¿Cómo publicar varios archivos en SharePoint Online?

Para publicar todos los documentos en SharePoint Online, puede seguir estos pasos:

  1. Vaya a su biblioteca de documentos de SharePoint, donde se almacenan los documentos.
  2. Seleccione los documentos que desea publicar haciendo clic en la casilla de verificación junto a cada documento. También puede crear una vista configurando el Filtro: El estado de aprobación es igual a borrador y configurando la vista para que muestre todos los archivos sin carpetas.
  3. En la barra de comandos, seleccione "Registrar".
  4. Aparecerá una ventana emergente que le permitirá registrarse con un comentario que explique los cambios que ha realizado en los documentos.
  5. Elija "Versión principal (Publicar)" para publicar todos los archivos seleccionados y ponerlos a disposición de otros.

PowerShell para registrar, aprobar y publicar todos los archivos en una biblioteca

Cuando activa el control de versiones menores en la biblioteca de documentos de SharePoint Online, las ediciones no aparecerán para los usuarios con permisos de solo lectura (o solo visualización) hasta que las publique. Publicar cada archivo individualmente en bibliotecas grandes es definitivamente engorroso, así que aquí está mi script de PowerShell para publicarlos todos a la vez. Supongamos que desea publicar todas las páginas de la biblioteca "Páginas" en 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"
$ListName ="Team Documents"

#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 All Items from the List
    $List = $Ctx.Web.Lists.GetByTitle($ListName)
    $ListItems = $List.GetItems([Microsoft.SharePoint.Client.CamlQuery]::CreateAllItemsQuery()) 
    $Ctx.Load($List)
    $Ctx.Load($ListItems)
    $Ctx.ExecuteQuery()

    ForEach($ListItem in $ListItems)
    {
        #Approve the File if "Content Approval is Turned-ON"
        If ($List.EnableModeration -eq $true)
        {
            If ($ListItem["_ModerationStatus"] -ne '0')
            { 
                $ListItem.File.Approve("Approved by Admin")
                Write-Host "File Approved: "$ListItem["FileLeafRef"] -ForegroundColor Yellow
                $Ctx.ExecuteQuery()
            }
        }

        #Checkin the File if its checked-out
        If ($ListItem["CheckoutUser"] -ne $null)
        {
            $ListItem.File.CheckIn("Check-in by Admin", [Microsoft.SharePoint.Client.CheckinType]::MajorCheckIn)
            Write-Host "File Checked in: "$ListItem["FileLeafRef"] -ForegroundColor Cyan
            $Ctx.ExecuteQuery()
        }

        #Publish the File
        If($List.EnableVersioning -and $List.EnableMinorVersions)
        {
            $ListItem.File.Publish("Published by Admin")
            $Ctx.ExecuteQuery()
            Write-Host -f Green "File published:" $ListItem["FileLeafRef"]
        }
    }
}
Catch {
Write-host -f Red "Error:" $_.Exception.Message
}
¡También puede utilizar "Contenido y estructura" para publicar documentos de forma masiva en SharePoint Online!

PnP PowerShell para publicar todos los archivos en una biblioteca de documentos

Puede utilizar PnP PowerShell para publicar todos los documentos en una biblioteca de documentos de SharePoint Online. El siguiente es un ejemplo de cómo puede hacer esto:


#Set Variables
$SiteURL = "https://crescent.sharepoint.com/sites/Retail"
$LibraryName= "Invoices"
  
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive
 
#Get All Files from the Document Library
$List =  Get-PnPList -Identity $LibraryName
$ListItems = Get-PnPListItem -List $LibraryName -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 

    #Approve the File if "Content Approval is Turned-ON"
    If ($List.EnableModeration -eq $true)
    {
        If ($Item["_ModerationStatus"] -ne '0')
        { 
            Set-PnPListItem -List $LibraryName -Identity $Item.ID -Values @{"_ModerationStatus"=0;"_ModerationComments"="Approved by Script"} | Out-Null            
            Write-host -f Green "Approved File:"$Item.FieldValues.FileRef
        }
    }

    #Check in the file, if its checked out
    If($File.CheckOutType -ne "None")
    {
        Set-PnPFileCheckedIn -Url $File.ServerRelativeUrl -CheckinType MajorCheckIn 
        Write-host -f Green "File Checked-In and Published:"$File.ServerRelativeUrl
    }
    Elseif($File.MinorVersion )# Check if file draft (Minor version)
    {
        $File.Publish("Major version Published by Script")
        $File.Update()
        Invoke-PnPQuery
        Write-host -f Green "Published File at '$($File.ServerRelativeUrl)'"
    }
}

Por cierto, la enumeración SPModerationStatusType tiene los siguientes valores:

  • Aprobado - 0
  • Denegado -1
  • Pendiente - 2
  • Borrador - 3
  • Programado - 4

Artículos relacionados