SharePoint Online: administre archivos que no tienen una versión registrada usando PowerShell
Cuando los usuarios no proporcionan valores para los valores de los campos de metadatos obligatorios al cargar archivos (en la experiencia clásica) o cuando los usuarios olvidan registrar documentos mientras la opción "Requerir salida" en la configuración de control de versiones de cualquier biblioteca está configurada en "Sí", entonces esos archivos se denominan "Archivos que no tienen una versión registrada". Los archivos que se carguen se almacenarán en SharePoint, pero estarán desprotegidos y serán visibles solo para quien los cargó. ¡A menudo sucede cuando los usuarios cargan usando la vista del Explorador de archivos!
Administrar archivos que no tienen una versión registrada en SharePoint Online:
Como administrador del sitio, puede tomar posesión de los archivos que no tienen una versión registrada. Tomar el control,
- Vaya al enlace "Administrar archivos que no tienen una versión registrada" en Configuración de la biblioteca,
- Seleccione los documentos y haga clic en el botón "Tomar posesión de la selección" y confirme el mensaje.
Una vez que toma posesión, el documento se elimina de esta página y comienza a aparecer en la lista donde se cargan (¡solo para usted, hasta que los registre!). Como propietario del sitio, puede configurar las propiedades de metadatos si es necesario, verifique -in y hacer que estos documentos sean visibles para todos los usuarios.
PowerShell tomará posesión y registrará todos los archivos que no tienen una versión registrada 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 parameter values
$SiteURL="https://Crescent.sharepoint.com/sites/Marketing/"
$ListName ="Documents"
Try{
#Get Credentials to connect
$Cred= Get-Credential
#Setup the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
#Get Checked out Files with no checked-in version
$List = $Ctx.Web.lists.GetByTitle($ListName)
$CheckedOutFiles = $List.GetCheckedOutFiles()
$Ctx.Load($List)
$Ctx.Load($CheckedOutFiles)
$Ctx.ExecuteQuery()
#Loop through each checked-out file
ForEach($File in $CheckedOutFiles)
{
#Take Ownership of the File
$CheckedOutByUser=$File.CheckedOutBy
$Ctx.Load($CheckedOutByUser)
$File.TakeOverCheckOut()
$Ctx.ExecuteQuery()
#Get the File and Check-in
$CheckInFileURL = [String]::Concat($List.ParentWebUrl, $File.ServerRelativePath.DecodedUrl.Replace($List.ParentWebUrl, [string]::Empty))
$CheckInFile = $Ctx.web.GetFileByServerRelativeUrl($CheckInFileURL)
$Ctx.Load($CheckInFile)
$Ctx.ExecuteQuery()
#Check in the file
$CheckInFile.CheckIn("Checked-in from PowerShell",[Microsoft.SharePoint.Client.CheckinType]::MajorCheckIn)
$Ctx.ExecuteQuery()
Write-Host -f Yellow "'$($CheckInFile.name)' at $($CheckInFile.ServerRelativeUrl) was Checked Out by: $($CheckedOutByUser.Email)"
Write-host -f Green "Checked In The File Successfully!"
}
}
Catch {
write-host -f Red "Error:" $_.Exception.Message
}
¿Puedo tomar posesión y registrar todos los archivos de un usuario específico? Seguro:
#Get the User
$User = $Web.EnsureUser("Salaudeen@crescent.com");
#Check if the File is checked out to the specific user
If($File.CheckedOutById -eq $User.Id)
{
#Take ownership and check-in
}
PnP PowerShell para registrar todos los archivos retirados sin ninguna versión registrada
Este script de PowerShell registra todos los archivos desprotegidos para un usuario en particular.
#Set Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/Marketing"
$ListName = "Branding"
$UserID = "i:0#.f|membership|salaudeen@crescent.onmicrosoft.com"
#Connect to SharePoint Online site
Connect-PnPOnline -Url $SiteURL -Interactive
$Ctx = Get-PnPContext
#Get the List
$List = Get-PnPList $ListName
#Get the User
$CheckedoutByUser = Get-PnPUser -Identity $UserID
#Get All Checked-Out Files
$CheckedOutFiles = $List.GetCheckedOutFiles()
$Ctx.Load($CheckedOutFiles)
$Ctx.ExecuteQuery()
#Check-in All Files Checked out to the User
$CheckedOutFiles | ForEach-Object {
If($_.CheckedOutById -eq $CheckedoutByUser.Id)
{
#Take over the Checked-Out File
$_.TakeOverCheckOut()
$Ctx.ExecuteQuery()
#Check-in the file
$CheckInFileURL = [String]::Concat($List.ParentWebUrl, $_.ServerRelativePath.DecodedUrl.Replace($List.ParentWebUrl, [string]::Empty))
Set-PnPFileCheckedIn -Url $CheckInFileURL -CheckinType MajorCheckIn -Comment "Checked-In by the Script at $(Get-Date)"
Write-Host "Check-in the File: $CheckInFileURL"
}
}
