starmanager
Goto Top

Sharepoint Online Vorgaengerversionen aut. loeschen

Hallo Miteinander,

ich bin auf der Suche nach einem Powershell Script mit dem man die Vorgaengerversionen von Dateien automatisch loeschen kann.
Wir haben zur Zeit einen starken Anstieg des verbrauchten Speicherplatz im Sharepoint. Da wir einige Dateien jeden Tag mehrmals laden und wieder speichern wird der freie Platz immer weniger.

Nun habe ich ein wenig nachgeforscht und ein paar Ideen gefunden die Abhilfe schaffen. Leider bekomme ich die nicht zum laufen. Hat vielleicht schon ein Sharepoint / Powershell Spezialist eine Idee wie man dem Platzschwund entgegenwirken kann?
# Parameters
$SiteURL = "https://meinedomain.sharepoint.com/sites/UnterseiteName"  
$LibraryName = "????"  

# Function to clear all file versions except the latest one, folder by folder within the library.
Function Cleanup-Versions([Microsoft.SharePoint.Client.Folder]$Folder)
{
    Write-host "Processing Folder:" $Folder.ServerRelativeUrl -f Yellow  

    # Get the Site Relative URL of the folder
    $Folder.ServerRelativeUrl.Replace($Folder.Context.web.ServerRelativeURL,[string]::Empty)

    # Get all files from the folder
    $Files = Get-PnPFolderItem -FolderSiteRelativeUrl $FolderSiteRelativeURL -ItemType File

    # Iterate through each file
    ForEach ($File in $Files)
    {
        # Get file versions
        $Versions = Get-PnPProperty -ClientObject $File -Property Versions
        Write-host -f White "`tScanning File:" $File.Name  

        If ($Versions.Count -gt 1) # Check if there's more than 1 version 
        {
            # Delete all versions except the latest one
            $Versions | Sort-Object -Property Created -Descending | Select-Object -Skip 1 | ForEach-Object {
                $_.DeleteObject()
            }
            Invoke-PnPQuery
            Write-Host -f Green "`t`tPrevious Versions of the File Deleted except the latest:" $File.Name  
        }
    }

    # Get sub-folders from the folder - Exclude "Forms" and hidden folders 
    $SubFolders = Get-PnPFolderItem -FolderSiteRelativeUrl $FolderSiteRelativeURL -ItemType Folder | Where {($_.Name -ne "Forms") -and (-Not($_.Name.StartsWith("_")))}  
    Foreach ($SubFolder in $SubFolders)
    {
        # Call the function recursively
        Cleanup-Versions -Folder $SubFolder
    }
}

# Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive
$Web = Get-PnPWeb

# Get the root folder of the library
$RootFolder = Get-PnPList -Identity $LibraryName -Includes RootFolder | Select -ExpandProperty RootFolder

# Call the function with the root folder of the library
Cleanup-Versions -Folder $RootFolder

Was mir noch nicht klar ist der $LibraryName. Wo wird der hergenommen?

Beim Ausfuehren des Scriptes kommt folgende Fehlermeldung:


Cleanup-Versions : Die Argumenttransformation für den Parameter "Folder" kann nicht verarbeitet werden. Der Wert   
"Microsoft.SharePoint.Client.Folder" vom Typ "Microsoft.SharePoint.Client.Folder" kann nicht in den Typ   
"Microsoft.SharePoint.Client.Folder" konvertiert werden.  
In Zeile:51 Zeichen:26
+ Cleanup-Versions -Folder $RootFolder
+                          ~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Cleanup-Versions], ParameterBindingArgumentTransformationException
    + FullyQualifiedErrorId : ParameterArgumentTransformationError,Cleanup-Versions
Vielen Dank fuers lesen und einen schoenen Nachmittag.

Gruss

Klaus

Content-Key: 12916382916

Url: https://administrator.de/contentid/12916382916

Printed on: April 27, 2024 at 22:04 o'clock

Member: Fabian82
Solution Fabian82 Oct 19, 2023 at 12:44:28 (UTC)
Goto Top
Ich hatte neulich ein ähnliches Script um OneDrive Business aufzuräumen ... find es aber gerade nicht.

Die Library ist einfach der Pfad zur Dateilibrary:

2023-10-19_14-41-23

In diesem Beispiel also "Shared Documents".
Damit sollte dein Script dann klappen.
Member: Starmanager
Starmanager Oct 19, 2023 at 12:56:00 (UTC)
Goto Top
Vielen Dank fuer deine Info. Das funktioniert leider nicht. Wobei ich dazu sagen muss das ist ein Kanal aus einem Teams. Sollte aber trotzdem funktionieren, oder?
Member: Fabian82
Solution Fabian82 Oct 19, 2023 at 13:02:59 (UTC)
Goto Top
Müsste klappen, hab dein Script gerade mal auf mein Test Team losgelassen:

Cleanup-Versions -Folder $RootFolder
Processing Folder: /sites/ITTestTeam/Shared Documents
Processing Folder: /sites/ITTestTeam/Shared Documents/Another channel
Processing Folder: /sites/ITTestTeam/Shared Documents/archive test
Processing Folder: /sites/ITTestTeam/Shared Documents/archive test/More Files

"Shared Documents" ist die Library und "Another channel" ist z.b. auch ein Teams Channel.
Member: Starmanager
Starmanager Oct 19, 2023 at 13:28:47 (UTC)
Goto Top
Es liegt wohl an meiner Powershell. Das muss ich erst mal gerade ziehen. Vielen Dank fuer deine Unterstuetzung.
Member: Starmanager
Starmanager Oct 20, 2023 at 07:20:37 (UTC)
Goto Top
Eine kleine Code Aenderung Zeile 11 und das Script rauscht durch,

$FolderSiteRelativeURL = $Folder.ServerRelativeUrl.Replace($Folder.Context.web.ServerRelativeURL,[string]::Empty)

Muss aber in der Powershell 7.x gestartet werden.
Member: jantera
jantera Jan 23, 2024 at 08:34:08 (UTC)
Goto Top
Moin erstmal vielen Dank für das Skript.
Eine Sache ist mir noch aufgefallen und zwar fängt der Index der Versionen offensichtlich bei 0 an.
D.h. wenn ich nur damit wirklich nur die aktuellste Version überbleibt musste ich Zeile 23 u 26 wie folgend anpassen

If ($Versions.Count -gt 0) # Check if there's more than 1 version   


$Versions | Sort-Object -Property Created -Descending | Select-Object -Skip 0 | ForEach-Object {