Items rechtstreeks bewerken

De elementen die u ziet in PowerShell-stations, zoals de bestanden en mappen of registersleutels, worden Items genoemd in PowerShell. De cmdlets voor het werken met het item hebben het zelfstandig naamwoordItem in hun naam.

In de uitvoer van de Get-Command -Noun Item opdracht ziet u dat er negen PowerShell-item-cmdlets zijn.

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[]> ...

Nieuwe items maken

Als u een nieuw item in het bestandssysteem wilt maken, gebruikt u de New-Item cmdlet. Neem de padparameter op met het pad naar het item en de parameter ItemType met een waarde van file of directory.

Als u bijvoorbeeld een nieuwe map wilt maken met de naam New.Directory in de C:\Temp map, typt u:

New-Item -Path c:\temp\New.Directory -ItemType Directory
    Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2006-05-18  11:29 AM            New.Directory

Als u een bestand wilt maken, wijzigt u de waarde van de parameter ItemType in file. Als u bijvoorbeeld een bestand wilt maken met de naam file1.txt in de New.Directory map, typt u:

New-Item -Path C:\temp\New.Directory\file1.txt -ItemType file
    Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp\New.Directory

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2006-05-18  11:44 AM          0 file1

U kunt dezelfde techniek gebruiken om een nieuwe registersleutel te maken. In feite is een registersleutel gemakkelijker te maken omdat het enige itemtype in het Windows-register een sleutel is. (Registervermeldingen zijn itemeigenschappen.) Als u bijvoorbeeld een sleutel wilt maken met de naam _Test in de CurrentVersion subsleutel, typt u:

New-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\_Test
   Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

SKC  VC Name                           Property
---  -- ----                           --------
  0   0 _Test                          {}

Wanneer u een registerpad typt, moet u de dubbele punt (:) opnemen in de namen van het PowerShell-station en HKLM:HKCU:. Zonder de dubbele punt herkent PowerShell de stationsnaam in het pad niet.

Waarom registerwaarden geen items zijn

Wanneer u de Get-ChildItem cmdlet gebruikt om de items in een registersleutel te vinden, ziet u nooit werkelijke registervermeldingen of hun waarden.

De registersleutel HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run bevat bijvoorbeeld meestal verschillende registervermeldingen die toepassingen vertegenwoordigen die worden uitgevoerd wanneer het systeem wordt gestart.

Wanneer u echter gebruikt Get-ChildItem om onderliggende items in de sleutel te zoeken, ziet u alleen de OptionalComponents subsleutel van de sleutel:

Get-ChildItem HKLM:\Software\Microsoft\Windows\CurrentVersion\Run
   Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
SKC  VC Name                           Property
---  -- ----                           --------
  3   0 OptionalComponents             {}

Hoewel het handig is om registervermeldingen als items te behandelen, kunt u geen pad naar een registervermelding opgeven op een manier die ervoor zorgt dat deze uniek is. De pad-notatie maakt geen onderscheid tussen de registersubsleutel Uitvoeren en de registervermelding (standaard) in de subsleutel Uitvoeren. Bovendien, omdat registervermeldingen het backslash-teken (\), als registervermeldingen items zijn, kunt u de pad notatie niet gebruiken om een registervermelding te onderscheiden met de naam Windows\CurrentVersion\Run van de subsleutel die zich in dat pad bevindt.

De naam van bestaande items wijzigen

Als u de naam van een bestand of map wilt wijzigen, gebruikt u de Rename-Item cmdlet. Met de volgende opdracht wordt de naam van het file1.txt bestand gewijzigd in fileOne.txt.

Rename-Item -Path C:\temp\New.Directory\file1.txt fileOne.txt

De Rename-Item cmdlet kan de naam van een bestand of map wijzigen, maar kan een item niet verplaatsen. De volgende opdracht mislukt omdat het bestand wordt verplaatst van de New.Directory map naar de map Temp.

Rename-Item -Path C:\temp\New.Directory\fileOne.txt c:\temp\fileOne.txt
Rename-Item : can't rename because the target specified isn't a path.
At line:1 char:12
+ Rename-Item  <<<< -Path C:\temp\New.Directory\fileOne c:\temp\fileOne.txt

