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.