Alla guider PowerShell

Get-ChildItem — Hitta filer och mappar som en expert

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.

2026Adam Halvars8 min läsning

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?

Frågor om det här?

Hör av dig — eller läs fler guider.

Kontakta mig Alla guider