Items verplaatsen

Gebruik de Move-Item cmdlet om een bestand of map te verplaatsen.

Met de volgende opdracht wordt bijvoorbeeld de map New.Directory van de C:\temp map verplaatst naar de hoofdmap van het C: station. Als u wilt controleren of het item is verplaatst, neemt u de parameter PassThru van de Move-Item cmdlet op. Zonder PassThru worden in de Move-Item cmdlet geen resultaten weergegeven.

Move-Item -Path C:\temp\New.Directory -Destination C:\ -PassThru
    Directory: Microsoft.PowerShell.Core\FileSystem::C:\

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2006-05-18  12:14 PM            New.Directory

Items kopiëren

Als u bekend bent met de kopieerbewerkingen in andere shells, is het mogelijk dat het gedrag van de Copy-Item cmdlet in PowerShell ongebruikelijk is. Wanneer u een item van de ene locatie naar de andere kopieert, Copy-Item wordt de inhoud niet standaard gekopieerd.

Als u bijvoorbeeld de New.Directory map van het station C: naar de C:\temp map kopieert, slaagt de opdracht, maar worden de bestanden in de map New.Directory niet gekopieerd.

Copy-Item -Path C:\New.Directory -Destination C:\temp

Als u de inhoud weergeeft C:\temp\New.Directory, zult u merken dat deze geen bestanden bevat:

PS> Get-ChildItem -Path C:\temp\New.Directory
PS>

Waarom kopieert de Copy-Item cmdlet de inhoud niet naar de nieuwe locatie?

De cmdlet is ontworpen om algemeen te zijn. Het Copy-Item is niet alleen bedoeld voor het kopiëren van bestanden en mappen. Zelfs wanneer u bestanden en mappen kopieert, wilt u mogelijk alleen de container en niet de items erin kopiëren.

Als u alle inhoud van een map wilt kopiëren, neemt u de recurseparameter van de Copy-Item cmdlet op in de opdracht. Als u de map al hebt gekopieerd zonder de inhoud, voegt u de parameter Force toe, waarmee u de lege map kunt overschrijven.

Copy-Item -Path C:\New.Directory -Destination C:\temp -Recurse -Force -Passthru
    Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2006-05-18   1:53 PM            New.Directory

    Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp\New.Directory

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2006-05-18  11:44 AM          0 file1

Items verwijderen

Gebruik de Remove-Item cmdlet om bestanden en mappen te verwijderen. PowerShell-cmdlets, zoals Remove-Item, die aanzienlijke, ongedaan te maken wijzigingen kunnen veroorzaken, vragen vaak om bevestiging wanneer u de opdrachten invoert. Als u bijvoorbeeld de New.Directory map probeert te verwijderen, wordt u gevraagd om de opdracht te bevestigen, omdat de map bestanden bevat:

Remove-Item C:\temp\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"):

Omdat Yes dit het standaardantwoord is, drukt u op Enter om de map en de bijbehorende bestanden te verwijderen. Als u de map wilt verwijderen zonder te bevestigen, gebruikt u de parameter Recurse .

Remove-Item C:\temp\New.Directory -Recurse

Items uitvoeren

PowerShell gebruikt de Invoke-Item cmdlet om een standaardactie uit te voeren voor een bestand of map. Deze standaardactie wordt bepaald door de standaardtoepassingshandler in het register; het effect is hetzelfde als wanneer u dubbelklikt op het item in Bestandenverkenner.

Stel dat u de volgende opdracht uitvoert:

Invoke-Item C:\WINDOWS

Er wordt een Verkenner-venster C:\Windows weergegeven, net zoals u op de C:\Windows map hebt gedubbelklikt.

Als u het Boot.ini bestand op een systeem vóór Windows Vista aanroept:

Invoke-Item C:\boot.ini

Als het .ini bestandstype is gekoppeld aan Kladblok, wordt het boot.ini bestand geopend in Kladblok.