Magic Quadrant™ für Privileged Access Management 2025: Netwrix zum vierten Jahr in Folge anerkannt. Laden Sie den Bericht herunter.

Plattform
Ressourcen­zentrumBlog
Powershell Delete File If Exists

Powershell Delete File If Exists

Oct 7, 2024

Kurzübersicht des Remove-Item-Cmdlets

Das Verwalten von Dateien und Verzeichnissen ist eine gängige Aufgabe in der Informatik, insbesondere in der Windows PowerShell-Umgebung. Das Remove-Item in PowerShell ist ein Schlüssel-Cmdlet zum Löschen von Dateien und Verzeichnissen sowie anderen Arten von Elementen in PowerShell. Remove-Item kann für lokale Dateisysteme sowie andere PowerShell-Provider wie die Registry, den Zertifikatsspeicher und Umgebungsvariablen verwendet werden. Remove-Item kann auch Eingaben von anderen Cmdlets über die Pipeline annehmen, was dynamischere Operationen und die Automatisierung von Dateiverwaltungsaufgaben ermöglicht. Es ist wichtig zu beachten, dass standardmäßig mit Remove-Item gelöschte Elemente dauerhaft aus dem System entfernt und nicht in den Papierkorb verschoben werden. Es ist wichtig, sich über die Aktionen beim Verwenden dieses Cmdlets sicher zu sein.

Bedeutung und häufige Anwendungsfälle

Das Remove-Item Cmdlet in PowerShell ist wichtig, um Systeme organisiert zu halten und sicherzustellen, dass sie reibungslos laufen. Es ist entscheidend für ein effektives Directory Management, indem es Benutzern ermöglicht, unnötige Dateien zu entfernen und Speicherplatz freizugeben. In der Skripterstellung und Automatisierung hilft es, Arbeitsabläufe zu straffen, indem es das Entfernen von veralteten oder temporären Dateien ohne manuelle Eingriffe ermöglicht. Das PowerShell Remove-Item Cmdlet ist nützlich für regelmäßige Wartungsaufgaben, wie das Aufräumen von Protokolldateien oder temporären Ordnern, die sich im Laufe der Zeit ansammeln.

Häufige Anwendungsfälle

Im Folgenden finden Sie einige gängige Anwendungsfälle für den Einsatz des Remove-Item-Befehls:

  • Löschen von temporären Dateien: Regelmäßiges Entfernen temporärer Dateien zur Aufrechterhaltung der Systemleistung.
  • Bereinigung alter Backups: Automatisches Löschen alter Backup-Dateien, um Speicherplatz zu sparen.
  • Stapelverarbeitung zum Löschen: Entfernen mehrerer Dateien mit einer bestimmten Erweiterung.
  • Entfernen leerer Verzeichnisse: Aufräumen leerer Ordner in einer Verzeichnisstruktur.
  • Bereinigung von Registrierungsschlüsseln: Löschen spezifischer Registrierungsschlüssel, die nicht mehr benötigt werden.
  • Bereitstellungsskripte: In Bereitstellungsskripten werden alte Versionen von Anwendungen entfernt, bevor neue installiert werden.

Unterstützte Anbieter und Elementtypen

Der Remove-Item PowerShell-Befehl unterstützt eine Vielzahl von Providern und Elementtypen. In erster Linie wird er in Dateisystemen verwendet, um Dateien und Ordner zu löschen, aber seine Funktionalität geht über das reine Dateisystem hinaus. Er kann auch Registrierungsschlüssel und Einträge löschen. Dies ist nützlich, um Systemkonfigurationen zu bereinigen oder zu ändern. Obwohl es weniger häufig für diesen Zweck verwendet wird, kann Remove-Item auch mit anderen PowerShell-Providern arbeiten und ermöglicht das Löschen von Elementen wie Variablen und Aliassen.

Grundlegende Syntax

Die grundlegende Syntax für Remove-Item lautet wie folgt.

      Remove-Item [-Path] <string[]> [-Force] [-Recurse] [-LiteralPath <string[]>] [-Confirm] [-WhatIf] [-ErrorAction <ActionPreference>] [-WarningAction <ActionPreference>] [-InformationAction <ActionPreference>] [-InformationVariable <string>] [<CommonParameters>]
      

Unten finden Sie ein Beispiel für ein Cmdlet mit gängigen Parametern.

      Remove-Item -Path C:\Backups\Design.txt -Force -Recurse -WhatIf
      

