ekzman - Fotolia

Von Copy-Item bis Get-ChildItem: Vier kaum bekannte Neuerungen der PowerShell 5.0

Die PowerShell 5.0 bietet nicht nur große Neuerungen, sondern auch viele kleine, aber hilfreiche Verbesserungen. Vier davon stellen wir hier vor.

Microsoft integriert mit jeder neuen Version der PowerShell zahlreiche neue Funktionen und Verbesserungen, so auch natürlich in der PowerShell 5.0. Einige der mittlerweile bekanntesten neuen Funktionen wären beispielsweise die Paketverwaltung per OneGet-Framework oder die Konfiguration von Netzwerk-Switches mit dem neuen NetworkSwitch-Modul. Zu den bekanntesten Verbesserungen dagegen gehören beispielsweise das Remote-Editieren und die neuen Möglichkeiten der PowerShell Desired State Configuration.

Daneben gibt es aber auch dutzende Neuerungen, die bisher weniger bekannt sind, aber dennoch äußerst hilfreich beim Arbeiten mit der PowerShell sind. Die folgenden vier neuen Funktionen gehören sicherlich dazu.

Copy-Item-Cmdlet

Lee Holmes, Senior Software Developer Engineer for PowerShell bei Microsoft, hat vor Jahren ein beliebtes PowerShell-Skript namens Send-File.ps1 geschrieben, mit dem sich Dateien über Remote-Sitzungen verschicken lassen. Der Vorteil des Skripts liegt vor allem im Verzicht auf das SMB-Protokoll (Server Message Block) zur Dateiübertragung.

Bei der Nutzung des Skripts machten sich Administratoren allerdings keine Gedanken darüber, einfach einen weiteren Firewall-Port zu öffnen. Damit konnte für Kopiervorgänge dann der TCP-Port der Remote-Sitzung genutzt werden. Microsoft hat sich mit der PowerShell 5.0 nun entschieden, diese Funktion in die native Codebasis zu überführen, über den ToSession-Parameter lässt sich dies nun mit dem Copy-Item-Cmdlet durchführen.

Das Beispiel in Abbildung 1 zeigt, wie sich eine neue PowerShell-Sitzung zu einem Remote-Computer aufbauen lässt, wie anschließend der Dateipfad für die zu kopierende Datei und der Zielpfad sowie die zu nutzende Session angegeben wird. Damit ist kein externes Skript mehr nötig.

Abbildung 1: Neuer ToSession-Parameter des Copy-Item-Cmdlets in der PowerShell 5.0.

Native Unterstützung für ZIP-Dateien

In früheren PowerShell-Versionen gab es keine native Möglichkeit, ZIP-Dateien zu erstellen oder zu extrahieren. Stattdessen mussten auch hier externe Skripte genutzt werden. Mit der PowerShell 5.0 ändert sich dies, da hier die entsprechende Funktion in das Microsoft.PowerShell.Archive-Modul integriert wurde.

Dieses Modul enthält also ein Cmdlet zu Erstellen von ZIP-Dateien (Compress-Archive) und ein Cmdlet zum Extrahieren von ZIP-Dateien (Expand-Archive).

Abbildung 2: Erstellen von ZIP-Archiven in der PowerShell 5.0.

In Abbildung 2 wird dargestellt, wie sich mehrere Dateien als Archiv in einem Ordner zusammenfügen lassen, um daraus über Compress-Archive eine ZIP-Datei zu erstellen. Entsprechend wird das Archiv über Expand-Archive wieder extrahiert.

Symbolische Verknüpfungen in der PowerShell 5.0

Die Bash-Shell in Linux kennt schon eine ganze Weile die Möglichkeit zum Erstellen von symbolischen Verknüpfungen im Dateisystem, auch symbolische Links genannt. Bisher war dies in der PowerShell nur über .NET-Code oder über Kommandozeilen-Tools wie mklink.exe möglich, mit der PowerShell 5.0 werden symbolische Links jetzt aber zu einer nativen Funktion.

Indem nur ein einziges Parameter-Argument an den ItemType-Parameter des New-Item-Cmdlets angehängt wird, können nun native symbolische Verknüpfungen erstellt werden, ohne externe Tools oder .NET-Code zu benötigen.

Abbildung 3: Eine symbolische Verknüpfung in der PowerShell 5.0.

Die oben aufgeführte Abbildung 3  zeigt den symbolischen Link MySymLinkFile.txt im Ordner C:\Windows\Temp, die auf die Datei text.txt verweist. Man achte hierbei auf die Mode-Eigenschaft und das Attribut l, das auf den symbolischen Link hinweist.

Ordner-Struktur durch Get-ChildItem begrenzen

In der PowerShell gibt es schon lange das Get-ChildItem-Cmdlet, um verschiedene Items nach Provider aufzulisten. Das Auflisten von Dateien und Ordnern im Dateisystem oder von Registry Keys in der Registry sind einige der häufigsten Anwendungsfälle für dieses Cmdlet. Sowohl das Dateisystem als auch die Registry speichern Informationen in einem hierarchischen Format durch Ordner oder Registry Keys.

Abbildung 4: Der -Depth-Parameter des Get-ChildItem-Cmdlets in der PowerShell 5.0.

Über den –Recurse-Parameter können sich Administratoren Objekte in Unterordnern anzeigen lassen. Dieser Parameter geht die gesamte Hierarchie der Objekte durch und listet dabei alle Unterordner und Registry Keys auf. Bisher war es allerdings schwierig, die Tiefe der angezeigten Hierarchieebene zu beeinflussen. In der PowerShell 5.0 hat Microsoft jetzt den –Depth-Parameter für das Get-ChildItem-Cmdlet integriert, um diesen Vorgang einfacher zu gestalten.

Wenn beispielsweise eine Ordnerstruktur mit fünf Hierarchieebenen vorliegt, dann ließe sich über das Get-ChildItem-Cmdlet in Verbindung mit dem –Recurse-Parameter jeder dieser Unterordner auflisten. Wenn man nun aber, wie in Abbildung 4, nur alle Unterordner der zweiten Hierarchieebene angezeigt bekommen will, dann lässt sich dies jetzt über den –Depth-Parameter bewerkstelligen.

Folgen Sie SearchDataCenter.de auch auf Twitter, Google+ und Facebook!

Erfahren Sie mehr über Serverbetriebssysteme