Files
homelab-infra/ops/windows-reinstall/clear-disk0-old-windows-ssd.ps1
T
2026-05-15 16:05:34 +02:00

70 lines
2.9 KiB
PowerShell

Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"
$ExpectedDiskNumber = 0
$ExpectedFriendlyName = "INTEL SSDSC2BW180A3L"
$ExpectedSerialNumber = "CVCV3105053K180EGN"
$MinSizeGB = 160
$MaxSizeGB = 180
function Assert-Admin {
$Identity = [Security.Principal.WindowsIdentity]::GetCurrent()
$Principal = [Security.Principal.WindowsPrincipal]::new($Identity)
if (-not $Principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
throw "Dieses Skript muss in PowerShell als Administrator ausgefuehrt werden."
}
}
Assert-Admin
$Disk = Get-Disk -Number $ExpectedDiskNumber
$SizeGB = [math]::Round($Disk.Size / 1GB, 2)
Write-Host "Zieldatentraeger:"
$Disk | Select-Object Number, FriendlyName, SerialNumber, HealthStatus, OperationalStatus, @{Name="SizeGB";Expression={[math]::Round($_.Size/1GB,2)}}, PartitionStyle | Format-Table -AutoSize
Write-Host "Aktuelle Partitionen auf Datentraeger ${ExpectedDiskNumber}:"
Get-Partition -DiskNumber $ExpectedDiskNumber | Sort-Object PartitionNumber | Select-Object DiskNumber, PartitionNumber, DriveLetter, Type, @{Name="SizeGB";Expression={[math]::Round($_.Size/1GB,3)}} | Format-Table -AutoSize
if ($Disk.FriendlyName -ne $ExpectedFriendlyName) {
throw "Abbruch: FriendlyName passt nicht. Erwartet '$ExpectedFriendlyName', gefunden '$($Disk.FriendlyName)'."
}
if ($Disk.SerialNumber -ne $ExpectedSerialNumber) {
throw "Abbruch: SerialNumber passt nicht. Erwartet '$ExpectedSerialNumber', gefunden '$($Disk.SerialNumber)'."
}
if ($SizeGB -lt $MinSizeGB -or $SizeGB -gt $MaxSizeGB) {
throw "Abbruch: Groesse passt nicht. Erwartet ca. 167 GB, gefunden $SizeGB GB."
}
$SystemPartitions = Get-Partition -DiskNumber $ExpectedDiskNumber | Where-Object {
$_.IsBoot -or $_.IsSystem -or $_.IsActive
}
if ($SystemPartitions) {
throw "Abbruch: Datentraeger $ExpectedDiskNumber enthaelt Boot/System/Aktiv-Partitionen."
}
Write-Host ""
Write-Host "WARNUNG: Datentraeger 0 wird jetzt komplett geleert."
Write-Host "Das betrifft die alte Windows-SSD mit aktuell D: und Recovery-Partitionen."
Write-Host "Andere Datentraeger werden nicht angefasst."
Write-Host ""
$Confirmation = Read-Host "Tippe exakt LEEREN um fortzufahren"
if ($Confirmation -ne "LEEREN") {
throw "Abbruch: Bestaetigung wurde nicht eingegeben."
}
Clear-Disk -Number $ExpectedDiskNumber -RemoveData -RemoveOEM -Confirm:$false
Write-Host ""
Write-Host "Datentraeger $ExpectedDiskNumber wurde geleert."
Write-Host "Ergebnis:"
Get-Disk -Number $ExpectedDiskNumber | Select-Object Number, FriendlyName, HealthStatus, OperationalStatus, @{Name="SizeGB";Expression={[math]::Round($_.Size/1GB,2)}}, PartitionStyle | Format-Table -AutoSize
Get-Partition -DiskNumber $ExpectedDiskNumber -ErrorAction SilentlyContinue | Format-Table -AutoSize
Write-Host ""
Write-Host "Naechster Schritt: Vom Windows-USB-Stick booten und Windows auf den nicht zugeordneten Speicher von Datentraeger 0 installieren."