none
Powershell remove-item RRS feed

  • Frage

  • Hallo zusammen.

    Wie kann man in Powershell folgende Abfrage (mit Nein) automatisieren?

    Mit folgenden Befehl suche ich nach leeren Ordnern die ein gewisses Alter haben.

    $zuLoeschendeOrdner = Get-ChildItem -Path $Ordner -Recurse -Force | Where-Object { $_.PSIsContainer -and $_.CreationTime -lt $Alter -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | select Fullname
    und lösche diese anschließend
    if ($zuLoeschendeOrdner -eq $null) {
        "Keine Ordner gefunden, die älter sind als '$Alter'" | Out-File $Log -Append
        } else {
            $zuLoeschendeOrdner | Out-File $Log -Append
            foreach ($Element in $zuLoeschendeOrdner)
                {
                    remove-item $Element.fullname -Confirm:$false 
                }
            }

    Jedoch erhalte ich obige Abfrage (siehe Bild). Wenn ich bei "remove-Item" den Parameter -recursive hinzufüge, wird der Ordner gelöscht. Jedoch benötige ich genau das Gegenteil.

    P.S. Wie kann ich direkt bei remove-item den Output in die Logdatei schreiben?

    Bisher lass ich die zu löschende Ordner vor dem löschen in die Logdatei schreiben, da "remove-item $Element.fullname -Recurse -Confirm:$false  | Out-File $Log -Append" leider nicht funktioniert!?


    Mittwoch, 24. Februar 2016 15:42

Antworten

  • Hallo Thomas,

    ich bin mir nicht sicher ob ich dich richtig verstehe :Möchtest du die Abfrage unterdrücken?

     if ($zuLoeschendeOrdner -eq $null) {
        "Keine Ordner gefunden, die älter sind als '$Alter'" | Out-File $Log -Append
        } else {
            $zuLoeschendeOrdner | Out-File $Log -Append
            foreach ($Element in $zuLoeschendeOrdner)
                {
                    remove-item $Element.fullname -Recurse -Force 
                }
            }

    Du kannst es mit dem folgenden Befehl auch testen

     if ($zuLoeschendeOrdner -eq $null) {
        "Keine Ordner gefunden, die älter sind als '$Alter'" | Out-File $Log -Append
        } else {
            $zuLoeschendeOrdner | Out-File $Log -Append
            foreach ($Element in $zuLoeschendeOrdner)
                {
                    remove-item $Element.fullname -Recurse -Force -WhatIf
                }
            }


    Gruß Toni! Wenn Dir meine Antwort hilft, markiere sie bitte als Antwort! Vielen Dank!


    • Bearbeitet tonibert Mittwoch, 24. Februar 2016 23:39
    • Als Antwort vorgeschlagen 32456789765432 Donnerstag, 25. Februar 2016 07:38
    • Als Antwort markiert Thomas Hesse Freitag, 26. Februar 2016 14:41
    Mittwoch, 24. Februar 2016 23:38

Alle Antworten

  • Hallo Thomas,

    ich bin mir nicht sicher ob ich dich richtig verstehe :Möchtest du die Abfrage unterdrücken?

     if ($zuLoeschendeOrdner -eq $null) {
        "Keine Ordner gefunden, die älter sind als '$Alter'" | Out-File $Log -Append
        } else {
            $zuLoeschendeOrdner | Out-File $Log -Append
            foreach ($Element in $zuLoeschendeOrdner)
                {
                    remove-item $Element.fullname -Recurse -Force 
                }
            }

    Du kannst es mit dem folgenden Befehl auch testen

     if ($zuLoeschendeOrdner -eq $null) {
        "Keine Ordner gefunden, die älter sind als '$Alter'" | Out-File $Log -Append
        } else {
            $zuLoeschendeOrdner | Out-File $Log -Append
            foreach ($Element in $zuLoeschendeOrdner)
                {
                    remove-item $Element.fullname -Recurse -Force -WhatIf
                }
            }


    Gruß Toni! Wenn Dir meine Antwort hilft, markiere sie bitte als Antwort! Vielen Dank!


    • Bearbeitet tonibert Mittwoch, 24. Februar 2016 23:39
    • Als Antwort vorgeschlagen 32456789765432 Donnerstag, 25. Februar 2016 07:38
    • Als Antwort markiert Thomas Hesse Freitag, 26. Februar 2016 14:41
    Mittwoch, 24. Februar 2016 23:38
  • Hallo Toni.

    Der obige Testfall wurde von einem Kollegen durchgeführt, welcher diesen nicht mehr reproduzieren kann (vllt. hatte er auch die falsche Skriptversion verwendet...). Somit kann ich leider nicht sagen ob deine Antwort (in Gänze) weiterhilft.Auf jeden Fall hilft Sie mir weiter, da "-Confirm:$false" gar nicht das bewirkt was ich wollte. ;-)

    Ja, ich möchte die Abfrage unterdrücken, aber verneint.

    Ich vermute das es funktioniert. Da in der Get-Child Abfrage ja extra nach leeren Verzeihnissen gefiltert wird.

    $zuLoeschendeOrdner = Get-ChildItem -Path $Ordner -Recurse -Force | Where-Object { $_.PSIsContainer -and $_.CreationTime -lt $Alter -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | select Fullname


    Freitag, 26. Februar 2016 14:39