So greifen Sie mit PowerShell auf BIOS- (UEFI-)Einstellungen zu und ändern diese.

Hey, falls ihr schon mal einen Blick ins BIOS von Windows werfen wolltet, ohne den Rechner neu zu starten und ins BIOS zu gelangen: PowerShell kann euch dabei helfen. Klar, es ist kein vollwertiger BIOS-Editor – zumindest nicht direkt –, aber ihr könnt euch Informationen beschaffen und sogar einige Einstellungen anpassen, insbesondere bei verwalteter Unternehmenshardware. Es mag etwas ungewöhnlich klingen, aber auf Windows-PCs öffnen WMI (Windows Management Instrumentation) und bestimmte Module ein kleines Fenster mit BIOS-Details oder ermöglichen in manchen Fällen sogar die Durchführung von Änderungen. Beachtet aber, dass nicht jedes Gerät einwandfrei funktioniert – manchmal werden herstellerspezifische Klassen oder Treiber benötigt, und die Fernänderung des BIOS ist nicht immer einfach. Trotzdem ist es eine praktische Möglichkeit, die BIOS-Konfiguration auf Standardrechnern zu automatisieren oder Fehler zu beheben oder sogar die BIOS-Konfigurationen für eine ganze Rechnerflotte zu automatisieren.

Sich mit diesen Befehlen vertraut zu machen, kann Ihnen die Arbeit erleichtern – insbesondere, wenn Sie die BIOS-Version überprüfen oder Updates per Skript ausführen möchten, ohne jedes Mal die Menüs aufrufen zu müssen. Im Folgenden finden Sie konkrete Schritte, um die BIOS-Informationen abzurufen oder bei Bedarf Anpassungen vorzunehmen.

Wie man BIOS-Informationen extrahiert und Einstellungen mit PowerShell ändert

BIOS/UEFI-Version mit PowerShell prüfen

Dies ist der einfachste Ausgangspunkt. Die Win32_BIOS -Klasse liefert über WMI detaillierte Informationen zu BIOS-Version, Hersteller, Seriennummer usw. Ideal zum Prüfen und Bestätigen von Updates. In den meisten Fällen genügt folgender Befehl:

Get-WmiObject -Class Win32_BIOS

Neuere PowerShell-Versionen (wie PowerShell Core 7.x) bevorzugen jedoch Get-CimInstance, daher sollten Sie Folgendes verwenden:

Get-CimInstance -ClassName Win32_BIOS

Um alle Informationen und nicht nur die grundlegenden Daten anzuzeigen, leiten Sie die Ausgabe durch Format-List *. Zum Beispiel:

Get-WmiObject -Class Win32_BIOS | Format-List *

Dadurch werden alle Informationen ausgegeben, einschließlich SMBIOS-Version, Seriennummer, Veröffentlichungsdatum usw. Das ist hilfreich, um zu überprüfen, ob ein BIOS-Update erfolgreich war oder um die aktuell installierte Version zu bestätigen. Manchmal reichen diese Informationen aus, um Kompatibilitätsprobleme zu beheben oder einfach ein Protokoll zu führen.

Wenn Sie schnell eine Teilmenge erhalten möchten – beispielsweise Version und Hersteller – gehen Sie einfach wie folgt vor:

Get-WmiObject -Class Win32_BIOS | Select SMBIOSBIOSVersion, Manufacturer, SerialNumber, ReleaseDate

Und wenn Sie die Überprüfung remote durchführen – beispielsweise, weil Sie eine Reihe von PCs verwalten –:

Get-WmiObject -Class Win32_BIOS -ComputerName ComputerName

Ersetzen Sie ComputerName durch den Netzwerk-Hostnamen oder die IP-Adresse. Einfache Skripterstellung für mehrere Rechner.

Weil Windows es natürlich unnötig kompliziert machen muss, kann man BIOS-Informationen auch direkt aus der Registry abrufen:

Get-ItemProperty -Path HKLM:\HARDWARE\DESCRIPTION\System\BIOS

