Búsqueda de sitios web

SharePoint Online: PowerShell para registrar de forma masiva todos los documentos


Requisito: Registro masivo de todos los documentos en SharePoint Online mediante PowerShell.

¿Cómo realizar check-in masivo de documentos en SharePoint Online?

En SharePoint Online, los documentos cargados en una biblioteca de documentos se pueden retirar para evitar que varios usuarios realicen cambios al mismo tiempo. Una vez que los usuarios hayan terminado de editar, deben volver a registrarlos. Los documentos retirados pueden causar problemas e impedir que otros usuarios accedan a ellos y los editen si no se vuelven a registrar.

Puede haber ocasiones en las que necesite registrar documentos de forma masiva en SharePoint Online. ¿Cómo registrar varios documentos en SharePoint Online? Bueno, puede registrar un solo archivo o varios archivos en una biblioteca de documentos seleccionándolos y eligiendo "Registrar" con unos pocos clics.

Los documentos seleccionados ahora estarán registrados y disponibles para que otros usuarios accedan y editen.

Registro masivo de varios archivos en SharePoint Online

¿Qué tal registrar todos los archivos en una biblioteca de documentos? Contamos con una biblioteca de documentos con carpetas y subcarpetas con muchos documentos prestados. Queríamos registrarlos y ponerlos a disposición de los usuarios finales. A continuación se explica cómo crear una vista para ver todos los archivos extraídos en una biblioteca:

  1. Navegue a su biblioteca de documentos >> Haga clic en el engranaje de Configuración >> Elija Configuración de la biblioteca
  2. En la sección "Vistas", cree una nueva vista. Incluya la columna "Pasado por" en la vista.
  3. Establezca el orden de "Ordenar" de la vista en la columna "Reservado en" en orden descendente.
  4. En la sección "Carpetas", configure "Mostrar todos los elementos sin carpetas".

¡Esta vista enumerará todos los archivos extraídos en la parte superior! Puede verlos o registrarlos de forma masiva.

Siguiendo estos sencillos pasos, puede registrar todos los archivos extraídos en su biblioteca de documentos de SharePoint Online. Sin embargo, en una enorme biblioteca de documentos con muchos documentos extraídos, intenté crear una vista que filtre todos los archivos extraídos, pero falló porque el recuento de elementos de la lista es > 5000 (¡problema del umbral de la vista de lista!). Entonces, usemos PowerShell para registrar todos los archivos en SharePoint.

SharePoint Online: PowerShell para registrar todos los documentos

¿Necesita registrar una gran cantidad de archivos a la vez en SharePoint Online? Si es así, PowerShell puede ayudar. Aquí está el PowerShell para registrar varios archivos en la biblioteca de documentos de 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"
$LibraryName="Shared Documents"
 
Try{
    #Get Credentials to connect
    $Cred= Get-Credential
    $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
  
    #Setup the context
    $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
    $Ctx.Credentials = $Credentials
 
    #Get the Web and List
    $Web = $Ctx.Web
    $Ctx.Load($Web)
    $List = $Web.Lists.GetByTitle($LibraryName)
    $Ctx.Load($List)
    $Ctx.ExecuteQuery()
 
    #Prepare the query
    $Query = New-Object Microsoft.SharePoint.Client.CamlQuery
    $Query.ViewXml = "@
    <View Scope='RecursiveAll'>
        <Query>
            <OrderBy><FieldRef Name='ID' Ascending='TRUE'/></OrderBy>
        </Query>
        <RowLimit Paged='TRUE'>2000</RowLimit>
    </View>"
 
    $Counter=1
    #Batch Process items: sharepoint online powershell bulk check in 
    Do {
        $ListItems = $List.GetItems($Query)
        $Ctx.Load($ListItems)
        $Ctx.ExecuteQuery()
 
        $Query.ListItemCollectionPosition = $ListItems.ListItemCollectionPosition
 
        #Get All Checked out files
        ForEach($Item in $ListItems | Where {$_.FileSystemObjectType -eq "File"})
        {
            #Display a Progress bar
            Write-Progress -Activity "Scanning Files in the Library" -Status "Testing if the file is Checked-Out '$($Item.FieldValues.FileRef)' ($Counter of $($List.ItemCount))" -PercentComplete (($Counter / $List.ItemCount) * 100)

            #Get the Checked out File data
            $File = $Ctx.Web.GetFileByServerRelativeUrl($Item["FileRef"])
            $Ctx.Load($File)
            $CheckedOutByUser = $File.CheckedOutByUser
            $Ctx.Load($CheckedOutByUser)
            $Ctx.ExecuteQuery()
 
            If($File.Level -eq "Checkout")
            {
                Write-Host -f Yellow "Found a Checked out File '$($File.Name)' at $($Web.url)$($Item['FileRef']), Checked Out By: $($CheckedOutByUser.LoginName)"

                #Check in the document
                $File.CheckIn("Checked-in By Administrator through PowerShell!", [Microsoft.SharePoint.Client.CheckinType]::MajorCheckIn)      
                $Ctx.ExecuteQuery()
                Write-Host -f Green "File '$($File.Name)' Checked-In Successfully!"
            }
            $Counter++
        }
    }While($Query.ListItemCollectionPosition -ne $Null)
}
Catch {
        write-host -f Red "Error Check In Files!" $_.Exception.Message
}

SharePoint Online: registrar varios archivos mediante PowerShell

