Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Att navigera genom PowerShell-enheter och manipulera objekten på dem liknar att manipulera filer och mappar på Windows-diskenheter. I den här artikeln beskrivs hur du hanterar specifika uppgifter för fil- och mappmanipulering med hjälp av PowerShell.
Visa en lista över alla filer och mappar i en mapp
Du kan hämta alla objekt direkt i en mapp med hjälp av Get-ChildItem. Lägg till den valfria Force-parametern för att visa dolda objekt eller systemobjekt. Det här kommandot visar till exempel det direkta innehållet i PowerShell Drive C:.
Get-ChildItem -Path C:\ -Force
Kommandot visar bara de direkt inneslutna objekten, ungefär som med kommandot dir i cmd.exe eller ls i ett Unix-gränssnitt. Om du vill visa objekt i undermappen måste du ange parametern Recurse.
Följande kommando visar allt på den C:-enheten:
Get-ChildItem -Path C:\ -Force -Recurse
Get-ChildItem kan filtrera objekt med Path, Filter, Includeoch Exclude parameters, men dessa baseras vanligtvis bara på namn. Du kan utföra komplex filtrering baserat på andra egenskaper för objekt med hjälp av Where-Object.
Följande kommando hittar alla körbara filer i mappen Programfiler som senast ändrades efter den 1 oktober 2005 och som varken är mindre än 1 megabyte eller större än 10 megabyte:
Get-ChildItem -Path $Env:ProgramFiles -Recurse -Include *.exe |
Where-Object -FilterScript {
($_.LastWriteTime -gt '2005-10-01') -and ($_.Length -ge 1mb) -and ($_.Length -le 10mb)
}
Kopiera filer och mappar
Kopieringen är klar med Copy-Item. Följande kommando säkerhetskopierar ditt PowerShell-profilskript:
if (Test-Path -Path $PROFILE) {
Copy-Item -Path $PROFILE -Destination $($PROFILE -replace 'ps1$', 'bak')
}
Kommandot Test-Path kontrollerar om profilskriptet finns.
Om målfilen redan finns misslyckas kopieringsförsöket. Om du vill skriva över ett befintligt mål använder du parametern Force:
if (Test-Path -Path $PROFILE) {
Copy-Item -Path $PROFILE -Destination $($PROFILE -replace 'ps1$', 'bak') -Force
}
Det här kommandot fungerar även när målet är skrivskyddat.
Mappkopiering fungerar på samma sätt. Det här kommandot kopierar mappen C:\temp\test1 till den nya mappen C:\temp\DeleteMe rekursivt:
Copy-Item C:\temp\test1 -Recurse C:\temp\DeleteMe
Du kan också kopiera ett urval av objekt. Följande kommando kopierar alla .txt filer som finns var som helst i C:\data till C:\temp\text:
Copy-Item -Filter *.txt -Path C:\data -Recurse -Destination C:\temp\text
Du kan fortfarande köra interna kommandon som xcopy.exe och robocopy.exe för att kopiera filer.
Skapa filer och mappar
Att skapa nya objekt fungerar på samma sätt på alla PowerShell-leverantörer. Om en PowerShell-provider har mer än en typ av objekt, till exempel FileSystem PowerShell-providern, skiljer mellan kataloger och filer, måste du ange objekttypen.
Det här kommandot skapar en ny mapp C:\temp\New Folder:
New-Item -Path 'C:\temp\New Folder' -ItemType Directory
Det här kommandot skapar en ny tom fil C:\temp\New Folder\file.txt
New-Item -Path 'C:\temp\New Folder\file.txt' -ItemType File
Viktigt!
När du använder Force switch med kommandot New-Item för att skapa en mapp och mappen redan finns inte skriva över eller ersätta mappen. Det returnerar helt enkelt det befintliga mappobjektet. Men om du använder New-Item -Force på en fil som redan finns skrivs filen över.
Ta bort alla filer och mappar i en mapp
Du kan ta bort inneslutna objekt med hjälp av Remove-Item, men du uppmanas att bekräfta borttagningen om objektet innehåller något annat. Om du till exempel försöker ta bort mappen C:\temp\DeleteMe som innehåller andra objekt uppmanar PowerShell dig att bekräfta innan du tar bort mappen:
Remove-Item -Path C:\temp\DeleteMe
Confirm
The item at C:\temp\DeleteMe has children and the Recurse parameter wasn't
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"):
Om du inte vill bli tillfrågad om varje inneslutet objekt anger du parametern Recurse:
Remove-Item -Path C:\temp\DeleteMe -Recurse
Mappa en lokal mapp som en enhet
Du kan också mappa en lokal mapp med hjälp av kommandot New-PSDrive. Följande kommando skapar en lokal enhet P: rotad i den lokala Program Files-katalogen, endast synlig från PowerShell-sessionen:
New-PSDrive -Name P -Root $Env:ProgramFiles -PSProvider FileSystem
Precis som med nätverksenheter är enheter som mappas i PowerShell omedelbart synliga för PowerShell-gränssnittet. Om du vill skapa en mappad enhet som syns i Utforskaren använder du parametern Persist. Det går dock bara att använda fjärrsökvägar med Bevara.
Läsa en textfil i en matris
Ett av de vanligaste lagringsformaten för textdata finns i en fil med separata rader som behandlas som distinkta dataelement. Cmdleten Get-Content kan användas för att läsa en hel fil i ett steg, enligt följande:
Get-Content -Path $PROFILE
# Load modules and change to the PowerShell-Docs repository folder
Import-Module posh-git
Set-Location C:\Git\PowerShell-Docs
Get-Content behandlar data som läss från filen som en matris, med ett element per rad med filinnehåll. Du kan bekräfta detta genom att kontrollera Längd för det returnerade innehållet:
PS> (Get-Content -Path $PROFILE).Length
3
Det här kommandot är mest användbart för att hämta listor med information till PowerShell. Du kan till exempel lagra en lista över datornamn eller IP-adresser i filen C:\temp\domainMembers.txt, med ett namn på varje rad i filen. Du kan använda Get-Content för att hämta filinnehållet och placera dem i variabeln $Computers:
$Computers = Get-Content -Path C:\temp\DomainMembers.txt
$Computers är nu en matris som innehåller ett datornamn i varje element.