Dies ist eine niedrigere Ebene, aber manchmal geht es schneller, wenn WMI nicht mitspielt.

Mehr Kontrolle durch das Get-BIOS PowerShell-Modul

Wer es lieber praktischer mag, dem sei das kleine Juwel Get-BIOS aus der PowerShell Gallery empfohlen. Es eignet sich besonders gut für die BIOS-Verwaltung auf Unternehmensgeräten von Dell, HP, Lenovo und Toshiba.

Zur Installation (vorausgesetzt, Sie haben Netzwerkzugang):

Install-Module GetBIOS

Nach der Installation können Sie die BIOS-Einstellungen übersichtlich anzeigen lassen mit:

Get-BIOS

Hier werden die aktuellen Werte angezeigt, aber auch Beschreibungen und mögliche Optionen, wenn Sie -ShowDescription hinzufügen.

Um die BIOS-Einstellungen zu ändern, kann ein weiteres Modul namens SetBIOS helfen. Sie müssen eine CSV-Datei wie die folgende vorbereiten:

Einstellung, Wert "USB-Boot", Deaktivieren" "Wake-On-LAN""Aktivieren" 

Dann führen Sie Folgendes aus:

Set-BIOS -Path "C:\Path\To\Your\File.csv"

Bei einigen Geräten, insbesondere Laptops mit BIOS-Passwort, müssen Sie das Passwort mit dem Parameter -Password angeben – andernfalls schlagen die Änderungen möglicherweise fehl oder erfordern manuelle Schritte.

BIOS-Verwaltung auf Lenovo-Geräten

Lenovo bietet eigene WMI-Klassenfunktionen für detaillierte Steuerungsmöglichkeiten. Um beispielsweise die aktuellen BIOS-Einstellungen anzuzeigen:

Get-WmiObject -class Lenovo_BiosSetting -namespace root\wmi | select-object InstanceName, currentsetting

Wenn Sie beispielsweise überprüfen möchten, ob ein BIOS-Passwort festgelegt ist (denn Sicherheit ist natürlich wichtig):

(gwmi -Class Lenovo_BiosPasswordSettings -Namespace root\wmi).PasswordState

Wird 0 zurückgegeben, ist kein Passwort erforderlich; andernfalls müssen Sie möglicherweise zuerst eines festlegen. Das Administratorpasswort kann wie folgt geändert werden:

(gwmi -Class Lenovo_SetBiosPassword -Namespace root\wmi).SetBiosPassword("oldPassword, newPassword")

Auch das Aktivieren von WOL oder das Zurücksetzen der Standardeinstellungen kann per Skript gesteuert werden:

$getLenovoBIOS = gwmi -class Lenovo_SetBiosSetting -namespace root\wmi $getLenovoBIOS. SetBiosSetting("WakeOnLAN, Enable") $SaveLenovoBIOS = (gwmi -class Lenovo_SaveBiosSettings -namespace root\wmi) $SaveLenovoBIOS. SaveBiosSettings() 

Das Zurücksetzen auf die Standardeinstellungen beinhaltet Folgendes:

$DefaultSettings = Get-WmiObject -Namespace root\wmi -Class Lenovo_LoadDefaultSettings $DefaultSettings. LoadDefaultSettings("CurrentBIOSPassword, ascii, us") 

Hacking der HP-BIOS-Einstellungen über PowerShell

Wenn Sie mit HP-Geräten handeln, können Sie die Optionen wie folgt auflisten:

Get-WmiObject -Namespace root/hp/instrumentedBIOS -Class hp_biosEnumeration | select Name, value, possiblevalues

Möchten Sie das Booten über USB deaktivieren? Hier ist ein Beispielbefehl:

$getHPBios = gwmi -class hp_biossettinginterface -Namespace "root\hp\instrumentedbios" $getHPBios. SetBIOSSetting('USB Storage Boot', 'Disable')

Wenn das BIOS durch ein Passwort geschützt ist, müssen Sie es wie folgt angeben:

$HPBIOSPassword = "<utf-16/>"+"Passw0rd!1" $getHPBios. SetBIOSSetting('Netzwerk (PXE)-Start', 'Deaktivieren', $HPBIOSPassword) 

