Die auf Windows PowerShell-Laufwerken angezeigten Objekte, z. B. Dateien und Ordner auf Dateisystemlaufwerken, und die Registrierungsschlüssel auf Windows PowerShell-Registrierungslaufwerken werden in Windows PowerShell als Elemente bezeichnet. Die Namen der Cmdlets für die Arbeit mit Elementen enthalten das Substantiv Item.
Die Ausgabe des Befehls Get-Command -Noun Item zeigt, dass neun Windows PowerShell-Cmdlets für Elemente verfügbar sind.
PS> Get-Command -Noun Item CommandType Name Definition ----------- ---- ---------- Cmdlet Clear-Item Clear-Item [-Path] <String[]... Cmdlet Copy-Item Copy-Item [-Path] <String[]>... Cmdlet Get-Item Get-Item [-Path] <String[]> ... Cmdlet Invoke-Item Invoke-Item [-Path] <String[... Cmdlet Move-Item Move-Item [-Path] <String[]>... Cmdlet New-Item New-Item [-Path] <String[]> ... Cmdlet Remove-Item Remove-Item [-Path] <String[... Cmdlet Rename-Item Rename-Item [-Path] <String>... Cmdlet Set-Item Set-Item [-Path] <String[]> ...
Erstellen neuer Elemente (New-Item)
Verwenden Sie zum Erstellen eines neuen Elements im Dateisystem das Cmdlet New-Item. Fügen Sie den Path-Parameter mit dem Pfad zum Element sowie den ItemType-Parameter mit dem Wert "file" oder "directory" ein.
Wenn Sie z. B. im Verzeichnis "C:\Temp" das Verzeichnis "New.Directory" erstellen möchten, geben Sie Folgendes ein:
PS> New-Item -Path c:\temp\New.Directory -ItemType Directory Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2006-05-18 11:29 AM New.Directory
Ändern Sie zum Erstellen einer Datei den Wert des ItemType-Parameters in "file". Wenn Sie z. B. im Verzeichnis "New.Directory" eine Datei mit der Bezeichnung "file1.txt" erstellen möchten, geben Sie Folgendes ein:
PS> New-Item -Path C:\temp\New.Directory\file1.txt -ItemType file Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp\New.Directory Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2006-05-18 11:44 AM 0 file1
Mit demselben Verfahren können Sie auch einen neuen Registrierungsschlüssel erstellen. Das Erstellen eines neuen Registrierungsschlüssels ist sogar noch einfacher, da es in der Windows-Registrierung nur den Elementtyp Schlüssel gibt. (Registrierungseinträge sind Elementeigenschaften.) Wenn Sie zum Beispiel im Unterschlüssel "CurrentVersion" den Schlüssel "_Test" erstellen möchten, geben Sie Folgendes ein:
PS> New-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\_Test Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Micros oft\Windows\CurrentVersion SKC VC Name Property --- -- ---- -------- 0 0 _Test {}
Achten Sie bei der Eingabe eines Registrierungspfads unbedingt auf die Eingabe des Doppelpunkts (:) in den Namen der Windows PowerShell-Laufwerke "HKLM:" und "HKCU:". Ohne den Doppelpunkt erkennt Windows PowerShell den Laufwerknamen im Pfad nicht.
Registrierungswerte sind keine Elemente
Wenn Sie mit dem Cmdlet Get-ChildItem nach Elementen in einem Registrierungsschlüssel suchen, werden nie die eigentlichen Registrierungseinträge oder deren Werte angezeigt.
Zum Beispiel enthält der Registrierungsschlüssel HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run normalerweise mehrere Registrierungseinträge, die Anwendungen darstellen, die beim Systemstart ausgeführt werden.
Wenn Sie allerdings mit Get-ChildItem nach untergeordneten Elementen im Schlüssel suchen, wird lediglich der Unterschlüssel OptionalComponents angezeigt:
PS> Get-ChildItem HKLM:\Software\Microsoft\Windows\CurrentVersion\Run Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Micros oft\Windows\CurrentVersion\Run SKC VC Name Property --- -- ---- -------- 3 0 OptionalComponents {}
Die Behandlung von Registrierungseinträgen als Elemente wäre sicherlich komfortabel, es ist jedoch nicht immer möglich, einen eindeutigen Pfad zu einem Registrierungseintrag anzugeben. In der Pfadnotation wird nicht zwischen dem Registrierungsunterschlüssel Run und dem Registrierungseintrag (Default) im Unterschlüssel Run unterschieden. Da die Namen von Registrierungseinträgen auch keinen umgekehrten Schrägstrich (\) enthalten dürfen, können Sie nicht mithilfe der Pfadnotation zwischen dem Registrierungseintrag Windows\CurrentVersion\Run und dem Unterschlüssel unter diesem Pfad unterscheiden.
Umbenennen vorhandener Elemente (Rename-Item)
Verwenden Sie zum Umbenennen einer Datei oder eines Ordners das Cmdlet Rename-Item. Mit dem folgenden Befehl wird der Name der Datei file1.txt in fileOne.txt geändert.
PS> Rename-Item -Path C:\temp\New.Directory\file1.txt fileOne.txt
Das Cmdlet Rename-Item kann den Namen einer Datei oder eines Ordners ändern, aber keine Elemente verschieben. Der folgende Befehl führt zu einem Fehler, da dabei versucht wird, die Datei aus dem Verzeichnis "New.Directory" in das Verzeichnis "Temp" zu verschieben.
PS> Rename-Item -Path C:\temp\New.Directory\fileOne.txt c:\temp\fileOne.txt Rename-Item : Cannot rename because the target specified is not a path. At line:1 char:12 + Rename-Item <<<< -Path C:\temp\New.Directory\fileOne c:\temp\fileOne.txt
Verschieben von Elementen (Move-Item)
Verwenden Sie zum Verschieben einer Datei oder eines Ordners das Cmdlet Move-Item.
Mit dem folgenden Befehl verschieben Sie z. B. das Verzeichnis "New.Directory" aus dem Verzeichnis "C:\temp" in das Stammverzeichnis von Laufwerk "C:". Wenn Sie das Verschieben des Elements bestätigen möchten, fügen Sie den PassThru-Parameter des Cmdlet Move-Item hinzu. Ohne Passthru zeigt das Cmdlet Move-Item keine Ergebnisse an.
PS> Move-Item -Path C:\temp\New.Directory -Destination C:\ -PassThru Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2006-05-18 12:14 PM New.Directory
Kopieren von Elementen (Copy-Item)
Wenn Sie mit Kopiervorgängen in anderen Shells bereits vertraut sind, ist das Verhalten des Cmdlet Copy-Item in Windows PowerShell für Sie möglicherweise ungewöhnlich. Wenn Sie ein Element von einem Speicherort an einen anderen kopieren, wird mit Copy-Item standardmäßig nicht der Inhalt kopiert.
Beim Kopieren des Verzeichnisses New.Directory vom Laufwerk "C:" in das Verzeichnis "C:\temp" wird beispielsweise der Befehl erfolgreich ausgeführt, doch werden die Dateien im Verzeichnis "New.Directory" nicht kopiert.
PS> Copy-Item -Path C:\New.Directory -Destination C:\temp
Wenn Sie den Inhalt von C:\temp\New.Directory anzeigen, stellen Sie fest, dass keine Dateien enthalten sind:
PS> Get-ChildItem -Path C:\temp\New.Directory PS>
Wieso kopiert das Cmdlet Copy-Item den Inhalt nicht an den neuen Speicherort?
Das Cmdlet Copy-Item wurde für die allgemeine Verwendung entwickelt, also nicht nur zum Kopieren von Dateien und Ordnern. Auch beim Kopieren von Dateien und Ordnern möchten Sie möglicherweise nur den Container, aber nicht die enthaltenen Elemente kopieren.
Wenn Sie den Inhalt eines Ordners kopieren möchten, fügen Sie den Recurse-Parameter des Cmdlet Copy-Item in den Befehl ein. Wenn Sie bereits das Verzeichnis ohne dessen Inhalt kopiert haben, fügen Sie den Force-Parameter hinzu, mit dem Sie den leeren Ordner überschreiben können.
PS> Copy-Item -Path C:\New.Directory -Destination C:\temp -Recurse -Force -Passthru Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2006-05-18 1:53 PM New.Directory Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp\New.Directory Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2006-05-18 11:44 AM 0 file1
Löschen von Elementen (Remove-Item)
Zum Löschen von Dateien und Ordnern verwenden Sie das Cmdlet Remove-Item. Bestimmte Windows PowerShell-Cmdlets, z. B. Remove-Item, die erhebliche und nicht rückgängig zu machende Änderungen vornehmen, erfordern häufig eine Bestätigung für die Eingabe des Befehls. Wenn Sie z. B. versuchen, den Ordner New.Directory zu entfernen, werden Sie aufgefordert, den Befehl zu bestätigen, da der Ordner Dateien enthält:
PS> Remove-Item C:\New.Directory Confirm The item at C:\temp\New.Directory has children and the -recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue? [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
Da Yes die Standardantwort darstellt, drücken Sie zum Löschen des Ordners und der Dateien die EINGABETASTE. Verwenden Sie zum Entfernen des Ordners ohne Bestätigung den -Recurse-Parameter.
PS> Remove-Item C:\temp\New.Directory -Recurse
Ausführen von Elementen (Invoke-Item)
Windows PowerShell verwendet zum Ausführen der Standardaktion für eine Datei oder einen Ordner das Cmdlet Invoke-Item. Diese Standardaktion wird durch den Standardanwendungshandler in der Registrierung festgelegt. Das Ergebnis entspricht einem Doppelklick auf das Element in Windows Explorer.
Führen Sie zum Beispiel den folgenden Befehl aus:
PS> Invoke-Item C:\WINDOWS
Es wird ein Explorer-Fenster mit dem Ordner "C:\Windows" angezeigt, als hätten Sie einen Doppelklick auf den Ordner "C:\Windows" ausgeführt.
Angenommen, Sie rufen die Datei Boot.ini in einem älteren System als Windows Vista auf:
PS> Invoke-Item C:\boot.ini
Wenn der Dateityp INI dem Editor zugeordnet ist, wird die Datei "boot.ini" im Editor geöffnet.