Scriptbibliotek/windows-server/maintenance/Get-DiskSpaceReport.ps1

87 lines
2.8 KiB
PowerShell

<#
.SYNOPSIS
Lager en rapport over diskbruk på en eller flere Windows-servere.
.DESCRIPTION
Henter ledig og total kapasitet for alle faste disker via CIM, og markerer
volumer som har mindre ledig plass enn en gitt terskel. Resultatet kan vises
i konsollet eller eksporteres til CSV. Skriveoperasjonen (CSV) støtter -WhatIf.
.PARAMETER ComputerName
En eller flere maskiner å sjekke. Standard er den lokale maskinen.
.PARAMETER ThresholdPercent
Terskel for ledig plass i prosent. Volumer under terskelen flagges. Standard 15.
.PARAMETER CsvPath
Valgfri sti for CSV-eksport. Utelates for kun konsoll-utskrift.
.EXAMPLE
.\Get-DiskSpaceReport.ps1
Viser diskbruk for den lokale serveren med standardterskel (15 %).
.EXAMPLE
.\Get-DiskSpaceReport.ps1 -ComputerName SRV01,SRV02 -ThresholdPercent 10 -CsvPath C:\Temp\disk.csv
Sjekker to servere med 10 % terskel og eksporterer til CSV.
.NOTES
Forfatter : W-tek Drift (WT)
Opprettet : 2026-06-18
Versjon : 1.0.0
Plattform : Windows Server 2016/2019/2022
Krav : PowerShell 5.1+, WinRM for fjernkjøring
Rettigheter : Lokal admin på målmaskinene
Tags : windows-server, disk, vedlikehold, rapportering
Endringslogg:
2026-06-18 1.0.0 Første versjon (WT)
#>
#Requires -Version 5.1
[CmdletBinding(SupportsShouldProcess = $true)]
param(
[string[]] $ComputerName = $env:COMPUTERNAME,
[ValidateRange(1, 99)]
[int] $ThresholdPercent = 15,
[string] $CsvPath
)
begin {
$ErrorActionPreference = 'Stop'
Set-StrictMode -Version Latest
$results = [System.Collections.Generic.List[object]]::new()
}
process {
foreach ($computer in $ComputerName) {
try {
$disks = Get-CimInstance -ClassName Win32_LogicalDisk -Filter "DriveType=3" -ComputerName $computer
foreach ($disk in $disks) {
$freePct = [math]::Round(($disk.FreeSpace / $disk.Size) * 100, 1)
$results.Add([pscustomobject]@{
Server = $computer
Drive = $disk.DeviceID
FreeGB = [math]::Round($disk.FreeSpace / 1GB, 1)
TotalGB = [math]::Round($disk.Size / 1GB, 1)
FreePercent = $freePct
BelowThreshold = $freePct -lt $ThresholdPercent
})
}
}
catch {
Write-Warning "Kunne ikke hente data fra ${computer}: $($_.Exception.Message)"
}
}
}
end {
$results | Sort-Object FreePercent | Format-Table -AutoSize
if ($CsvPath) {
if ($PSCmdlet.ShouldProcess($CsvPath, "Skriv CSV-rapport")) {
$results | Export-Csv -Path $CsvPath -NoTypeInformation -Encoding UTF8
Write-Output "Rapport skrevet til $CsvPath"
}
}
}