Das Skript gibt einen Code zurück – 0 bedeutet Erfolg, alles andere eher nicht. Die Ausgabe kann wie folgt verarbeitet werden:

$ChangeBIOS_State = $bios.setbiossetting('Network (PXE) Boot', 'Disable', $HPBIOSPassword) if (($ChangeBIOS_State.return) -eq 0) { write-host "OK" } else { write-host "Error - (Return code $($ChangeBIOS_State.return))" -Foreground Red }

Automatische LAN/WLAN-Umschaltung aktivieren? Gleiches Prinzip:

$getHPBios. SetBIOSSetting('LAN/WLAN Switching', 'Enable')

Einige Tools wie die HP Client Management Script Library erweitern diese Funktionalität und ermöglichen den Stapelexport/-import von BIOS-Einstellungen oder Firmware-Updates. Es empfiehlt sich, zuerst die aktuellen Einstellungen zu exportieren:

Get-HPBIOSSettingsList | Out-File 'C:\CurrentBIOSSettings.txt'

Für Dell Itty-Bitten Tweaks

Dell verfügt ebenfalls über eigene WMI-Klassen. Um die Bootreihenfolge anzuzeigen, führen Sie folgenden Befehl aus:

Get-WmiObject -Namespace root\dellomci Dell_BootDeviceSequence | sort BootOrder | select BootDeviceName, BootOrder

So schalten Sie Wake-on-LAN ein und aus:

(Get-WmiObject DCIM-BIOSService -namespace root\dcim\sysman).SetBiosAttributes($null, $null, "Wake-On-LAN", "4")

Und wenn Sie wirklich in die Tiefe gehen wollen, installieren Sie das DellBIOSProvider-Modul:

Install-Module -Name DellBIOSProvider -Force

Nach der Installation können Sie BIOS-Einstellungen mit Befehlen wie den folgenden finden/einstellen:

Get-Item DellSmbios:\BootSequence\Bootsequence

oder prüfen Sie, ob das Administratorpasswort festgelegt ist:

Get-Item -Path DellSmbios:\Security\IsAdminPasswordSet

Ja, all diese Tools sind etwas unübersichtlich, und herstellerspezifische Klassen funktionieren manchmal nur, wenn die passenden Treiber installiert sind. Trotzdem kann PowerShell für schnelle Überprüfungen oder die Automatisierung bestimmter Einstellungen eine echte Geheimwaffe sein. Erwarten Sie aber nicht, das BIOS ohne Risiko vom Sofa aus neu programmieren zu können…

Zusammenfassung

  • Verwenden Sie Get-WmiObjectoder, Get-CimInstanceum grundlegende BIOS-Informationen mit minimalem Aufwand abzurufen.
  • Installieren Sie spezielle Module wie Get-BIOS und SetBIOS für eine detailliertere Steuerung.
  • Für die vollständige Kontrolle werden herstellerspezifische WMI-Klassen benötigt, insbesondere auf Lenovo-, HP- oder Dell-Maschinen.
  • Überprüfen Sie vor jeder Änderung der BIOS-Einstellungen per Fernzugriff immer alle Einstellungen doppelt und sichern Sie nach Möglichkeit die aktuellen Konfigurationen.

Zusammenfassung

PowerShell ist kein vollständiger BIOS-Editor, aber es ist erstaunlich, wie viele Informationen und kleinere Anpassungsmöglichkeiten man vom Betriebssystem aus abrufen kann. Man sollte sich jedoch bewusst sein, dass es hauptsächlich für Informationen oder einfache Konfigurationen gedacht ist, nicht für tiefgreifende BIOS-Manipulationen. Wenn Sie jedoch versuchen, Setups zu automatisieren oder Fehler direkt in Windows zu beheben, sind diese Befehle ein guter Anfang. Hoffentlich hilft dies, einige der routinemäßigen BIOS-Aufgaben zu vereinfachen – zumindest so weit, dass Sie ein paar Stunden sparen oder Neustarts vermeiden können.