cloudy
Goto Top

Nach Hardwaretausch PC wieder starten (inkl. Physikalisch - Virtuell)

Wer kennt es nicht, das Mainboard ist defekt und mit dem neuen Mainboard startet der PC nicht.
Oder Windows wurde ohne AHCI installiert.
Oder Ein Physikalischer PC soll in Virtuell wieder lauffähig gemacht werden (VDI Lizenzierung beachten!)
Der klassische Mainboard tausch ist ja seit Win7 nur noch selten ein Problem, anders sieht es mit dem wechsel zwischen Legacy und AHCI aus. Das endet standardmäßig in einem Bluescreen, weil Windows beim Starten den passenden Treiber nicht lädt. Der wurde ja auch nicht gebraucht, deshalb wurde er vom Systemstart ausgeschlossen um diesen zu beschleunigen. Nur dumm, wenn er auf der neuen Hardware erforderlich ist. Deshalb habe ich ein Skript geschrieben, das die Treiber für IDE (Legacy), AHCI, SATA und SAS (für VMWare) auf "Beim Booten starten" setzt. Es werden zwar nicht alle benötigt, aber die 2-3 Sekunden Geduld bei Zukünftigen Systemstarts fordere ich hiermit einfach ein.

1. Dein Image als Laufwerk in einem lauffähigem Windows Verbinden.
2. Laufwerksbuchstabe unter "Configuration" anpassen.
3. Skript ausführen (powershell, ExecutionPolicy beachten).
4. Laufwerk sicher entfernen.
5. Image wieder trennen.
6. VM starten, wenn es startet ist hier Schluss.
7. Windows CD (Gleiche Version und Architektur empfohlen) in der VM bereitstellen.
8. Windows Startreparatur ausführen und neustarten.
9. Schritt 8 3-4 Mal wiederholen (kein Scherz).
10. Wenn es jetzt noch nicht geht, ist der Bluescreen Code und der minidump interessant. Der sagt welcher Treiber noch fehlt, aber ab hier wird es richtig komplex...

# === Configuration ===
$offlineSystemDriveLetter = "F"; # Offline Windows drive letter  
# === Initialization ===
$location = $offlineSystemDriveLetter + ":\Windows\System32\config\SYSTEM";  
reg.exe load "HKLM\A" $location;  
New-PSDrive -Name HKVM -PSProvider Registry -Root HKLM\A;

# Doing stuff
Set-Location HKVM:\;
# Fix STOP: 0x0000007B - INACCESSIBLE_BOOT_DEVICE
Get-ChildItem -ErrorAction SilentlyContinue | Where-Object {$_.PSChildName -match '^ControlSet\d\d\d$'} | ForEach-Object {  
    Set-Location $($($_.PSPath) + '\services');  
    Get-ChildItem | Where-Object {$_.PSChildName -match '^ACPI$|^pciide$|^intelide$|^IastorV$|^Msahci$|^LSI_SAS$'} | ForEach-Object {  
        $subkey = $_;
        Write-Host $subkey.PSPath;
        Write-Host $(Get-ItemPropertyValue -Path $subkey.PSPath)
        #Set-Location $subkey.PSPath
        if ($(Get-ItemPropertyValue -Path $subkey.PSPath -Name "Start") -ne 0)  
        {
            #start on boot
            Set-ItemProperty -Path $subkey.PSPath -Name "Start" -Value 0;  
        };
        $subkey.Handle.Close();
        $subkey.Handle.Dispose();
    };
};

# === Cleanup ===
Set-Location "C:\";  
Remove-PSDrive HKVM;
[gc]::collect();
reg.exe unload "HKLM\A";  

Content-Key: 313710

Url: https://administrator.de/contentid/313710

Ausgedruckt am: 19.03.2024 um 07:03 Uhr

Mitglied: Lochkartenstanzer
Lochkartenstanzer 26.08.2016 um 16:13:22 Uhr
Goto Top
Mitglied: Cloudy
Cloudy 26.08.2016 um 16:48:05 Uhr
Goto Top
@Lochkartenstanzer
Die Registry keys sind schon enthalten. Mein Skript macht das halt für ein "Offline Windows" face-wink
Mitglied: Lochkartenstanzer
Lochkartenstanzer 27.08.2016 um 12:45:41 Uhr
Goto Top
Wenn dun in das verlinkte schaust, siehst Du, das es aich für ein offline-windies gedacht ist. face-smile

Die andere Lösung funktionirt halt ohne piwershell.
ljs