none
Säubern von einem FTP-Server gebrauchten Verzeichnis RRS feed

  • Frage

  • Hallo zusammen

    Ich muss ein Skript schreiben, welches Verzeichnisse auf einem FTP-Server säubert. Dieses Skript wird lokal auf dem FTP-Server ausgeführt, also kann man die Verzeichnisse normal behandeln.

    Folgende Anforderungen:

    Alle leeren Verzeichnisse, welche älter als ein Jahr sind, sollen gelöscht werden.
    Jedoch sollen die übergeordneten Verzeichnisse bestehen bleiben (Gruppenverzeichnisse)
    Nur löschen, falls keine Unterverzeichnisse und keine Files.

    Szenario:

    Beispielpfad: C:\Gruppe1\Benutzer1\Projekt1

    Was hier gelöscht werden dürfte:
    C:\Gruppe1\Benutzer1\Projekt3
    C:\Gruppe1\Benutzer2\Projekt1

    mehr nicht!

    Probleme/zu beachten:

    - Nur Verzeichnis löschen, wenn kein Gruppenverzeichnis, älter als ein Jahr, keine Unterverzeichnisse und keine Files mehr vorhanden.

     

    Habe schon viel versucht jedoch nichts schlaues zustande gebracht...

    Ich hoffe ihr könnt mir ein bisschen helfen oder einen Denkanstoss geben.

    Vielen Dank im Vorraus und Unklahrheiten einfach fragen.

    Greetz Powerturtle

    Freitag, 2. Dezember 2011 10:28

Antworten

  • $groups = Get-ChildItem c:\ |?{$_.fullname.contains("gruppe")}
    foreach ($group in $groups){
    $benutzers = get-childitem $group.fullname
    	#
    	foreach($benutzer in $benutzers){
    	if ($(get-childitem $benutzer.fullname) -ne $null){
    	write-output "benutzer $($benutzer.fullname) not empty"
    	$projects = get-childitem $benutzer.fullname
    		foreach($project in $projects){
    		if ($(get-childitem $project.fullname) -ne $null){
    		write-output "project $($project.fullname) not empty"}
    		else {write-output "project $($project.fullname) empty"}
    		}
    	}
    	else {write-output "benutzer $($benutzer.fullname) empty"}
    	}
    }
    

    das wäre zum prüfen ob verzeichnis leer ist, wegen dem alter würde ich das zb so machen wenn es um das project veruzeichnis geht, das müsste man dann halt noch einbauen:

    $lastwritetime = $project.LastWriteTime
    $nowminusoneyear = $(get-date).AddYears(-1)
    if ($nowminusoneyear -le $project.LastWriteTime){
    write-output "folder is older then 1 year"}
    



    • Als Antwort markiert Powerturtle Donnerstag, 8. Dezember 2011 08:52
    Montag, 5. Dezember 2011 17:24

Alle Antworten

  • $groups = Get-ChildItem c:\ |?{$_.fullname.contains("gruppe")}
    foreach ($group in $groups){
    $benutzers = get-childitem $group.fullname
    	#
    	foreach($benutzer in $benutzers){
    	if ($(get-childitem $benutzer.fullname) -ne $null){
    	write-output "benutzer $($benutzer.fullname) not empty"
    	$projects = get-childitem $benutzer.fullname
    		foreach($project in $projects){
    		if ($(get-childitem $project.fullname) -ne $null){
    		write-output "project $($project.fullname) not empty"}
    		else {write-output "project $($project.fullname) empty"}
    		}
    	}
    	else {write-output "benutzer $($benutzer.fullname) empty"}
    	}
    }
    

    das wäre zum prüfen ob verzeichnis leer ist, wegen dem alter würde ich das zb so machen wenn es um das project veruzeichnis geht, das müsste man dann halt noch einbauen:

    $lastwritetime = $project.LastWriteTime
    $nowminusoneyear = $(get-date).AddYears(-1)
    if ($nowminusoneyear -le $project.LastWriteTime){
    write-output "folder is older then 1 year"}
    



    • Als Antwort markiert Powerturtle Donnerstag, 8. Dezember 2011 08:52
    Montag, 5. Dezember 2011 17:24
  • Vielen Dank habe mittlerweile schon vieles selber erarbeitet, aber das mit Child-Item in Child-Item ist die bessere Lösung.

    Habe mit -exclude gearbeitet, das heisst alle gruppenordnernamen excludet. Danach habe ich mir aber die Frage gestellt, was passiert wenn man Unterordner mit dem selben Namen hat :)

    Daher Vielen Dank für deine Hilfe :)

    Donnerstag, 8. Dezember 2011 07:36