PowerShell är fantastisk för att ta fram data. Men om du bara skriver data till konsolen är det borta när du stänger fönstret.

Du behöver ett sätt att spara resultaten. Det är där Out-File och Export-CSV kommer in. De låter dig spara PowerShell-resultat till filer.

Men vilken ska du välja? Och hur undviker du de vanliga misstagen?

Out-File vs Export-CSV — snabb jämförelse
Vilken ska du använda?

Out-File sparar text — exakt som det ser ut på skärmen. Det är bra för rapporter och loggfiler.

Export-CSV sparar strukturerad data — en CSV-fil som Excel kan öppna och arbeta med. Det är bra för data som ska analyseras senare.

💡 Tumregel: Använd Export-CSV för data, Out-File för rapporter.
EXAMPLE 1: OUT-FILE - ENKEL RAPPORT
Get-Process | Out-File C:\Reports\processes.txt # Med Select för att välja vilka kolumner Get-Process | Select-Object Name, CPU, Memory | Out-File C:\Reports\processes.txt

Det sparas exakt som det ser ut på skärmen. Vanlig text, lätt att läsa för människor.

EXAMPLE 2: EXPORT-CSV - STRUKTURERAD DATA
Get-Process | Select-Object Name, CPU, Memory | Export-Csv C:\Reports\processes.csv -NoTypeInformation # Öppna den sedan i Excel för analys Invoke-Item C:\Reports\processes.csv

CSV är ett format som Excel förstår perfekt. Du kan öppna, sortera, filtrera, och göra pivot-tabeller.

EXAMPLE 3: OUT-FILE MED APPEND
# Lägg till i filen istället för att skriva över Get-Process | Out-File C:\Reports\processes.txt -Append

Använd -Append för att lägga till i en befintlig fil istället för att skriva över den.

"Export-CSV för data du vill analysera. Out-File för rapporter du vill läsa."
Vanliga misstag och hur du undviker dem
Fel som många gör

Misstag 1: Glömma -NoTypeInformation på CSV

DÅLIGT - EXTRA HEADER I CSV
Get-Process | Export-Csv C:\processes.csv # CSV:n får en #TYPE-rad som Excel inte gillar
BÄTTRE - REN CSV
Get-Process | Export-Csv C:\processes.csv -NoTypeInformation # Ren CSV som Excel älskar

Alltid -NoTypeInformation på Export-CSV!

Misstag 2: Out-File ger konstig formatering

Out-File formaterar data för att se bra ut på skärmen — men det kan skapa långor rader och dålig formatering för data:

DÅLIGT - FELAKTIG FORMATERING
Get-ChildItem | Out-File C:\files.txt # Resultatet ser konstigt ut — kolumner är dåligt justerade
BÄTTRE - ANVÄND SELECT-OBJECT
Get-ChildItem | Select-Object Name, Length, LastWriteTime | Out-File C:\files.txt # Mycket renare utdata

Misstag 3: Använd alltid -Force för att överskriva

OM FILEN REDAN FINNS
Get-Process | Out-File C:\processes.txt -Force # -Force skriver över filen utan att fråga

Misstag 4: Glömma att välja rätt kolumner

DÅLIGT - ALLT SPARAS
Get-Process | Export-Csv C:\processes.csv -NoTypeInformation # Sparar 20+ egenskaper du inte behöver
BÄTTRE - BARA DET DU BEHÖVER
Get-Process | Select-Object Name, CPU, Memory, Handles | Export-Csv C:\processes.csv -NoTypeInformation # Mycket smalare och snabbare fil
⚠️ Export-CSV sparar ALLT om du inte använder Select-Object. Det kan göra filen mycket större än nödvändigt.
UTF-8 och teckenkodning
För svenska tecken som åäö

Om dina data innehåller svenska bokstäver (åäö) behöver du vara försiktig med kodningen:

SVENSKA TECKEN I CSV
Get-Process | Select-Object Name, Description | Export-Csv C:\processes.csv -NoTypeInformation -Encoding UTF8 # Out-File också Get-Process | Out-File C:\processes.txt -Encoding UTF8

Använd -Encoding UTF8 för korrekt svenska tecken.

Verkligt exempel från praktiken
Scenario: Rapportera vilka processer som använder mycket minne
VERKLIGT EXEMPEL - MINNESRAPPORT
# Skapa en rapport över processerna $timestamp = Get-Date -Format "yyyyMMdd_HHmmss" $reportPath = "C:\Reports\MemoryReport_$timestamp.csv" # Hämta processer som använder mer än 100 MB minne Get-Process | Where-Object {$_.Memory -gt 100MB} | Select-Object Name, @{Name="Memory(MB)";Expression={[math]::Round($_.Memory/1MB,2)}}, Handles, Threads | Sort-Object "Memory(MB)" -Descending | Export-Csv $reportPath -NoTypeInformation -Encoding UTF8 Write-Host "Rapport sparad: $reportPath" Invoke-Item $reportPath

Denna kodsekvens skapar en datumstämplad rapport som automatiskt öppnas i Excel.

Anpassade egenskaper med Select-Object
Gör rapporten professionell
ANPASSADE KOLUMNNAMN OCH FORMAT
Get-ChildItem C:\Windows -ErrorAction SilentlyContinue | Select-Object Name, @{Name="Size(MB)";Expression={[math]::Round($_.Length/1MB,2)}}, @{Name="LastModified";Expression={$_.LastWriteTime.ToString("yyyy-MM-dd")}} | Export-Csv C:\filesize_report.csv -NoTypeInformation

Du kan skapa helt nya kolumner med beräknade värden och snyggt formatering.

För- och nackdelar
Out-File vs Export-CSV

✓ Out-File

  • Enkel och direkt
  • Ser bra ut när man läser den
  • Bra för rapporter
  • Lägg till med -Append
  • Lätt formatering möjlig
  • Lagrar allt som text

✓ Export-CSV

  • Strukturerad data
  • Excel-kompatibel
  • Sorterbar och filtrerbar
  • Lätt att importera senare
  • Pivot-tabeller möjliga
  • Perfekt för data-analys

// SNABB GUIDE: OUT-FILE VS EXPORT-CSV

  • Out-File = text-baserad rapport (människor läser den)
  • Export-CSV = strukturerad data (Excel analyserar den)
  • Export-CSV kräver -NoTypeInformation
  • Använd -Encoding UTF8 för svenska tecken
  • Använd Select-Object för att välja kolumner
  • Använd -Force för att skriva över filer
  • Använd -Append för att lägga till i Out-File

// CHECKLIST: INNAN DU SPARAR RESULTAT

  • Är det rapport (Out-File) eller data (Export-CSV)?
  • Har jag valt rätt kolumner med Select-Object?
  • Använder jag -NoTypeInformation för CSV?
  • Använder jag -Encoding UTF8 för svenska tecken?
  • Är mappen C:\Reports\ redan skapad?
  • Bör jag datumstämpla filnamnet?
  • Behöver jag -Force för att skriva över?
  • Kan jag öppna filen och verifierar den är korrekt?