Jump to content

Powershell Temp Skript , Formatieren und filtern


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Servus,
ich würde gerne ein Temp Skript nutzen um einen Firmeninternen Ordner alle 30 tage zu bereinigen

Skript löscht die Daten und schreibt eine .txt mit dem namen der gelöschten Dateien.
Ich würde es gerne erweitern um den Pfad in dem er gelöscht hat und das datum der löschung.

Desweiteren würde ich das ganze gerne ein wenig schöner aussehen lassen, erstmal eine csv draus machen, und dann auch mit spalten arbeiten.
Spalte 1 , Löschdatum
Spalte 2, Pfad
Spalte 3 ,Name

 

 
#### TEMP ORDNER BEREINIGEN ÄLTER 30 TAGE samt Info ####
########################################################
 
### Vorgabe:
### Alle Dateien aus TEMP löschen, die älter als 30 Tage sind. Das Alter entsteht durch die letzte Bearbeitung
### Danach sollen alle leeren Ordner ebenfalls gelöscht werden.
 
### Variablen ###
$now = Get-Date
$days = -30 #letzte x Tage
$diff = {$_.LastAccessTime -le $now.AddDays($days) -and -not ($_.PSIsContainer)}
$path = "\\netclient273\d$\Temp"
 
### Vor Archivierung bestehende alte Daten where $diff einlesen ###
$datas = gci $path -recurse -force | Where $diff
 
### Daten älter als x löschen ###
Remove-Item $datas.FullName -Force -ErrorAction SilentlyContinue
 
### Hinweis auf Archiv Ordner für alle alten Daten ###
foreach ($data in $datas)
{
 
    ### Checken, ob die Dateien entfernt wurden ###
    $testifdata = Test-Path $data.FullName
 
    ### Wenn Dateien entfernt ($false), dann in Datei schreiben dass sie gelöscht wurden ###                                               
    if ($testifdata -eq $false) 
        {
 
        ### neue Variablen ###
        $actualpath  = $data.DirectoryName
        
        
        ### checken ob Übersicht über gelöschte Dateien bereits besteht, wenn nicht anlegen ###
        $actualpathtest = Test-Path -Path "$actualpath\Gelöschte Dateien.csv"
if ($actualpathtest -eq $False)
            {
            echo "Gelöschte Dateien:" > "$actualpath\Gelöschte Dateien.csv"
            }
        
        ### Name der Datei in 'Gelöschte Dateien' schreiben ### 
        $deletedatacontent = "$data,$acutalpath,$now"
        Add-Content "$actualpath\Gelöschte Dateien.csv" -Value $deletedatacontent
}
 
 
### Danach leere Ordner löschen ###
$folders = Get-ChildItem $path  -Force -Recurse -Directory
 
foreach ($folder in $folders)
{
    $directoryInfo = Get-ChildItem $folder.FullName -Force | Measure-Object
    If ($directoryInfo.count -eq 0)
        { 
        $folderpath = $folder.FullName
        Remove-Item $folderpath -Force
        }
}
}


hatte testweise mal eine csv angelegt , war vorher alles txt.
Kennt sich da jemand mit aus? und kann mir helfen :) 

Interessant wäre auch das verhalten des Last Access Attributs, hat jemand damit Erfahrungen geamcht ?
http://www.mcseboard.de/topic/211469-temp-ordner-bereinigung-via-last-access-time-und-ps/

 
Link zu diesem Kommentar

Hallo,

 

ich fände es richtig supi, wenn Du bitte beim nächsten mal den Code auch als Code formatierst. Dann lässt er sich leichter lesen und verstehen und lange Zeilen werden im Zweifelsfall auch nicht umgebrochen.   ;)

 

Deine Aufgabe würde ich so anfangen:

$Path = '\\netclient273\d$\Temp'
$Age = -30

$FileList = New-Object System.Collections.Generic.List[object]
Get-ChildItem -Path $Path -File -Recurse -Force -ErrorAction SilentlyContinue  | 
    Where-Object {$_.LastAccessTime -le (Get-Date).AddDays($Age)} |
        ForEach-Object {
            $newobj = [PSCustomObject]@{
                Date = (Get-Date).Date
                Name = $_.BaseName
                Path = $_.DirectoryName
                LastAccessTime = $_.LastAccessTime
                Length = $_.Length
            }
            $FileList.Add($newobj)
            #Remove-Item -Path $_.FullName -Force -ErrorAction SilentlyContinue
        }

Die auskommentierte Zeile solltest Du dann natürlich noch ent-auskommentieren ...   ;)

 

Jetzt hast Du also den Ordner schon mal bereinigt und kannst dann mit den gesammelten Daten weiter verfahren, wie Du es gerne möchtest. Z.B.:

$FileList | Format-Table -AutoSize

um einfach schon mal zu gucken... oder ... 

$FileList | Export-Csv -Path 'Pfad zu Deiner Lieblings-CSV-Datei' -Delimiter ';' -Encoding UTF8 -NoTypeInformation -Append

 .... oder, oder, oder ... 

bearbeitet von BOfH_666
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...