Get-ChildItem är ditt verktyg för att söka efter filer och mappar. Men många använder det bara för att lista en mapp. Det kan mycket mer — filtrering, rekursiv sökning, jämförelser och rapporter. Här lär du dig allt det kan göra.
Get-ChildItem är en av de första PowerShell-cmdlets som nybörjare lär sig. Du skriver det för att se vad som finns i en mapp.
Men många stannar där. De vet inte att Get-ChildItem kan söka rekursivt genom tusentals mappar, filtrera efter datum, storlek, filtyp och mycket mer. De använderCmd.exe och Dir istället, eller värre — File Explorer.
Låt oss lära oss vad Get-ChildItem verkligen kan göra.
Vad är Get-ChildItem?
Det är ls/dir i PowerShell
Get-ChildItem listar innehållet i en mapp. Det är PowerShell:s motsvarighet till ls på Linux eller dir på Windows CMD.
Men det är mycket mer kraftfullt än så. Det returnerar PowerShell-objekt (inte bara text), vilket innebär att du kan filtrera, sortera, jämföra och manipulera dem på hundra olika sätt.
💡 Get-ChildItem kan köras lokalt eller på fjärrservrar via PowerShell Remoting — det är ett kraftfullt verktyg för administratörer.
EXAMPLE 1: ENKEL LISTA
Get-ChildItem C:\
# Eller gå till mappen först, sedan lista
Set-Location C:\
Get-ChildItem
# Eller med alias (genväg)
ls C:\
dir C:\
PowerShell kenner alias för Get-ChildItem: både ls (från Linux) och dir (från Windows) fungerar.
EXAMPLE 2: REKURSIV SÖKNING
# Hitta ALLA filer och mappar i C:\ och dess undermappar
Get-ChildItem C:\ -Recurse
# Bara filer (inte mappar)
Get-ChildItem C:\ -Recurse -File
# Bara mappar (inte filer)
Get-ChildItem C:\ -Recurse -Directory
-Recurse är enormt viktigt. Det söker genom alla undermappar automatiskt. Mycket kraftfullt.
EXAMPLE 3: FILTRERING
# Bara .exe-filer
Get-ChildItem C:\Windows -Filter "*.exe"
# Bara filer större än 100 MB
Get-ChildItem C:\ -Recurse -File | Where-Object {$_.Length -gt 100MB}
# Filer som ändrades under de senaste 7 dagarna
Get-ChildItem C:\ -Recurse -File |
Where-Object {(Get-Date) - $_.LastWriteTime -lt [TimeSpan]::FromDays(7)}
Kombinera Get-ChildItem med Where-Object för kraftfull filtrering.
EXAMPLE 4: INFORMATION OM OBJEKT
# Se både namn, storlek och skapningsdatum
Get-ChildItem C:\ | Select-Object Name, Length, CreationTime
# Sortera efter storlek (största först)
Get-ChildItem C:\ -Recurse -File |
Sort-Object Length -Descending |
Select-Object Name, @{Name="Size(MB)";Expression={[math]::Round($_.Length/1MB,2)}}
"Get-ChildItem är ls/dir — men på steroider. Det är ditt verktyg för filhantering i PowerShell."
Vanliga användningsfall
Verkliga problem du löser med Get-ChildItem
1. Hitta stora filer som tar upp diskutrymme:
HITTA STORA FILER
# Top 10 största filer på C:\
Get-ChildItem C:\ -Recurse -File -ErrorAction SilentlyContinue |
Sort-Object Length -Descending |
Select-Object FullName, @{Name="Size(GB)";Expression={[math]::Round($_.Length/1GB,2)}} |
Select-Object -First 10
2. Hitta gamla logfiler som kan raderas:
HITTA GAMLA LOGFILER
# Logfiler äldre än 30 dagar
Get-ChildItem C:\Logs -Filter "*.log" -Recurse |
Where-Object {(Get-Date) - $_.LastWriteTime -gt [TimeSpan]::FromDays(30)} |
Select-Object Name, LastWriteTime
3. Hitta filer som ändrades under en viss tidsperiod:
FILER ÄNDRADE IGÅR
# Filer ändrade under de senaste 24 timmarna
$yesterday = (Get-Date).AddDays(-1)
Get-ChildItem C:\ -Recurse -File |
Where-Object {$_.LastWriteTime -gt $yesterday} |
Select-Object FullName, LastWriteTime
4. Räkna filer av en viss typ:
RÄKNA FILTYPER
# Hur många .exe-filer finns i Windows-mappen?
(Get-ChildItem C:\Windows -Recurse -Filter "*.exe" -ErrorAction SilentlyContinue).Count
# Visa statistik för varje filtyp
Get-ChildItem C:\ -Recurse -File |
Group-Object Extension |
Select-Object Name, Count,
@{Name="TotalSize(MB)";Expression={[math]::Round(($_.Group | Measure-Object -Property Length -Sum).Sum/1MB,2)}}
Vanliga misstag och hur du undviker dem
Att tänka på
Misstag 1: Glömma -ErrorAction SilentlyContinue
Om du söker rekursivt kommer Get-ChildItem att snubbla på mappar du inte har åtkomst till. Du får hundratals "Access denied"-fel. Fixa det så här:
DÅLIGT - MASSOR AV FELMEDDELANDEN
Get-ChildItem C:\ -Recurse
BÄTTRE - IGNORERA ÅTKOMSTFEL
Get-ChildItem C:\ -Recurse -ErrorAction SilentlyContinue
Misstag 2: Använda Get-ChildItem för stora sökkningar
Om du söker genom en gigantisk mappstruktur kan Get-ChildItem bli långsamt. Begränsa sökningen:
LÅNGSAMT - SÖKER ÖVERALLT
Get-ChildItem C:\ -Recurse -File -Filter "*.log"
SNABBARE - SÖKER BARA I LOGS-MAPPEN
Get-ChildItem C:\Logs -Recurse -File -Filter "*.log"
Misstag 3: Tro att -Filter är samma som Where-Object
-FILTER ÄR SNABBAST
# Snabbast - filtrerar på filsystemet
Get-ChildItem C:\ -Filter "*.exe"
# Långsammare - hämtar allt, filtrerar sedan
Get-ChildItem C:\ | Where-Object {$_.Name -like "*.exe"}
Använd -Filter när du kan — det är snabbare än Where-Object för filsystemsökning.
⚠️ Get-ChildItem -Recurse på C:\ utan begränsning kan ta MYCKET lång tid på stora systemdiskar.
Prestandatips
Gör sökningen snabbare
1. Begränsa sökmappen: Sök bara där du behöver, inte överallt.
2. Använd -Filter istället för Where-Object: -Filter är snabbare för enkla filnamnssökningar.
3. Begränsa utgångsinformation: Returnera bara det du behöver.
SNABB SÖKNING
# Bara namn och datum för snabbare utmatning
Get-ChildItem C:\Logs -Recurse -File -ErrorAction SilentlyContinue |
Select-Object Name, LastWriteTime
4. Använd -Depth för att begränsa djup: (PowerShell 5.1+)
BEGRÄNSA SÖKDJUP
# Bara två nivåer djupt
Get-ChildItem C:\ -Recurse -Depth 2
Verkligt exempel från praktiken
Scenario: Du behöver rensa gamla logfiler och rapportera
VERKLIGT EXEMPEL - LOGFILER ÖVER 6 MÅNADER
# 1. Hitta gamla logfiler
$oldDate = (Get-Date).AddDays(-180)
$oldLogs = Get-ChildItem C:\Logs -Recurse -Filter "*.log" |
Where-Object {$_.LastWriteTime -lt $oldDate}
# 2. Visa hur många och hur stor plats de använder
Write-Host "Gamla logfiler: $($oldLogs.Count)"
Write-Host "Total storlek: $([math]::Round(($oldLogs | Measure-Object -Property Length -Sum).Sum/1GB,2)) GB"
# 3. Visa en lista av dem
$oldLogs |
Select-Object Name, LastWriteTime,
@{Name="Size(MB)";Expression={[math]::Round($_.Length/1MB,2)}} |
Sort-Object LastWriteTime |
Out-GridView
# 4. Radera dem (var försiktig!)
$oldLogs | Remove-Item -Force
För- och nackdelar
Get-ChildItem i ett nötskal
✓ Fördelar
- Hämtar PowerShell-objekt (inte bara text)
- Rekursiv sökning genom alla mappar
- Kan filtrera på många sätt
- Snabb -Filter-parameter
- Visar vilka som är filer/mappar
- Kan hämta från fjärrservrar
- Fungerar på både Windows och Unix
✗ Nackdelar
- Kan bli långsamt på gigantiska mappstrukturer
- Behöver felhantering (-ErrorAction)
- Rekursiv sökning tar mycket tid utan begränsning
- Kan inte söka på filinnehål (bara namn/metadata)
- Måste kombineras med Where-Object för komplext filtrering
- Åtkomstbegränsningar kan skapa "stumma" resultat
- -Recurse kan bli väldigt långsamt
// SNABB REFERENS: GET-CHILDITEM PARAMETRAR
- -Path | Vilken mapp du söker i
- -Filter | Filnamns-filter (snabbt)
- -Recurse | Sök genom undermappar
- -File | Bara filer, inte mappar
- -Directory | Bara mappar, inte filer
- -Depth | Hur många nivåer djupt (PowerShell 5.1+)
- -ErrorAction SilentlyContinue | Ignorera åtkomstfel
- -Include / -Exclude | Inkludera/exkludera mönster
- -Force | Visa dolda filer också
// CHECKLIST: INNAN DU ANVÄNDER GET-CHILDITEM
- Vet jag vilken mapp jag ska söka i?
- Behöver jag rekursiv sökning? (-Recurse tar tid!)
- Kan jag använda -Filter istället för Where-Object?
- Behöver jag -ErrorAction SilentlyContinue för åtkomstfel?
- Visar jag bara det jag behöver (Select-Object)?
- Är sökmappen begränsad (inte C:\)?
- Kan jag begränsa djupet med -Depth?