Met bestanden en mappen werkenWorking with Files and Folders

Navigeren door Windows PowerShell-stations en bewerken van de items op deze lijkt op het manipuleren van bestanden en mappen op de fysieke schijven Windows.Navigating through Windows PowerShell drives and manipulating the items on them is similar to manipulating files and folders on Windows physical disk drives. Deze sectie wordt beschreven hoe u omgaat met specifieke bestanden en mappen manipulatie taken-met behulp van PowerShell.This section discusses how to deal with specific file and folder manipulation tasks using PowerShell.

Lijst van alle bestanden en mappen in een mapListing All the Files and Folders Within a Folder

U kunt alle items rechtstreeks in een map verkrijgen door middel van Get-ChildItem.You can get all items directly within a folder by using Get-ChildItem. Voeg de optionele Force parameter worden verborgen items van system.Add the optional Force parameter to display hidden or system items. Deze opdracht geeft bijvoorbeeld de inhoud direct van Windows PowerShell-station C (dit is hetzelfde als het fysieke Windows-station C):For example, this command displays the direct contents of Windows PowerShell Drive C (which is the same as the Windows physical drive C):

Get-ChildItem -Path C:\ -Force

De opdracht bevat alleen de rechtstreeks opgenomen items, vergelijkbaar met behulp van Cmd.exe DIR opdracht of ls in een UNIX-shell.The command lists only the directly contained items, much like using Cmd.exe's DIR command or ls in a UNIX shell. Om te geven opgenomen items, moet u opgeven de -Recurse ook de parameter.In order to show contained items, you need to specify the -Recurse parameter as well. (Dit kan een zeer lange tijd in beslag nemen.) Overzicht van alles op het station C:(This can take an extremely long time to complete.) To list everything on the C drive:

Get-ChildItem -Path C:\ -Force -Recurse

Get-ChildItem kunt items filteren met de pad, Filter, opnemen, en uitsluiten parameters, maar deze zijn Normaal gesproken alleen gebaseerd op naam.Get-ChildItem can filter items with its Path, Filter, Include, and Exclude parameters, but those are typically based only on name. U kunt uitvoeren complexe filteren op basis van andere eigenschappen van items door Where-Object.You can perform complex filtering based on other properties of items by using Where-Object.

De volgende opdracht wordt gezocht naar alle uitvoerbare bestanden in de map Program Files die het laatst zijn gewijzigd na 1 oktober 2005 en die niet kleiner is dan 1 MB noch groter dan 10 MB zijn:The following command finds all executables within the Program Files folder that were last modified after October 1, 2005 and which are neither smaller than 1 megabyte nor larger than 10 megabytes:

Get-ChildItem -Path $env:ProgramFiles -Recurse -Include *.exe | Where-Object -FilterScript {($_.LastWriteTime -gt '2005-10-01') -and ($_.Length -ge 1mb) -and ($_.Length -le 10mb)}

Kopiëren van bestanden en mappenCopying Files and Folders

Kopiëren is klaar met Copy-Item.Copying is done with Copy-Item. De volgende opdracht maakt een back-up C:\boot.ini naar C:\boot.bak:The following command backs up C:\boot.ini to C:\boot.bak:

Copy-Item -Path C:\boot.ini -Destination C:\boot.bak

Als het doelbestand al bestaat, mislukt die poging kopiëren.If the destination file already exists, the copy attempt fails. Als u wilt een reeds bestaande bestemming overschrijven, gebruiken de Force parameter:To overwrite a pre-existing destination, use the Force parameter:

Copy-Item -Path C:\boot.ini -Destination C:\boot.bak -Force

Met deze opdracht werkt zelfs wanneer het doel alleen-lezen is.This command works even when the destination is read-only.

Werkt op dezelfde manier map kopiëren.Folder copying works the same way. Deze opdracht kopieert u de map C:\temp\test1 naar de nieuwe map C:\temp\DeleteMe recursief:This command copies the folder C:\temp\test1 to the new folder C:\temp\DeleteMe recursively:

Copy-Item C:\temp\test1 -Recurse C:\temp\DeleteMe

U kunt ook een selectie van items kopiëren.You can also copy a selection of items. De volgende opdracht kopieert alle txt-bestanden die zich ergens in c:\gegevens naar c:\temp\tekst:The following command copies all .txt files contained anywhere in c:\data to c:\temp\text:

Copy-Item -Filter *.txt -Path c:\data -Recurse -Destination C:\temp\text

U kunt nog steeds andere hulpprogramma's gebruiken om systeem te bestand kopiëren.You can still use other tools to perform file system copies. XCOPY en ROBOCOPY COM-objecten, zoals de Scripting.FileSystemObject, werkt met alle in Windows PowerShell.XCOPY, ROBOCOPY, and COM objects, such as the Scripting.FileSystemObject, all work in Windows PowerShell. Bijvoorbeeld, kunt u Windows Script Host Scripting.FileSystem COM klasse back-up C:\boot.ini naar C:\boot.bak:For example, you can use the Windows Script Host Scripting.FileSystem COM class to back up C:\boot.ini to C:\boot.bak:

