Verwenden Sie PowerShell, um Dateien zu erstellen, zu lesen, zu aktualisieren und zu löschen? Wenn ja, haben Sie wahrscheinlich Fehler erlebt, wenn die Zieldateien nicht existieren oder bereits vorhanden sind. Glücklicherweise gibt es in PowerShell Möglichkeiten zu überprüfen, ob eine Datei existiert, bevor Sie etwas damit machen.
Zum Beispiel ist es besser, Ihren Code nicht sofort die Datei erstellen zu lassen, sondern zu überprüfen, ob die Datei bereits vorhanden ist. Wie im untenstehenden Screenshot gezeigt, können Sie besseren Code schreiben und klare Ausgaben erzielen.

In diesem Artikel erfahren Sie verschiedene Möglichkeiten, wie Sie PowerShell verwenden können, um zu überprüfen, ob eine Datei vorhanden ist. Sie lernen auch, wie Sie jeden dieser Wege nutzen können, um besseren Code und Ergebnisse mit Fehlerbehandlungslogik zu erzielen.
Voraussetzungen
Reduzieren Sie Anrufe beim Service Desk und aktualisieren Sie Cache-Anmeldeinformationen für Remote-Benutzer auch außerhalb des VPN mit einer Self-Service-Passwortzurücksetzungslösung. Erhalten Sie eine Demo von Specops uReset!
Dieser Artikel ist ein Anleitung, aus der Sie anhand verschiedener Beispiele lernen werden. Und um den Beispielen zu folgen, benötigen Sie Folgendes:
- Code-Editor. Die empfohlenen sind Visual Studio Code und Atom, die plattformübergreifend funktionieren. Sie können auch Windows PowerShell ISE verwenden, wenn Sie an einem Windows-Computer arbeiten.
- Windows PowerShell 5.1 (Desktop) oder PowerShell 7.1 (Core). Die Befehle und Skripts in diesem Artikel gelten für beide PowerShell-Editionen. Egal, ob Sie Windows, Linux oder macOS verwenden, solange Sie PowerShell installiert haben, sind Sie in Ordnung.
Verwandt: So laden Sie PowerShell 7 auf Windows, Linux und macOS herunter und installieren es
Mit PowerShell überprüfen, ob eine Datei vorhanden ist.
In diesem Artikel werden drei Methoden erläutert, wie Sie PowerShell verwenden können, um zu überprüfen, ob eine Datei vorhanden ist. Die Verwendung dieser drei Methoden unterscheidet sich in der Anwendung, aber das Konzept und das Endziel sind dasselbe. Diese drei Möglichkeiten sind:
Test-Path
-Cmdlet.Get-Item
– undGet-ChildItem
-Cmdlet.System.IO.File
-Klasse.
Es wird Beispiele und Demos für jede dieser drei Methoden geben, einschließlich der Verwendung mit Fehlerbehandlung.
Verwendung von Test-Path
Der erste Weg ist das Test-Path
-Cmdlet, das speziell entwickelt wurde, um festzustellen, ob ein Pfad oder eine Datei vorhanden ist. Wenn Sie dieses Cmdlet verwenden, um zu überprüfen, ob eine Datei vorhanden ist, lautet das Ergebnis true oder false. Das Ergebnis gibt an, ob die Datei vorhanden ist oder nicht.
Unten finden Sie die grundlegende Syntax, um das Test-Path
-Cmdlet zur Überprüfung einer Datei zu verwenden.
Zum Beispiel, wenn Sie überprüfen müssen, ob eine Datei mit dem Namen C:\temp\important_file.txt existiert, verwenden Sie den folgenden Code. Beachten Sie, dass der Teil -PathType Leaf
dem Cmdlet mitteilt, explizit nach einer Datei und nicht nach einem Verzeichnis zu suchen.
Wenn Sie den obigen Befehl in PowerShell ausführen, gibt das Ergebnis True zurück, wenn die Datei existiert. Andernfalls wäre das Ergebnis False, wie im Screenshot unten zu sehen ist.

