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?