5 Dinge, die du beim Arbeiten mit der Windows PowerShell und Dateien kennen solltest

Schnell und einfach Dateien mit der PowerShell verarbeiten

Überblick

Das Arbeiten mit Dateien in der Powershell ist eigentlich sehr einfach. Die Powershell kennt nämlich sämtliche gängigen Befehle wie z.B. dir oder ls. Allerdings beim Wechsel in andere Verzeichnisse muss man beachten, das es anstatt cd.. dann cd .. heißt. Also man darf das Leerzeichen nicht vergessen. Da die Powershell alles als Objekte auffasst, kann man die Größe einer Datei direkt abfragen. Die Powershell kennt weiterhin nicht nur das klassische Dateisystem, sondern man kann sich mit get-psdrive sämtliche momentanen Lokationen anzeigen lassen. Der Wechsel in andere Laufwerke erfolgt dabei wie gewohnt durch den Laufwerksbuchstaben gefolgt von einem Doppelpunkt. Wenn man in ein anderes Verzeichnis gewechselt hat, so kann man sich alle dort befindlichen Inhalte auflisten lassen. Es ist dabei egal ob man dir, ls oder get-childitem verwendet. Alle drei Befehle liefern die selbe Ausgabe. Powershell Konform ist natürlich das Cmdlet get-childitem.

Powershell Laufwerke

Beispiel: Zunächst wechseln wir in das HKLM Verzeichnis und lassen uns anschließend sämtliche Registry Werte von Windows Mail anzeigen.

cd HKLM:
cd SoftwareMicrosoft
Get-ItemProperty '.Windows Mail'

Die Werte in der Registry bekommt man nur zu sehen, wenn man das Cmdlet Get-ItemProperty verwendet. Das liegt daran, dass die Registry Werte eine Eigenschaft (Property) des Registry-Objekts sind, so wie Größe oder letztes Zugriffsdatum die Eigenschaft einer Datei sind.

Um das Arbeiten mit der Powershell etwas zu vereinfachen, kann man sich auch ein neues Laufwerk anlegen, welches auf einen bestimmten Pfad verweist.

New-PsDrive -name Workspace -psprovider FileSystem -root c:Workspace

Der Ordner Workspace muss natürlich im Laufwerk c: vorhanden sein. Abgesehen davon, muss man auch die dementsprechenden Rechte besitzen.

Auslesen, Ausgeben und Filtern von Dateien

Das Anzeigen, bzw. Ausgeben von Dateien haben wir mit Get-Childitem schon herausgefunden. Möchte man aber bestimmte Dateien ausschließen, so bietet der Parameter -exclude genau diese Möglichkeit.

Beispiel 1:

Auflisten aller Dateien im Verzeichnis c:\Workspace ohne *.tmp, und *.temp.

Get-childitem c:Workspace -Exclude *.tmp, *.temp

Beispiel 2:

Auflisten aller Dateien im Verzeichnis c:\Workspace ohne *.tmp und es sollen ausschließlich der Dateiname und die Dateilänge mit angegeben werden.

Get-childitem c:\Workspace -Exclude *.tmp | Select-Object name,length

Die Pipeline ist hier natürlich sehr hilfreich und nützlich. Wie man solche Befehlsketten mit der Pipe im allgemeinen Aufbau, könnt hier hier nachlesen.

Zum Artikel: Powershell Pipeline richtig verwenden

Objekteigenschaften mit Get-Member

Eine Übersicht über alle Objekteigenschaften und Funktionen erhält man mit dem Cmdlet Get-Member. Man übergibt einfach das Objekt mittels der Pipe (|) an Get-Member.

Beispiel 1: Welche Eigenschaften hat eine Datei?

Get-Childitem | Get-Member

Hier sehen wir wie viele verschiedene Eigenschaften eine Datei hat!

Beispiel 2:

Möchte man sich z. B. nur den letzten Zugriff ausgeben lassen, so benötigt man hierfür die Eigenschaft LastAccessTime.

Get-Childitem | Select-Object -Property LastAccessTime

Beispiel 3:

Eine tolles Cmdlet ist auch Group-Object. Hiermit kann man eine Liste von Objekten in Gruppen einteilen. Man kann sich z.B. alle Dienste in zwei Gruppen ausgeben lassen. Also die gestarteten und die gestoppten.

Get-Service | Group-Object status

Beispiel 4:

Viele weitere Informationen erhält man mit dem Cmdlet Measure-Object. Dieses Cmdlet ist sehr umfangreich. Am besten in der Hilfe nachsehen, welche Möglichkeiten hier geboten sind.  Hier ein kleines Beispiel. Dies Ausgabe ist selbsterklärend.

Get-Childitem | Measure-Object length -average -sum -maximum -minimum

Anlegen, Löschen und Verschieben von Dateien / Ordnern

Für das Löschen einer Datei oder eines Verzeichnisses bietet die Powershell das Cmdlet Remove-Item. Interessanter ist es jedoch, wenn man hier noch eine Bedingung anfügt. Z. B sollen alle Dateien gelöscht werden, welche größer als 2 MB sind.

Get-childitem | where-object {$_.length –gt 2000000} | foreach-object {remove-item $_.fullname}

Das Anlegen neuer Dateien gelingt mit New-Item gefolgt vom Typ. Also z.B directory für Verzeichnis.

New-Item -ItemType directory testordner

Zu guter letzt kann man Dateien natürlich auch verschieben. Hierzu nimmt man Move-item

Move-item .testordner c:

Tolles Buch

Windows PowerShell 5.0: Das Praxisbuch
  • Schwichtenberg, Holger (Autor)

Hinterlasse jetzt einen Kommentar

Kommentar hinterlassen

E-Mail Adresse wird nicht veröffentlicht.


*