Parameter des Remove-Item-Cmdlets

Folgende sind die am häufigsten verwendeten Parameter für das Remove-Item Cmdlet:

Parameter

Erklärung

-Path

Gibt den Pfad zu den Elementen an, die Sie entfernen möchten. Dieser Parameter akzeptiert Platzhalterzeichen, die Musterabgleich ermöglichen. Das Pfadelement kann entweder absolut oder relativ sein.

-LiteralPath

Ähnlich wie -Path, behandelt jedoch den Pfad genau wie angegeben, ohne Platzhalter zu interpretieren.

-Force

Dies ist ein Cmdlet zum Entfernen von Elementen, das verwendet wird, um einen Befehl zu erzwingen, der Elemente entfernt, die sonst nicht gelöscht werden können. Zum Beispiel kann dies versteckte oder schreibgeschützte Dateien oder Elemente mit untergeordneten Elementen, die nicht leer sind, umfassen. Verwenden Sie diesen Parameter mit Vorsicht, da dies zu Datenverlust führen kann.

-Include

Gibt nur die Elemente an, die dem angegebenen Muster oder Typ des zu entfernenden Elements entsprechen. Dies funktioniert in Verbindung mit dem -Path-Parameter, um Elemente innerhalb des Pfades herauszufiltern.

-Ausschließen

Gibt Elemente an, die nicht entfernt werden sollen. Dies wird verwendet, um bestimmte Elemente basierend auf dem bereitgestellten Muster von der Operation auszuschließen.

-Recurse

Wenn das zu entfernende Element ein Verzeichnis ist, stellt dieser Parameter sicher, dass auch alle untergeordneten Elemente entfernt werden. Ohne diesen Parameter wird der Befehl keine Verzeichnisse löschen, die nicht leer sind.

-WhatIf

Dies ist ein Sicherheitsparameter, der anzeigt, was passieren würde, wenn das Cmdlet ausgeführt würde, ohne die Löschung durchzuführen. Er ist nützlich, um zu überprüfen, was gelöscht wird, bevor man die Aktion durchführt.

-Bestätigen

Fordert Sie zur Bestätigung auf, bevor das Cmdlet ausgeführt wird. Dies kann eine nützliche Sicherheitsüberprüfung sein, um versehentliches Löschen wichtiger Elemente zu verhindern.

-Credential

Ermöglicht Ihnen die Angabe eines Benutzerkontos mit Berechtigung zur Durchführung der Löschung, falls notwendig.

-Stream

Dieser Parameter wird verwendet, um alternative Datenströme (ADS) aus Dateien und Ordnern zu löschen.

So finden und kopieren Sie vollständige Pfade mit dem Datei-Explorer

Sie können vollständige Pfade von Dateien und Ordnern mit dem Datei-Explorer in Windows finden. Dies kann nützlich sein, wenn Sie Dateien und Ordner in Anwendungen, Skripten oder in PowerShell-Cmdlets referenzieren müssen. Befolgen Sie die untenstehenden Schritte, um den Pfad von Dateien und Ordnern zu finden.

  1. Öffnen Sie den Datei-Explorer, navigieren Sie zu dem Ordner, der die Datei oder den Ordner enthält, für den Sie den vollständigen Pfad möchten.
  2. Sobald Sie sich im gewünschten Ordner befinden, klicken Sie auf die Adressleiste oben im Datei-Explorer. Dadurch wird der vollständige Pfad hervorgehoben.
  3. Klicken Sie mit der rechten Maustaste auf den hervorgehobenen Pfad und wählen Sie „Kopieren“ aus dem Kontextmenü, um den vollständigen Pfad in Ihre Zwischenablage zu kopieren.
  4. Wenn Sie den vollständigen Pfad einer bestimmten Datei benötigen, geben Sie den Dateinamen mit Erweiterung am Ende des Pfades in der Adressleiste ein, um ihn zu vervollständigen, z.B. „C:\Backup\Design.txt“.
Image

Löschen Sie grundlegende Dateien und Ordner über das Remove-Item Cmdlet

Wie man eine einzelne Datei löscht

Um eine einzelne Datei mit PowerShell über Remove-Item zu löschen, folgen Sie den unten aufgeführten Schritten.

  1. Öffnen Sie PowerShell,
  2. Geben Sie das Cmdlet „Remove-Item“ gefolgt vom Parameter „-Path“ und dem vollständigen Pfad der Datei ein, die Sie löschen möchten.

