Windows Displays über Powershell abschalten

In diesem Beitrag zeige ich, wie man mithilfe von PowerShell Anzeigegeräte deaktiviert und wieder aktiviert. Dies kann besonders nützlich sein, wenn der Grafiktreiber Probleme macht oder wenn vorübergehend die Bildschirmausgabe unterbrochen werden muss, sei es für die Fehlerbehebung oder andere Szenarien. Wir werden Schritt für Schritt durch den Prozess gehen und den vollständigen PowerShell-Code am Ende zur Verfügung stellen.

Unter Windows gibt es eine Tastenkombination, die den Grafiktreiber neu startet. Die Kombination CTRL+ALT+SHIFT+B sorgt für ein Neu laden des Grafiktreibers, was Grafikfehler verschwinden lässt oder einen schwarzen Bildschirm behebt. Gerade bei letzterem ist das neustarten über die Tastenkombination nützlich, da sich das System nicht mehr grafisch bedienen lässt.

So praktisch diese Funktion auch ist, für Dauertests oder das gezielte Abschalten der Displays ist diese Möglichkeit aber nicht geeignet. Besonders für Tests und zur Automatisierung bietet sich die Verwendung von PowerShell Skripten an. Auch wenn hierrüber das neuladen des Grafiktreibers nicht direkt möglich ist, gibt es eine Möglichkeit das neuladen des Grafiktreibers zu erzwingen.

Neustarten des Grafiktreibers über PowerShell

Über den Windows Device-Manager lassen sich Displays gezielt abschalten, was das neuladen des Grafiktreibers erzwingt. Die Windows Powershell ermöglicht das Abschalten der Devices aber auch über ein Skript, welches wir nachfolgend zusammenstellen.

Liste der Anzeigegeräte abrufen

Zuerst holen wir uns eine Liste aller Anzeigegeräte, die Windows erkannt hat. Wir nutzen hierfür das Cmdlet Get-PnpDevice, welches uns eine Liste aller Display-Devices zurückgibt. Damit wir anschließend auf die gefundenen Geräte zugreifen können, schreiben wir uns diese in eine Variable displayDevices:

$displayDevices = Get-PnpDevice -Class "Display"

Erstes Anzeigegerät auswählen

Die Variable beinhaltet jetzt eine Liste aller Anzeigegeräte, die Windows gefunden hat. Damit wir nur den ersten Bildschirm abschalten, schreiben wir das erste Element aus der Liste in eine separate Variable displayDevice:

$displayDevice = $displayDevices[0]

Anzeigegerät deaktivieren

Jetzt folgt der eigentliche Befehl zum Abschalten des Displays. Mit dem nachfolgenden Befehl deaktivieren wir unser PnpDevice mit der davor gespeicherten InstanzID. Das hat den gleichen Effekt wie das deaktivieren über den Geräte-Manager:

Disable-PnpDevice -InstanceId $displayDevice.InstanceId

Da wir nur die InstanceId benötigen und der Disable-PnpDevice Befehl eine Instanz erwartet, holen wir uns nur diesen Wert aus der Variable $displayDevice, indem wir ein .InstanceId an die Variable schreiben.

Achtung

Durch den Befehl wird das Display inklusive Treiber abgeschalten. Auch wenn auf Laptops normalerweise der Standard-Windows Treiber einspringen sollte, muss man sich der Gefahr bewusst sein, dass der Laptop-Monitor abgeschalten und das System nicht mehr nutzbar wird.

Anzeigegerät wieder aktivieren

Zu guter Letzt benutzt du das Kommando Enable-PnpDevice, um das zuvor deaktivierte Anzeigegerät wieder einzuschalten. Durch das Deaktivieren und Reaktivieren des Devices wurde der Grafiktreiber neu gestartet. Folgender Befehl aktiviert unseren Monitor wieder:

Enable-PnpDevice -InstanceId $displayDevice.InstanceId

Vollständiges PowerShell-Skript

Hier ist das komplette PowerShell-Skript, das alle oben genannten Schritte zusammenfasst und mit dem sleep 3 noch eine kleine Verzögerung zwischen dem deaktivieren und aktivieren des Displays hinzufügt. Zudem unterdrücken wir die Sicherheitsabfrage von PowerShell, indem wir die Option -Confirm:$false an die PnpDevice Befehle anhängen:

# Get a list of display devices using the "Display" class
$displayDevices = Get-PnpDevice -Class "Display"

# Select the first display device from the list
$displayDevice = $displayDevices[0]

# Disable the selected display device by its InstanceId
Disable-PnpDevice -InstanceId $displayDevice.InstanceId -Confirm:$false

# Wait for 3 seconds to allow the device to deactivate
sleep 3

# Enable the previously disabled display device
Enable-PnpDevice -InstanceId $displayDevice.InstanceId -Confirm:$false

Das komplette Skript kann über folgenden Link heruntergeladen werden: DisableEnableDisplay.ps1

2 Comments

Was ist deine Meinung?

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>