(New-Object -ComObject Scripting.FileSystemObject).CopyFile('C:\boot.ini', 'C:\boot.bak')

Bestanden en mappen makenCreating Files and Folders

Maken van nieuwe items werkt op dezelfde op alle Windows PowerShell-providers.Creating new items works the same on all Windows PowerShell providers. Als een Windows PowerShell-provider meer dan één type item heeft, bijvoorbeeld, het bestandssysteem Windows PowerShell-provider wordt onderscheid gemaakt tussen de mappen en bestanden, moet u het itemtype opgeven.If a Windows PowerShell provider has more than one type of item—for example, the FileSystem Windows PowerShell provider distinguishes between directories and files—you need to specify the item type.

Deze opdracht maakt u een nieuwe map C:\temp\nieuwe map:This command creates a new folder C:\temp\New Folder:

New-Item -Path 'C:\temp\New Folder' -ItemType Directory

Deze opdracht maakt u een nieuwe lege bestand C:\temp\nieuwe map\bestand.txtThis command creates a new empty file C:\temp\New Folder\file.txt

New-Item -Path 'C:\temp\New Folder\file.txt' -ItemType File

Alle bestanden en mappen in een map verwijderenRemoving All Files and Folders Within a Folder

U kunt verwijderen opgenomen items met Item verwijderen, maar u wordt gevraagd om te bevestigen dat de verwijzing wordt verwijderd als het item iets anders bevat.You can remove contained items using Remove-Item, but you will be prompted to confirm the removal if the item contains anything else. Bijvoorbeeld, als u probeert te verwijderen van de map C:\temp\DeleteMe die andere items bevat, Windows PowerShell wordt u gevraagd om bevestiging voordat u de map te verwijderen:For example, if you attempt to delete the folder C:\temp\DeleteMe that contains other items, Windows PowerShell prompts you for confirmation before deleting the folder:

Remove-Item -Path C:\temp\DeleteMe

Confirm
The item at C:\temp\DeleteMe 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"):

Als u niet worden gevraagd om elk item opgenomen wilt, geeft u de Recurse parameter:If you do not want to be prompted for each contained item, specify the Recurse parameter:

Remove-Item -Path C:\temp\DeleteMe -Recurse

Toewijzing van een lokale map als Windows toegankelijk stationMapping a Local Folder as a Windows Accessible Drive

U kunt ook een lokale map toewijzen met behulp van de subst opdracht.You can also map a local folder, using the subst command. De volgende opdracht maakt een lokaal station die p: geroot in de lokale map Program Files:The following command creates a local drive P: rooted in the local Program Files directory:

subst p: $env:programfiles

Net als bij netwerkstations, de stations die zijn toegewezen binnen met behulp van Windows PowerShell subst zijn direct zichtbaar voor de Windows PowerShell-shell.Just as with network drives, drives mapped within Windows PowerShell using subst are immediately visible to the Windows PowerShell shell.

Een tekstbestand lezen in een matrixReading a Text File into an Array

Een van de meest voorkomende opslagindelingen voor tekstgegevens is in een bestand met afzonderlijke regels behandeld als verschillende gegevenselementen.One of the more common storage formats for text data is in a file with separate lines treated as distinct data elements. De Get-inhoud cmdlet kan worden gebruikt om te lezen van een volledig bestand mogelijk in één stap, zoals hier wordt weergegeven:The Get-Content cmdlet can be used to read an entire file in one step, as shown here:

PS> Get-Content -Path C:\boot.ini
[boot loader]
timeout=5
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional"
 /noexecute=AlwaysOff /fastdetect
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=" Microsoft Windows XP Professional
with Data Execution Prevention" /noexecute=optin /fastdetect

Get-inhoud al behandelt de gegevens lezen uit het bestand als een matrix met één element per regel van de inhoud van bestand.Get-Content already treats the data read from the file as an array, with one element per line of file content. U kunt dit bevestigen door het controleren van de lengte van de geretourneerde inhoud:You can confirm this by checking the Length of the returned content:

PS> (Get-Content -Path C:\boot.ini).Length
6

Met deze opdracht is vooral handig voor het rechtstreeks ophalen van de lijsten met gegevens in Windows PowerShell.This command is most useful for getting lists of information into Windows PowerShell directly. Bijvoorbeeld, u een lijst met computernamen of IP-adressen mogelijk opslaan in een bestand C:\temp\domainMembers.txt met een naam op elke regel van het bestand.For example, you might store a list of computer names or IP addresses in a file C:\temp\domainMembers.txt, with one name on each line of the file. U kunt Get-inhoud inhoud van het bestand ophalen en plaatsen in de variabele $Computers:You can use Get-Content to retrieve the file contents and put them in the variable $Computers:

$Computers = Get-Content -Path C:\temp\DomainMembers.txt

$Computers is nu een matrix met de naam van een computer in elk element.$Computers is now an array containing a computer name in each element.