Das grundlegende Cmdlet wird wie folgt sein.

      Remove-Item -Path "C:\Backup\Report.txt"
      

So löschen Sie einen bestimmten Ordner

Um einen bestimmten Ordner zu löschen, folgen Sie dem untenstehenden Cmdlet.

Um einen Ordner namens „OldProjects“ im Verzeichnis „C:\Backups“ zu löschen, wäre der Befehl.

      Remove-Item -Path "C:\Backups\OldProjects"
      

Löschen Sie mehrere Dateien und Ordner

Wie man einen Ordner und seinen gesamten Inhalt löscht

Um einen Ordner und seinen gesamten Inhalt zu löschen, müssen Sie den „-Recurse“-Parameter verwenden, um sicherzustellen, dass der Ordner zusammen mit allen seinen Dateien und Unterordnern gelöscht wird. Ohne diesen Parameter wird das Cmdlet den Ordner nicht löschen, wenn er Dateien oder andere Ordner enthält. Sie können das untenstehende Beispiel-Cmdlet verwenden.

      Remove-Item -Path "C:\Backups\OldDocuments" -Recurse
      

So löschen Sie mehrere Dateien in einem Verzeichnis

Wenn Sie alle Dateien eines bestimmten Typs innerhalb eines Verzeichnisses löschen möchten, können Sie ein Platzhalterzeichen (*) mit der Dateierweiterung verwenden. Zum Beispiel, um alle „.txt“ Dateien in einem bestimmten Ordner zu löschen, können Sie das folgende Cmdlet verwenden.

      Remove-Item -Path "C:\Backups\OldDocuments\*.txt"
      

So löschen Sie Dateien verschiedener Typen

Um Dateien verschiedener Typen innerhalb eines Verzeichnisses zu löschen, können Sie mehrere „Remove-Item“-Befehle ausführen oder die Fähigkeit von PowerShell nutzen, ein Array von Zeichenketten für den „-Path“-Parameter zu akzeptieren. Allerdings wird das direkte Kombinieren mehrerer Platzhalter-Muster in einem Befehl im „-Path“-Parameter nicht unterstützt. Sie können dies bewältigen, indem Sie „Get-ChildItem“ verwenden und es mit Remove-Item verketten. Zum Beispiel, um „.txt“- und „.log“-Dateien in einem Verzeichnis zu löschen, verwenden Sie das untenstehende Beispiel-Cmdlet.

      Get-ChildItem -Path "C:\Backups\OldDocuments\*.*" -Include *.txt, *.log | Remove-Item
      

Wie man spezifische mehrere Dateien löscht

Um mehrere bestimmte Dateien zu löschen, können Sie mit dem PowerShell-Befehl zum Löschen von Dateien mehrere Pfade auflisten, die durch Kommas getrennt sind.

      Remove-Item -Path "C:\Backups\OldDocuments\Design.txt", "C:\Backups\OldBackups\Backup_20_09_2024.bak"
      

Wie man Wildcards verwendet, um mehrere Dateien zu löschen

Um Wildcards zum Löschen mehrerer Dateien zu verwenden, können Sie das Sternchen (*) Symbol in Ihrem Befehl verwenden. Das Sternchen dient als Platzhalterzeichen, das eine beliebige Anzahl von Zeichen in einem Dateinamen repräsentieren kann, wodurch Sie mehrere Dateien gleichzeitig anhand von Benennungsmustern ansprechen können. Unten finden Sie ein Beispiel.

Sie können Dateien mit PowerShell löschen, die mit einem bestimmten Namen beginnen oder ein spezifisches Muster enthalten. Zum Beispiel, um Dateien zu löschen, die mit „Report“ beginnen, unabhängig von ihrer Dateierweiterung.

      Remove-Item -Path "C:\Backups\OldDocuments\Report*"
      

Schließen Sie bestimmte Dateitypen ein und schließen Sie andere aus

Die Parameter -Include und -Exclude können sehr nützlich sein, wenn Sie das Remove-Item Cmdlet in PowerShell verwenden, um die Dateien und Ordner zu filtern, die Sie löschen möchten.

-Include Parameter

Dieser Parameter ermöglicht es Ihnen, Muster für Elemente anzugeben, die in den Vorgang einbezogen werden sollen. Er wird zusammen mit dem -Path Parameter verwendet.

