Screenshot erstellen mit PowerShell und .NET

In einem früheren Beitrag haben wir gezeigt, wie man unter Windows mit einer Tastenkombination einen Screenshot erstellen kann. Doch auch mit PowerShell und .NET kann man einen Screenshot erstellen.

Screenshot erstellen mit PowerShell und .NET

Screenshot erstellen mit PowerShell und Hilfe durch .NET

Ganz so komfortabel wie mit dem Windows Snipping Tool ist das Erstellen eines Screenshots mit PowerShell nicht. Denn mir ist derzeit nur eine Methode für den ganzen Bildschirm bekannt, aber nicht für einzelne Fenster. Die Vorgehensweise für eine Bildschirmaufnahme mit PowerShell wäre folgende:

  1. Bildschirm Höhe und Breite auslesen (Auflösung)
  2. Bitmap Objekt erstellen
  3. Grafik-Objekt aus der Bitmap erstellen
  4. Grafik-Objekt in Datei speichern

Auflösung des Bildschirms auslesen

Damit wir wissen wie groß der Screenshot werden soll, muss zuerst die Auflösung mit PowerShell ausgelesen werden. Hierbei hilft die Eigenschaft VirtualScreen.

$Screen = [System.Windows.Forms.SystemInformation]::VirtualScreen
$Width = $Screen.Width
$Height = $Screen.Height
$Left = $Screen.Left
$Top = $Screen.Top

Somit werden die Koordinaten ausgelesen, aber ebenfalls die Breite und Höhe in Pixel.

Bitmap Objekt erstellen

Um den Screenshot platzieren zu können, wird in PowerShell ein Bitmap Objekt benötigt. Hier helfen die vielen Funktionen von System.Drawing.Bitmap. Die wohl einfachste Methode ist die Angabe der Breite und Höhe in Pixel.

$bitmap = New-Object System.Drawing.Bitmap $Width, $Height

Grafik Objekt erstellen

Um ein Bitmap-Objekt mit PowerShell füllen zu können, wird ein Grafik Objekt benötigt. Für den Screenshot erstellen wir das Grafik-Objekt einfach aus dem Bitmap-Objekt, damit die gleiche Größe (Breite & Höhe) in Pixel verwendet wird.

$graphic = [System.Drawing.Graphics]::FromImage($bitmap)

Screenshot erstellen

Nun wird der eigentliche Screenshot erstellt. Hierfür wird CopyFromScreen des Grafik-Objekts verwendet. Natürlich müssen die Koordinaten angegeben werden und mit $bitmap.Size die Größe des Screenshots.

$graphic.CopyFromScreen($Left, $Top, 0, 0, $bitmap.Size)

Screenshot speichern

Das aufgenommene Bild ist nun im Grafik-Objekt vorhanden. Doch natürlich möchte man den erstellten Screenshot in eine Datei abspeichern. Auch das ist relativ einfach umzusetzen:

$bitmap.Save("C:\users\YOURUSER\Desktop\YOURFILE.bmp")

Das komplette PowerShell Script zum Erstellen eines Screenshots unter Windows

Oben habe ich die einzelnen Schritte erklärt, wie man mit PowerShell und der Hilfe von .NET ein Hardcopy des Windows Desktops erstellen kann. Um auf die NET-Framework Ressourcen zugreifen zu können, müssen im Script noch die passenden AssemblyName´s hinzugefügt werden.

Add-Type -AssemblyName System.Windows.Forms
Add-type -AssemblyName System.Drawing

Zusammengesetzt sollte das Script dann so aussehen:

$yourfile = "C:\users\USERNAME\Desktop\Screenshot.bmp"

Add-Type -AssemblyName System.Windows.Forms
Add-type -AssemblyName System.Drawing

#Infos zur Aufloesung ermitteln
$Screen = [System.Windows.Forms.SystemInformation]::VirtualScreen
$Width = $Screen.Width
$Height = $Screen.Height
$Left = $Screen.Left
$Top = $Screen.Top

# Bitmap-Objekt mit der Aufloesung erzeugen
$bitmap = New-Object System.Drawing.Bitmap $Width, $Height

# Grafik-Objekt aus Bitmap erzeugen
$graphic = [System.Drawing.Graphics]::FromImage($bitmap)

# Screenshot aufnehmen
$graphic.CopyFromScreen($Left, $Top, 0, 0, $bitmap.Size)

# Datei speichern
$bitmap.Save($yourfile) 
Johannes Huber
 

In seiner Freizeit macht Johannes nichts lieber, als für ITnator Beiträge zu schreiben. Input bekommt er hierfür von Problemen in der IT Administration von Servern, Clients und vielen weiteren IT Komponenten.

Click Here to Leave a Comment Below 0 comments