Zum Inhalt wechseln


Foto

Powershell Temp Skript , Formatieren und filtern


  • Bitte melde dich an um zu Antworten
Eine Antwort in diesem Thema

#1 Foley60528

Foley60528

    Newbie

  • 12 Beiträge

 

Geschrieben 13. Oktober 2017 - 12:00

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...ss-time-und-ps/

 


#2 BOfH_666

BOfH_666

    Junior Member

  • 144 Beiträge

 

Geschrieben 13. Oktober 2017 - 13:18

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, 13. Oktober 2017 - 13:20.

live long and prosper!

PS:> (79,108,97,102|%{[char]$_})-join''