Um alle .txt-Dateien in einem Ordner zu löschen und alle anderen Dateien auszuschließen, verwenden Sie das folgende Cmdlet.

      Remove-Item -Path "C:\Backup\*" -Include "*.txt"
      

-Exclude Parameter

Dieser Parameter ermöglicht es Ihnen, Muster für Elemente anzugeben, die von der Operation ausgeschlossen werden sollen.

Um alle Dateien in einem Ordner zu löschen, aber .txt-Dateien auszuschließen, verwenden Sie das untenstehende Cmdlet.

      Remove-Item -Path "C:\Backup\*" -Exclude "*.txt"
      

Löschen Sie schreibgeschützte und versteckte Dateien über Remote-Item

Um schreibgeschützte und versteckte Dateien zu löschen, müssen Sie den -Force Parameter verwenden, der es dem Cmdlet erlaubt, Einschränkungen zu überschreiben, die normalerweise das Löschen eines Elements verhindern würden, wie zum Beispiel schreibgeschützte oder versteckte Attribute. Sie können das untenstehende Beispiel-Cmdlet verwenden.

Wie man eine einzelne Datei löscht

Um eine einzelne Datei zu löschen, verwenden Sie die folgende Syntax für das Remove-item Cmdlet

      Remove-Item -Path "C:\Backups\Design.txt" -Force
      

Wie man mehrere schreibgeschützte oder versteckte Dateien in einem Verzeichnis mit Platzhaltern löscht

Verwenden Sie die folgende Syntax, um mehrere schreibgeschützte oder versteckte Dateien zu löschen:

      Remove-Item -Path "C:\Backups\*.txt" -Force
      

Sie können auch das Get-ChildItem-Cmdlet verwenden, um zunächst alle schreibgeschützten und versteckten Dateien in einem bestimmten Verzeichnis zu ermitteln und dann mit Remove-Item und dem -Force-Parameter zu löschen. Unten finden Sie einige Beispiele.

So löschen Sie alle schreibgeschützten Dateien

Verwenden Sie die folgende Syntax, um alle schreibgeschützten Dateien zu löschen.

      Get-ChildItem -Path "C:\Backups" -File -Attributes ReadOnly | Remove-Item -Force
      

So löschen Sie alle versteckten Dateien in einem Verzeichnis

Verwenden Sie die folgende Syntax, um alle versteckten Dateien zu löschen:

      Get-ChildItem -Path "C:\Backups" -File -Attributes Hidden | Remove-Item -Force
      

So löschen Sie sowohl schreibgeschützte als auch versteckte Dateien

      Get-ChildItem -Path "C:\Backups" -File -Attributes ReadOnly,Hidden | Remove-Item -Force
      

Verwenden von -Recurse zum Löschen von Dateien und Unterordnern

Um Dateien und Unterordner innerhalb eines bestimmten Verzeichnisses zu löschen, können Sie den Parameter -Recurse verwenden. Dieser Parameter entfernt das Element und alle seine Unterelemente rekursiv. Er ist besonders nützlich, wenn Sie ein Verzeichnis und all seine Inhalte, einschließlich aller verschachtelten Dateien und Unterverzeichnisse, leeren möchten. Unten finden Sie einige Beispiele.

Löschen Sie alle Dateien und Unterordner in einem Verzeichnis

      Remove-Item -Path "C:\Backups\*" -Recurse
      

Wenn einige der Elemente schreibgeschützt oder ausgeblendet sind, können Sie den -Force Parameter hinzufügen.

      Remove-Item -Path "C:\Backups\*" -Recurse -Force
      

Dateien mit Sonderzeichen löschen

Das Löschen von Dateien mit Sonderzeichen in ihren Namen kann manchmal schwierig sein, da Sonderzeichen von PowerShell unterschiedlich interpretiert werden könnten oder eine spezielle Behandlung erfordern. Unten finden Sie einige Beispiele.

Zitieren des Pfades