¿Está intentando registrar todos los archivos que otra persona ha desprotegido actualmente? Escaneemos toda la colección de sitios en busca de archivos extraídos y registrémoslos usando 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"
 
#PowerShell to Bulk check-in all documents
Function CheckIn-AllDocuments([String]$SiteURL)
{
    Try{
        #Setup the context
        $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
        $Ctx.Credentials = $Credentials

        #Get the Web
        $Web = $Ctx.Web
        $Ctx.Load($Web)
        $Ctx.Load($Web.Webs)
        $Ctx.ExecuteQuery()

        #Get All Lists from the web
        $Lists = $Web.Lists
        $Ctx.Load($Lists)
        $Ctx.ExecuteQuery()
 
        #Prepare the CAML query
        $Query = New-Object Microsoft.SharePoint.Client.CamlQuery
        $Query.ViewXml = "@
        <View Scope='RecursiveAll'>
            <Query>
                <OrderBy><FieldRef Name='ID' Ascending='TRUE'/></OrderBy>
            </Query>
            <RowLimit Paged='TRUE'>2000</RowLimit>
        </View>"

        #Array to hold Checked out files
        $CheckedOutFiles = @()
        Write-host -f Yellow "Processing Web:"$Web.Url
        
        #Iterate through each document library on the web
        ForEach($List in ($Lists | Where-Object {$_.BaseTemplate -eq 101 -and $_.Hidden -eq $False -and $_.ItemCount -gt 0}) )
        {
            Write-host -f Yellow "`t Processing Document Library:"$List.Title

                $Counter=1
                #Batch Process List items 
                Do {
                    $ListItems = $List.GetItems($Query)
                    $Ctx.Load($ListItems)
                    $Ctx.ExecuteQuery()

                    $Query.ListItemCollectionPosition = $ListItems.ListItemCollectionPosition

                    #Get All Checked out files
                    ForEach($Item in $ListItems | Where {$_.FileSystemObjectType -eq "File"})
                    {
                        #Display a Progress bar
                        Write-Progress -Activity "Scanning Files in the Library" -Status "Testing if the file is Checked-Out '$($Item.FieldValues.FileRef)' ($Counter of $($List.ItemCount))" -PercentComplete (($Counter / $List.ItemCount) * 100)

                        Try{
                            #Get the Checked out File data
                            $File = $Web.GetFileByServerRelativeUrl($Item["FileRef"])
                            $Ctx.Load($File)
                            $CheckedOutByUser = $File.CheckedOutByUser
                            $Ctx.Load($CheckedOutByUser)
                            $Ctx.ExecuteQuery()

                            If($File.Level -eq "Checkout")
                            {
                                Write-Host -f Green "`t`t Found a Checked out File '$($File.Name)' at $($Item['FileRef']), Checked Out By: $($CheckedOutByUser.LoginName)"

                                #Check in the document
                                $File.CheckIn("Checked-in By Administrator through PowerShell!", [Microsoft.SharePoint.Client.CheckinType]::MajorCheckIn)      
                                $Ctx.ExecuteQuery()
                                Write-Host -f Green "`t`t File '$($File.Name)' Checked-In Successfully!"
                            }
                        }
                        Catch {
                            write-host -f Red "Error Check In: $($Item['FileRef'])" $_.Exception.Message
                        }
                        $Counter++
                    }
                }While($Query.ListItemCollectionPosition -ne $Null)
        }

        #Iterate through each subsite of the current web and call the function recursively
        ForEach($Subweb in $Web.Webs)
        {
            #Call the function recursively to process all subsites underneath the current web
            CheckIn-AllDocuments -SiteURL $Subweb.URL
        }
    }
    Catch {
        write-host -f Red "Error Bulk Check In Files!" $_.Exception.Message
    }
}

#Config Parameters
$SiteURL="https://crescent.sharepoint.com/Sites/Marketing"
 
#Setup Credentials to connect
$Cred= Get-Credential
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
 
#Call the function: sharepoint online powershell to check in all documents in a Site Collection
CheckIn-AllDocuments -SiteURL $SiteURL

Si necesita registrar un archivo en SharePoint Online, use: PowerShell para registrar un documento en SharePoint Online

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

A continuación se explica cómo utilizar PnP PowerShell para registrar todos los documentos en la biblioteca de documentos de SharePoint Online:


#Parameter
$SiteURL= "https://crescent.sharepoint.com/sites/marketing/"
$ListName = "Documents"

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

#Get All List Items from the List - Filter Files
$ListItems = Get-PnPListItem -List $ListName -PageSize 500 | Where {$_["FileLeafRef"] -like "*.*"}

#Loop through each list item
ForEach ($Item in $ListItems)
{
    Write-host -f Yellow "Testing If file is Checked-Out:"$Item.FieldValues["FileRef"]
    #Get the File from List Item
    $File = Get-PnPProperty -ClientObject $Item -Property File

    If($File.Level -eq "Checkout")
    {
        #Check-In and Approve the File
        Set-PnPFileCheckedIn -Url $File.ServerRelativeUrl -CheckinType MajorCheckIn

        Write-host -f Green "`tFile Checked-In:"$File.ServerRelativeUrl
    }
} 

En resumen, usar el script de PowerShell para registrar archivos de forma masiva en SharePoint Online es una forma sencilla y eficiente de ahorrar tiempo y esfuerzo. Seguir estos pasos le permitirá registrar varios documentos en SharePoint Online y evitar problemas de colaboración y accesibilidad.

Artículos relacionados