Items rechtstreeks bewerken

De elementen die u ziet in Windows PowerShell stations, zoals de bestanden en mappen in de bestandssysteemstations en de registersleutels in de Windows PowerShell registerstations, worden items in Windows PowerShell. De cmdlets voor het werken met deze items hebben het zelfstandig naamwoord Item in hun naam.

In de uitvoer van Get-Command -Noun Item de 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 (New-Item)

Gebruik de cmdlet om een nieuw item in het bestandssysteem New-Item te maken. Neem de parameter Path op met pad naar het item en de parameter ItemType met de waarde of file directory .

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

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

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

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

U kunt dezelfde techniek gebruiken om een nieuwe registersleutel te maken. Een registersleutel is in feite eenvoudiger te maken omdat het enige itemtype in het Windows een sleutel is. (Registeritems zijn itemeigenschappen.) Als u bijvoorbeeld een sleutel met de naam '_Test' wilt maken 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 ervoor zorgen dat u de dubbele punt ( : ) in de namen van het PowerShell-station en op te HKLM: HKCU: nemen. Zonder de dubbele punt herkent PowerShell de naam van het station niet in het pad.

Waarom registerwaarden geen items zijn

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

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

Wanneer u echter gebruikt om te zoeken naar onderliggende items in de sleutel, ziet u alleen de Get-ChildItem subsleutel OptionalComponents 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 registeritems als items te behandelen, kunt u geen pad naar een registerinvoer opgeven op een manier die ervoor zorgt dat deze uniek is. De pad notatie maakt geen onderscheid tussen de subsleutel register met de naam Uitvoeren en de registerinvoer (standaard) in de subsleutel Uitvoeren. Omdat registerinvoernamen het backslash-teken () kunnen bevatten, als registeritems items zijn, kunt u de pad-notatie niet gebruiken om een registerinvoer met de naam te onderscheiden van de subsleutel die zich in dat pad \ Windows\CurrentVersion\Run bevindt.

De naam van bestaande items wijzigen (Rename-Item)

Als u de naam van een bestand of map wilt wijzigen, gebruikt u Rename-Item de 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 cmdlet kan de naam van een bestand of map wijzigen, maar kan Rename-Item een item niet verplaatsen. De volgende opdracht mislukt omdat wordt geprobeerd het bestand te verplaatsen van de New.Directory map naar de map Temp.

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

Items verplaatsen (move-item)

Als u een bestand of map wilt verplaatsen, gebruikt u Move-Item de cmdlet .

Met de volgende opdracht wordt bijvoorbeeld de map New.Directory verplaatst van de C:\temp map naar de hoofdmap van het station C: . Als u wilt controleren of het item is verplaatst, moet u de parameter PassThru van de Move-Item cmdlet opnemen. Zonder Passthru geeft Move-Item de cmdlet geen resultaten weer.

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

Items kopiëren (copy-item)

Als u bekend bent met de kopieerbewerkingen in andere shells, is het gedrag van de Copy-Item cmdlet in Windows PowerShell ongebruikelijk. Wanneer u een item van de ene locatie naar de andere kopieert, Copy-Item niet standaard de inhoud ervan kopiëren.

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

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

Als u de inhoud van we C:\temp\New.Directory weergeven, zult u zien 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 Copy-Item cmdlet is ontworpen om algemeen te zijn; deze is niet alleen bedoeld voor het kopiëren van bestanden en mappen. Zelfs bij het kopiëren van bestanden en mappen wilt u mogelijk alleen de container kopiëren en niet de items in de container.

Als u alle inhoud van een map wilt kopiëren, moet u de parameter Recurse van de Copy-Item cmdlet opnemen in de opdracht . Als u de map al hebt gekopieerd zonder de inhoud ervan, voegt u de parameter Force toe, zodat u de lege map kunt overschrijven.

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

Items verwijderen (Remove-Item)

Als u bestanden en mappen wilt verwijderen, gebruikt u Remove-Item de cmdlet . Windows PowerShell cmdlets, zoals , die aanzienlijke, onomkeerbare wijzigingen kunnen aanbrengen, wordt vaak om bevestiging gevraagd wanneer Remove-Item u de opdrachten in typt. Als u bijvoorbeeld probeert de map te verwijderen, wordt u gevraagd om de opdracht te bevestigen, omdat de New.Directory 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 het standaardreactie is, kunt u de map en de bestanden Yes verwijderen door op Enter te drukken. Als u de map wilt verwijderen zonder te bevestigen, gebruikt u de parameter Recurse.

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

Items uitvoeren (Invoke-Item)

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

Stel bijvoorbeeld dat u de volgende opdracht hebt uitgevoerd:

Invoke-Item C:\WINDOWS

Er wordt een Verkenner-venster weergegeven, alsof u op de C:\Windows map hebt C:\Windows dubbelklikt.

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

Invoke-Item C:\boot.ini

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