Wenn der Dateiname Leerzeichen oder Sonderzeichen wie (&, $, #, (), []) enthält, schließen Sie den Pfad in einfache Anführungszeichen ein. Dies ist der einfachste Weg, um sicherzustellen, dass PowerShell die gesamte Zeichenkette als Pfad behandelt. Die Verwendung einfacher Anführungszeichen stellt sicher, dass PowerShell das $ nicht als Variable expandiert.

      Remove-Item -Path 'C:\Backups\$Design(1).txt'
      

Platzhalter für das Abgleichen von Sonderzeichen

Wenn Sie Probleme haben, eine Datei direkt anzugeben, oder wenn sie einen komplexen Namen mit vielen Sonderzeichen hat, können Sie ein Platzhalterzeichen (*) verwenden, um die Datei zu finden, ohne den vollständigen Namen eingeben zu müssen. Zum Beispiel, wenn Sie eine Datei mit dem Namen „@#Name(1).txt“ haben, wird Ihr Cmdlet wie folgt aussehen.

      Remove-Item -Path "C:\Backups\*Name*.txt"
      

Entfernen Sie alternative Datenströme

Alternate Data Streams (ADS) ermöglichen es Dateien, mehr als einen Datenstrom zu enthalten. Diese Funktion ist spezifisch für NTFS-Dateisysteme und kann verwendet werden, um zusätzliche Informationen in einer Datei zu speichern, ohne deren primären Inhalt zu beeinflussen, was zum Verstecken von bösartigen Daten missbraucht werden könnte. Um einen alternativen Datenstrom aus einer Datei zu entfernen, müssen Sie den Pfad zur Datei angeben, einschließlich des Streamnamens. Die Syntax zur Angabe eines alternativen Datenstroms ist „Dateiname:Streamname“.

So identifizieren Sie Alternate Data Streams

Sie müssen identifizieren, welche alternativen Datenströme an eine Datei angehängt sind. Sie können das untenstehende Cmdlet mit dem -Stream-Parameter für diesen Zweck verwenden.

      Get-Item -Path "C:\Backups\Design.txt" -Stream *
      

So entfernen Sie einen alternativen Datenstrom

Sobald Sie den Namen des Streams kennen, den Sie entfernen möchten, können Sie „Remove-Item“ verwenden, um ihn zu löschen. Angenommen, die Datei „Design.txt“ hat einen alternativen Datenstrom namens „hiddenstream“, und Sie möchten diesen entfernen. Sie können das untenstehende Cmdlet einschließlich des -Stream Parameters verwenden, welches nur den Stream löscht, ohne die Datei zu entfernen.

      <Remove-Item -Path “C:\Backups\Design.txt" -Stream hiddenstream
      

Löschen Sie Dateien basierend auf bestimmten Bedingungen

Das Löschen von Dateien basierend auf bestimmten Bedingungen kann Ihnen helfen, das Aufräumen von Verzeichnissen zu verwalten und zu automatisieren. Bedingungen können auf einer Vielzahl von Dateiattributen basieren, wie Erstellungsdatum, Änderungsdatum, Größe, Namensmuster usw. Unten finden Sie einige Beispiel-Cmdlets.

Wie man Dateien löscht, die älter als ein bestimmtes Datum sind

Um Dateien zu löschen, die älter als ein bestimmtes Datum sind, können Sie das Cmdlet „Get-ChildItem“ verwenden, um alle Dateien im Zielverzeichnis aufzulisten, sie mit „Where-Object“ basierend auf ihrer letzten Schreibzeit zu filtern und dann „Remove-Item“ verwenden, um diese Dateien zu löschen.

      $DateLimit = (Get-Date).AddDays(-30)
Get-ChildItem -Path "C:\Backups\" -File | Where-Object { $_.LastWriteTime -lt $DateLimit } | Remove-Item
      

Dieser Befehl wird Dateien dauerhaft löschen. Es ist eine gute Praxis, den Befehl zunächst ohne „| Remove-Item“ auszuführen, um zu sehen, welche Dateien gelöscht würden.

      Get-ChildItem -Path "C:\Backups\" -File | Where-Object { $_.LastWriteTime -lt $DateLimit }
      

So löschen Sie Dateien, die größer als eine bestimmte Größe sind

Um Dateien, die größer als eine bestimmte Größe sind, zu löschen, können Sie das Get-ChildItem-Cmdlet nutzen, die Ergebnisse mit dem „Where-Object“-Cmdlet nach ihrer Größe filtern und sie dann mit Remove-Item löschen.

      $SizeLimit = 5MB
Get-ChildItem -Path "C:\Backups\" -File -Recurse | Where-Object { $_.Length -gt $SizeLimit } | Remove-Item
      

Es ist eine gute Praxis, zuerst den Befehl ohne „| Remove-Item“ auszuführen, um zu sehen, welche Dateien gelöscht würden.

      Get-ChildItem -Path "C:\Backups\" -File -Recurse | Where-Object { $_.Length -gt $SizeLimit }
      

So löschen Sie Dateien anhand von Attributen (schreibgeschützt, versteckt)

      Get-ChildItem -Path "C:\Backups\" -File -Attributes Hidden | Remove-Item -Force
      

Sie können Dateien anhand ihrer Attribute, wie schreibgeschützt oder versteckt, löschen, indem Sie die Kombination aus Get-ChildItem, Where-Object zur Filterung der Dateien nach ihren Attributen verwenden und dann mit Remove-Item löschen. Es ist wichtig zu beachten, dass der Versuch, schreibgeschützte Dateien zu löschen, zu einem Fehler führt, es sei denn, Sie verwenden den -Force Parameter.

      Get-ChildItem -Path "C:\Backups\" -File | Where-Object { $_.Attributes -match "ReadOnly" } | Remove-Item -Force
      

Sie können die Ergebnisse auch direkt filtern, indem Sie den -Attributes-Parameter in Get-ChildItem mit dem Wert als schreibgeschützt verwenden.

      Get-ChildItem -Path "C:\Backups\" -File -Attributes ReadOnly | Remove-Item -Force
      

Versteckte Dateien können auf ähnliche Weise entfernt werden.

      Get-ChildItem -Path "C:\Backups\" -File | Where-Object { $_.Attributes -match "Hidden" } | Remove-Item -Force
      

Alternativ können Sie durch Angabe des -Attributes-Parameters löschen.

So löschen Sie alle leeren Ordner in einem Verzeichnis

Das Get-ChildItem-Cmdlet kann verwendet werden, um die leeren Ordner zu finden und sie dann mit Remove-Item zu löschen.

      Get-ChildItem -Path "C:\Backups\" -Directory -Recurse | Where-Object { $_.GetFileSystemInfos().Count -eq 0 } | Remove-Item -Force
      

Um zu sehen, welche leeren Ordner gelöscht würden, bevor sie tatsächlich entfernt werden, ersetzen Sie Remove-Item -Force durch Select-Object FullName.

      Get-ChildItem -Path "C:\Backups\" -Directory -Recurse | Where-Object { $_.GetFileSystemInfos().Count -eq 0 } | Select-Object FullName
      

Best Practices und häufige Fallstricke

Das Remove-Item PowerShell-Cmdlet ist eine effektive Methode, um Dateien und Verzeichnisse zu löschen, aber wie jedes mächtige Werkzeug, erfordert es sorgfältigen Umgang, um unbeabsichtigte Folgen zu vermeiden. Unten finden Sie einige bewährte Methoden und häufige Fallstricke beim Verwenden des Dateien löschen Item-Pfads.

Best Practices beim Einsatz des Remove-Item Cmdlet

  • Bevor Sie einen Befehl ausführen, der wichtige Dateien oder Verzeichnisse löschen könnte, fügen Sie den Parameter -WhatIf hinzu. Dies wird den Befehl simulieren, ohne die Löschung tatsächlich durchzuführen, und Ihnen zeigen, was betroffen wäre.
  • Für eine zusätzliche Schutzebene, insbesondere beim Ausführen von Skripten oder Befehlen, die Elemente in großen Mengen löschen, verwenden Sie den -Confirm Parameter. PowerShell fordert Sie auf, jede Löschung zu bestätigen, um versehentlichen Datenverlust zu verhindern.
  • Um das Löschen der falschen Dateien oder Verzeichnisse zu vermeiden, geben Sie den vollständigen Pfad zu dem Element an, das Sie entfernen möchten. Dies hilft sicherzustellen, dass der Befehl nur die beabsichtigten Elemente betrifft.
  • Der -Recurse-Parameter ist äußerst nützlich, um Verzeichnisse und deren Inhalt zu löschen, kann aber auch zu Datenverlust führen, wenn er nicht vorsichtig verwendet wird. Überprüfen Sie immer, welche Elemente gelöscht werden, entweder indem Sie sie zuerst mit Get-ChildItem auflisten oder indem Sie -WhatIf zusammen mit Ihrem Remove-Item-Befehl verwenden.
  • Verwenden Sie -ErrorAction, um festzulegen, wie PowerShell auf Fehler beim Löschen reagieren soll. In Skripten sollten Sie Remove-Item-Befehle in try/catch-Blöcke einbetten, um Ausnahmen effektiver zu verwalten.
  • Bevor Sie einen Löschbefehl ausführen, der eine erhebliche Anzahl von Dateien oder kritische Daten betrifft, stellen Sie sicher, dass Sie aktuelle Backups haben.
  • Wenn Sie Skripte schreiben, die Remove-Item enthalten, dokumentieren Sie Ihren Code gründlich. Erklären Sie, warum Elemente gelöscht werden und welche speziellen Überlegungen Sie dabei angestellt haben.
  • Überprüfen und auditieren Sie regelmäßig Skripte und Befehle, die Löschungen durchführen, um sicherzustellen, dass sie weiterhin den aktuellen Anforderungen entsprechen und den besten Praktiken folgen.
  • Beim Erstellen von Skripten für Massenlöschungen, testen Sie zuerst in einer Nicht-Produktionsumgebung, um versehentlichen Datenverlust zu vermeiden.

Häufige Fallstricke

  • Während Platzhalter (*) es Ihnen ermöglichen, mehrere Dateien oder Verzeichnisse gleichzeitig zu adressieren, können sie auch das Risiko erhöhen, unbeabsichtigte Elemente zu löschen. Verwenden Sie sie vorsichtig und überprüfen Sie immer, welche Elemente betroffen sein werden.
  • Standardmäßig wird Remove-Item schreibgeschützte und versteckte Dateien nicht löschen, es sei denn, Sie verwenden den -Force Parameter.
  • Der Versuch, Dateien oder Verzeichnisse ohne ausreichende Berechtigungen zu löschen, kann zu Fehlern führen. Das Ausführen von PowerShell als Administrator kann einige dieser Probleme beheben.
  • NTFS-Dateisysteme unterstützen Funktionen wie alternative Datenströme, die beim Löschen übersehen werden können. Stellen Sie sicher, dass Sie den -Stream-Parameter einbeziehen, wo Sie vermuten, dass es alternative Ströme geben könnte.

Verwendung von -WhatIf und -Confirm für sicheres Löschen

Wenn es um die Verwendung von Remove-Item zum Löschen von Dateien oder Verzeichnissen geht, können die Parameter -WhatIf und -Confirm die Sicherheit Ihrer Operationen erheblich verbessern. Diese Parameter können helfen, versehentliche Löschungen zu verhindern, indem sie eine Vorschau der Aktion anzeigen oder um Bestätigung bitten, bevor sie fortfahren.

-WhatIf

Der -WhatIf-Parameter simuliert die Ausführung des Befehls, ohne tatsächlich Änderungen vorzunehmen.

      Remove-Item -Path "C:\Backups\Design.txt" -WhatIf
      
Image

-Bestätigen

Der -Confirm-Parameter fordert Sie auf, jede Löschung zu bestätigen, bevor sie durchgeführt wird.

      Remove-Item -Path "C:\Backups\Design.txt" -Confirm
      
Image

Umgang mit häufigen Fehlern (Zugriff verweigert, Datei nicht gefunden)

Sie könnten auf häufige Fehler wie „Zugriff verweigert“ oder „Datei nicht gefunden“ stoßen, wenn Sie das Remove-Item-Cmdlet verwenden.

Zugriff verweigert Fehler

Dieser Fehler tritt auf, wenn Ihnen die erforderlichen Berechtigungen in PowerShell fehlen, um eine Datei oder ein Verzeichnis zu löschen.

  • Der -Force-Parameter kann manchmal diesen Fehler überwinden, indem er das Löschen von schreibgeschützten Dateien erlaubt, aber er wird Sicherheitsberechtigungen nicht außer Kraft setzen.
  • Wenn -Force nicht funktioniert, müssen Sie möglicherweise die Datei- oder Verzeichnisberechtigungen manuell anpassen. Sie können Berechtigungen über die Datei- oder Ordner-Eigenschaften im Windows Explorer ändern oder PowerShell-Cmdlets wie „Set-Acl“ verwenden.
  • Das Ausführen Ihrer PowerShell-Sitzung mit erhöhten Berechtigungen (als Administrator) kann helfen, „Zugriff verweigert“-Fehler für Dateien zu umgehen, die höhere Privilegien zum Löschen erfordern.

Fehler: Datei nicht gefunden

Dieser Fehler tritt auf, wenn der in Remove-Item angegebene Pfad nicht existiert.

  • Zuerst stellen Sie sicher, dass der Pfad, den Sie zu löschen versuchen, tatsächlich existiert. Tippfehler oder falsche Pfadangaben sind häufige Ursachen für diesen Fehler.
  • Bevor Sie versuchen zu löschen, verwenden Sie „Test-Path“, um zu überprüfen, ob die Datei oder das Verzeichnis existiert. Dies kann helfen, den Fehler zu vermeiden.
      if (Test-Path "C:\Backups\Design.txt") {
    Remove-Item -Path "C:\ Backups\Design.txt"
} else {
    Write-Host "File not found."
}
      
Image
  • Sie können die Fehlermeldung unterdrücken, indem Sie „-ErrorAction SilentlyContinue“ verwenden, was in Skripten nützlich ist, bei denen eine fehlende Datei nicht als kritischer Fehler angesehen wird.
      Remove-Item -Path "C:\ Backups\Design.txt" -ErrorAction SilentlyContinue
      

Ausgewählte verwandte Inhalte:

Praxisnahe Szenarien

Bereinigung temporärer Dateien

Verwenden Sie das untenstehende Cmdlet, um Dateien im Verzeichnis „C:\Temp“ zu löschen.

      Get-ChildItem -Path C:\Temp\* -Recurse | Remove-Item -WhatIf
      

Da wir den -WhatIf-Parameter verwendet haben, wird dieses Cmdlet die Ausgabe wie unten anzeigen, entfernen Sie den -WhatIf und führen Sie das Cmdlet erneut aus, um alle Dateien im Temp-Verzeichnis zu löschen.

Image

Archivierung und Löschung alter Protokolle

Verschieben Sie „.log“-Dateien, die älter als 30 Tage sind, an einen anderen Ort und löschen Sie dann Logs, die älter als 90 Tage sind, aus dem Archiv.

      $sourcePath = "C:\Backups"
$archivePath = "C:\ArchivedLogs"
Get-ChildItem -Path $sourcePath\*.log -Recurse | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } | ForEach-Object {
Move-Item -Path $_.FullName -Destination $archivePath -WhatIf
}
      