Verwandt: So verwenden Sie das PowerShell Test-Path Cmdlet
Beispiel: Erstellen einer Datei, wenn die Datei nicht vorhanden ist
Dieses Beispiel ist ein typischer Anwendungsfall zum Erstellen von Dateien an einem bestimmten Speicherort. Um den Fehler „Datei existiert bereits“ zu vermeiden, überprüft das Skript, ob die Datei bereits vorhanden ist, bevor es versucht, sie zu erstellen. Wenn die Datei existiert, zeigt das Skript eine Meldung an und versucht nicht, die Datei erneut zu erstellen.
Kopieren Sie den folgenden Code und speichern Sie ihn in einer Datei namens Create-NewFile.ps1. Ändern Sie den Wert der Variablen $path
, falls Sie den Ausgabespeicherort der Datei ändern möchten. Speichern Sie das Skript und führen Sie es in PowerShell aus, um es zu testen.
Der Screenshot unten zeigt die beiden verschiedenen Ausgaben. Die erste ist, wenn das Skript ausgeführt wird, während die Datei nicht existiert. Die zweite ist nach dem Erstellen der Datei, wenn sie bereits existiert.

Verwandte: Zurück zu den Grundlagen: Wie man ein PowerShell-Skript ausführt
Verwendung von Get-Item und Get-ChildItem
Der Zweck des Cmdlets „Get-Item“ besteht darin, das Element an einem angegebenen Speicherort abzurufen. Im Vergleich dazu dient das Cmdlet „Get-ChildItem“ dazu, die Elemente und Unterlemente an einem oder mehreren angegebenen Speicherorten abzurufen. Die Funktionalität dieser beiden Cmdlets besteht nicht explizit darin, zu überprüfen, ob Dateien existieren.
Was passiert, wenn Sie „Get-Item“ oder „Get-ChildItem“ verwenden, um ein Element abzurufen, das nicht existiert? Sie erhalten einen Fehler für jede fehlende Datei. Nehmen Sie die folgenden Befehle als Beispiel.
Angenommen, die Datei „c:\temp\important_file.txt“ existiert nicht. Jeder der obigen Befehle gibt einen Fehler zurück. Wie Sie aus dem folgenden Beispiel sehen können, ist die Fehlermeldung für beide Befehle dieselbe.

Beispiel: Archivieren der vorhandenen Datei und Erstellen einer neuen Datei
In diesem Beispiel verwendet das Skript die Cmdlets „Get-Item“ und „Test-Path“. Die Logik dieses Skripts besteht darin, folgende Aktionen durchzuführen:
- Testen Sie, ob der Archivordner mit
Test-Path
existiert.- Wenn der Archivordner nicht existiert, erstellt das Skript einen neuen Archivordner in diesem Format –
jjjj-MMM-tt_hh-mm-ss
. - Dann verschiebt das Skript die alte Datei in den Archivordner.
- Wenn der Archivordner nicht existiert, erstellt das Skript einen neuen Archivordner in diesem Format –
- Überprüfen Sie, ob die Datei bereits existiert, mit
Get-Item
.- Wenn die Datei existiert, verschiebt das Skript sie zuerst in den Archivordner. Dann erstellt das Skript die neue Datei am ursprünglichen Speicherort.
- Wenn die Datei nicht existiert, erstellt das Skript die neue Datei.
Kopieren Sie den folgenden Code und speichern Sie ihn als Create-NewFileAfterArchive.ps1. Nachdem Sie das Skript gespeichert haben, führen Sie es in PowerShell aus und überprüfen Sie die Ergebnisse.
Hinweis: Der Parameter
-ErrorAction Ignore
unterdrückt den Fehler (wird nicht in der Konsole angezeigt) und zeichnet den Fehler auch nicht in der automatischen Variable$error
auf.
In der untenstehenden Abbildung hat der erste Skriptlauf die Datei c:\temp\important_file.txt erstellt. Die folgenden Skriptausführungen haben jedes Mal einen neuen Archivordner erstellt, die vorhandene Datei in den Archivordner verschoben und dann eine neue Datei in c:\temp\important_file.txt erstellt.

