Delete Prep-VirtIODrivers.ps1
This commit is contained in:
@@ -1,129 +0,0 @@
|
|||||||
<#
|
|
||||||
.SYNOPSIS
|
|
||||||
Pre-stage VirtIO drivers on a VMware Windows Server 2025 VM prior to migration to Proxmox.
|
|
||||||
|
|
||||||
.DESCRIPTION
|
|
||||||
- Downloads (or uses provided) virtio-win.iso
|
|
||||||
- Mounts ISO and installs storage (vioscsi, viostor), network (NetKVM), balloon drivers
|
|
||||||
- Verifies driver install
|
|
||||||
- Unmounts ISO
|
|
||||||
|
|
||||||
.PARAMETER IsoPath
|
|
||||||
Optional. Local path to virtio-win.iso if you already downloaded it.
|
|
||||||
|
|
||||||
.PARAMETER Download
|
|
||||||
Switch. Force download latest virtio-win.iso from Fedora mirrors.
|
|
||||||
|
|
||||||
.EXAMPLE
|
|
||||||
.\Prep-VirtIODrivers.ps1 -Download
|
|
||||||
|
|
||||||
.EXAMPLE
|
|
||||||
.\Prep-VirtIODrivers.ps1 -IsoPath "C:\Temp\virtio-win.iso"
|
|
||||||
#>
|
|
||||||
|
|
||||||
param(
|
|
||||||
[string]$IsoPath,
|
|
||||||
[switch]$Download
|
|
||||||
)
|
|
||||||
|
|
||||||
# --- Require admin ---
|
|
||||||
if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()
|
|
||||||
).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
|
|
||||||
Write-Error "Run this script in an elevated PowerShell (Run as Administrator)."
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
$ErrorActionPreference = 'Stop'
|
|
||||||
|
|
||||||
# --- Prepare working paths ---
|
|
||||||
$WorkDir = Join-Path $env:TEMP "virtio-prep"
|
|
||||||
New-Item -ItemType Directory -Force -Path $WorkDir | Out-Null
|
|
||||||
|
|
||||||
if (-not $IsoPath -and -not $Download) {
|
|
||||||
# default to download
|
|
||||||
$Download = $true
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($Download) {
|
|
||||||
$IsoPath = Join-Path $WorkDir "virtio-win.iso"
|
|
||||||
Write-Host "Downloading latest virtio-win.iso..." -ForegroundColor Cyan
|
|
||||||
|
|
||||||
# Primary URL (Fedora people direct-downloads)
|
|
||||||
$url = "https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso"
|
|
||||||
try {
|
|
||||||
Invoke-WebRequest -Uri $url -OutFile $IsoPath -UseBasicParsing
|
|
||||||
}
|
|
||||||
catch {
|
|
||||||
Write-Host "Primary download failed, trying mirror..." -ForegroundColor Yellow
|
|
||||||
# Fallback mirror (if needed, simple same path assumption)
|
|
||||||
$url2 = "https://dl.fedoraproject.org/pub/alt/virtio-win/latest-virtio/virtio-win.iso"
|
|
||||||
Invoke-WebRequest -Uri $url2 -OutFile $IsoPath -UseBasicParsing
|
|
||||||
}
|
|
||||||
Write-Host "Downloaded to $IsoPath" -ForegroundColor Green
|
|
||||||
}
|
|
||||||
elseif (-not (Test-Path $IsoPath)) {
|
|
||||||
Write-Error "IsoPath not found: $IsoPath"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# --- Mount ISO ---
|
|
||||||
Write-Host "Mounting ISO..." -ForegroundColor Cyan
|
|
||||||
$mount = Mount-DiskImage -ImagePath $IsoPath -PassThru
|
|
||||||
$vol = ($mount | Get-Volume)
|
|
||||||
$cd = $vol.DriveLetter + ":"
|
|
||||||
Write-Host "Mounted at $cd" -ForegroundColor Green
|
|
||||||
|
|
||||||
# Driver roots (Windows Server 2025 uses the 'w11' folder)
|
|
||||||
$Paths = @(
|
|
||||||
Join-Path $cd "vioscsi\w11\amd64", # VirtIO SCSI storage
|
|
||||||
Join-Path $cd "viostor\w11\amd64", # VirtIO block storage
|
|
||||||
Join-Path $cd "NetKVM\w11\amd64", # VirtIO network
|
|
||||||
Join-Path $cd "Balloon\w11\amd64" # Memory balloon
|
|
||||||
)
|
|
||||||
|
|
||||||
# --- Install drivers with pnputil (online) ---
|
|
||||||
Write-Host "Installing VirtIO drivers..." -ForegroundColor Cyan
|
|
||||||
foreach ($p in $Paths) {
|
|
||||||
if (Test-Path $p) {
|
|
||||||
Write-Host " -> $p" -ForegroundColor DarkCyan
|
|
||||||
# add + install all INF in this dir (no recurse needed; w11\amd64 holds INF)
|
|
||||||
pnputil /add-driver "$p\*.inf" /install | Out-Null
|
|
||||||
} else {
|
|
||||||
Write-Warning "Path not found: $p"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# --- Optional extras (uncomment if you want them now) ---
|
|
||||||
# QXL display driver (not required for server core/headless):
|
|
||||||
# pnputil /add-driver "$cd\qxldod\w11\amd64\*.inf" /install | Out-Null
|
|
||||||
# VioSerial / pvpanic (not strictly required for boot):
|
|
||||||
# pnputil /add-driver "$cd\vioserial\w11\amd64\*.inf" /install | Out-Null
|
|
||||||
# pnputil /add-driver "$cd\pvpanic\w11\amd64\*.inf" /install | Out-Null
|
|
||||||
|
|
||||||
# --- Verify key drivers staged ---
|
|
||||||
Write-Host "`nVerifying driver presence..." -ForegroundColor Cyan
|
|
||||||
$need = @('vioscsi','viostor','NetKVM','Balloon')
|
|
||||||
$drivers = (pnputil /enum-drivers) -join "`n"
|
|
||||||
foreach ($n in $need) {
|
|
||||||
if ($drivers -match $n) {
|
|
||||||
Write-Host (" [+] {0} present" -f $n) -ForegroundColor Green
|
|
||||||
} else {
|
|
||||||
Write-Warning (" [!] {0} NOT found in driver store" -f $n)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# --- Unmount ISO ---
|
|
||||||
Write-Host "`nUnmounting ISO..." -ForegroundColor Cyan
|
|
||||||
Dismount-DiskImage -ImagePath $IsoPath
|
|
||||||
|
|
||||||
Write-Host "`nAll done." -ForegroundColor Green
|
|
||||||
Write-Host "Next steps:" -ForegroundColor Yellow
|
|
||||||
Write-Host @"
|
|
||||||
1) Maak nu je Veeam backup (of export) van deze VM.
|
|
||||||
2) Herstel in Proxmox:
|
|
||||||
- Disk op **VirtIO SCSI** (controller: virtio-scsi-pci; boot: scsi0)
|
|
||||||
- NIC op **VirtIO (paravirtualized)**
|
|
||||||
- Voeg CD-ROM met virtio-win.iso toe voor het geval je nog wilt bij-installeren
|
|
||||||
3) Start de VM. Na eerste boot kun je (optioneel) 'virtio-win-guest-tools.exe' draaien
|
|
||||||
vanaf de ISO voor QEMU agent en aanvullende drivers.
|
|
||||||
"@
|
|
||||||
Reference in New Issue
Block a user