Überprüfen Sie die Aktion mit „-WhatIf“, und entfernen Sie dann „-WhatIf“, um fortzufahren.

Das obige Skript wird alle Dateien aus dem „Backups“-Ordner in den „ArchivedLogs“-Ordner verschieben, die älter als 30 Tage sind. Jetzt können Sie alte Protokolle aus dem Archivordner löschen, die 90 Tage alt sind, indem Sie das untenstehende Cmdlet ausführen.

      Get-ChildItem -Path $archivePath\*.log -Recurse | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-90) } | Remove-Item -WhatIf
      

Bestätigen Sie die Ziele und führen Sie dann ohne „-WhatIf“ aus.

Fazit

Das Remove-Item Cmdlet ist dafür konzipiert, ein oder mehrere Elemente zu löschen, hauptsächlich Dateien und Verzeichnisse. Allerdings erstreckt sich seine Funktionalität über Dateien und Ordner hinaus, einschließlich dem Löschen von Registrierungsschlüsseln und Variablen. Einer der kritischsten Aspekte von Remove-Item ist die Sicherheit. Das Löschen von Dateien und Verzeichnissen kann irreversible Folgen haben, wenn es nicht sorgfältig gehandhabt wird. Remove-Item bietet Mechanismen, um sicherzustellen, dass solche Operationen sicher durchgeführt werden, indem die Parameter -WhatIf und -Confirm verwendet werden. Remove-Item kann in Skripte integriert werden, um routinemäßige Aufräumarbeiten zu automatisieren oder Dateisysteme effizienter zu verwalten, es kann verwendet werden, um periodisch temporäre Dateien zu entfernen oder Logdateien zu bereinigen, die nicht mehr benötigt werden. Die Möglichkeit, Wildcards und Filter zu verwenden, macht es besonders nützlich in Szenarien, in denen Sie Dateien oder Ordner basierend auf spezifischen Mustern oder Bedingungen löschen müssen.

Windows PowerShell-Skripting-Tutorial (PDF) für Anfänger

Erfahren Sie mehr

FAQ

Teilen auf

Erfahren Sie mehr

Über den Autor

Asset Not Found

Kevin Horvatin

Leitender Softwarearchitekt

Kevin Horvatin ist leitender Softwarearchitekt bei Netwrix und verantwortlich für Netwrix Privilege Secure. Als Softwareentwickler mit über 20 Jahren Erfahrung hat er seit ihrer Einführung mit PowerShell und C# gearbeitet.