Verwendung der [System.IO.File]::Exists() .NET-Methode
Die letzte Methode, die Sie in diesem Artikel lernen werden, ist die System.IO.File .NET-Klasse, insbesondere die Exists()
-Methode. Eine der Stärken von PowerShell ist die Möglichkeit, .NET-Klassen und -Methoden zu importieren und zu verwenden.
Zum Beispiel, um die Exists()
-Methode in PowerShell zu verwenden, um zu überprüfen, ob eine Datei existiert, verwenden Sie den folgenden Code.
Die obige Methode liefert ein boolesches Ergebnis – true oder false. Wenn das Ergebnis true zurückgibt, bedeutet dies, dass die Zieldatei existiert. Andernfalls wird das Ergebnis false zurückgegeben, wenn die Zieldatei nicht existiert.
Im folgenden Beispielcode wird überprüft, ob die Datei c:\temp\important_file.txt existiert.
Wie Sie aus dem unten stehenden Ergebnis sehen können, liefert das Ergebnis true und bestätigt somit, dass die Datei existiert.

Mit dieser .NET-Methode können Sie auch sogenannte ternäre Operationen verwenden, wie im folgenden Beispiel. Anstatt die standardmäßigen true- oder false-Ergebnisse anzuzeigen, können Sie das Ergebnis mit einer kürzeren Implementierung anpassen. Beachten Sie jedoch, dass der ternäre Operator in diesem Beispiel nur für PowerShell 7+ gilt.
Beispiel: Aktualisierung des Dateiinhalts, falls die Datei existiert
In diesem Beispielskript wird der Textdatei ein neuer GUID-Wert angehängt. Die Aktualisierung des Inhalts erfolgt jedoch nur, wenn die Datei existiert. Andernfalls wird eine Meldung angezeigt und nichts weiter ausgeführt.
Kopieren Sie das folgende Skript und speichern Sie es als Update-FileContents.ps1. Ändern Sie bei Bedarf den Dateipfadwert der Variable $file
. Führen Sie dann das Skript in PowerShell aus, um es zu testen.
Sie können im folgenden Screenshot sehen, dass das Skript die Datei bei jedem Durchlauf aktualisiert hat. Das Update erfolgte, weil die Methode [System.IO.File]::Exists()
bestätigt hat, dass die Datei c:\temp\important_file.txt vorhanden ist.
Am Ende bestätigt das Ausführen des Befehls gc c:\temp\important_file.txt
zum Lesen des Dateiinhalts, dass das Skript die Datei mit den GUID-Werten aktualisiert hat.

Verwandt: Verwendung von PowerShell-Datentypbeschleunigern zur Beschleunigung des Codierens
Zusammenfassung
Reduzieren Sie Anrufe beim Service Desk und aktualisieren Sie Cache-Anmeldeinformationen für Remote-Benutzer, auch außerhalb des VPN, mit einer Self-Service-Passwortzurücksetzungslösung. Erhalten Sie eine Demo von Specops uReset!
In diesem Artikel haben Sie gelernt, dass es mehr als eine Möglichkeit gibt, PowerShell zu verwenden, um zu überprüfen, ob eine Datei vorhanden ist. Es ist eine gute Praxis, das Vorhandensein einer Datei zu überprüfen, bevor Änderungen an der Datei vorgenommen werden.
Du hast gelernt, wie man die Cmdlets Get-Item
, Get-ChildItem
und Test-Path
verwendet. Sowie die Methode [System.IO.File]::Exists() .NET
. Die Beispiele haben dir gezeigt, wie man Techniken anwendet und sie mit Fehlerbehandlungslogik kombiniert.
Hör auf, diese Fehlermeldungen zu ertragen. Überwinde sie, indem du Code hinzufügst, um zu überprüfen, ob eine Datei existiert, bevor irgendwelche dateibezogenen Operationen durchgeführt werden. Die hier gelernten Techniken decken nur die Grundlagen ab, und es liegt nun an dir, sie zu verbessern.
Source:
https://adamtheautomator.com/powershell-check-if-file-exists/