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:
- Vaya a su biblioteca de documentos de SharePoint, donde se almacenan los documentos.
- 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.
- En la barra de comandos, seleccione "Registrar".
- Aparecerá una ventana emergente que le permitirá registrarse con un comentario que explique los cambios que ha realizado en los documentos.
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
}
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

