PowerShell Auflösung zu .txt (Skript als exe) falsche Auflösung?!
Ich habe folgendes Skript um die Bildschirmauflösung herauszufinden, was auch in PowerShell super funktioniert:
Add-Type -AssemblyName System.Windows.Forms
$Width = "{0}" -f [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize.Width
$Height = "{0}" -f [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize.Height
"Width = $Width
Height = $Height" >> .\Auflösung.txt
Ausgabe:
Width = 2560
Height = 1440
Ich möchte dieses Script gerne als exe haben und habe es mit ps1 to exe konvertieren lassen, das Ergebnis sieht dann so aus.
Ausgabe:
Width = 2048
Height = 1152
Kann mir jemand sagen wieso das so ist, und wie ich das Script als exe bekomme das auch die Ausgabe richtig ist?
-timsen-96
Add-Type -AssemblyName System.Windows.Forms
$Width = "{0}" -f [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize.Width
$Height = "{0}" -f [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize.Height
"Width = $Width
Height = $Height" >> .\Auflösung.txt
Ausgabe:
Width = 2560
Height = 1440
Ich möchte dieses Script gerne als exe haben und habe es mit ps1 to exe konvertieren lassen, das Ergebnis sieht dann so aus.
Ausgabe:
Width = 2048
Height = 1152
Kann mir jemand sagen wieso das so ist, und wie ich das Script als exe bekomme das auch die Ausgabe richtig ist?
-timsen-96
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 380614
Url: https://administrator.de/forum/powershell-aufloesung-zu-txt-skript-als-exe-falsche-aufloesung-380614.html
Ausgedruckt am: 06.04.2025 um 17:04 Uhr
28 Kommentare
Neuester Kommentar
Moin,
Was genau hast Du eingegeben bzw. was steht in Deinem Skript?
Was genau möchtest Du tun? Bei meiner Lösung steht die Zahl als neue Zeile in der Ausgabedatei.
Liebe Grüße
Erik
Zitat von @timsen-96:
Dann kommt eine Fehlermeldung:
Es wurde kein Positionsparameter gefunden, der das Argument "Get-WmiObject" akzeptiert.
Dann kommt eine Fehlermeldung:
Es wurde kein Positionsparameter gefunden, der das Argument "Get-WmiObject" akzeptiert.
Was genau hast Du eingegeben bzw. was steht in Deinem Skript?
Und wie kann ich dann die einzelnen Zahlen wie oben mit $Width und $Height in einer txt Datei an einer bestimmten Position erstellen lassen?
Was genau möchtest Du tun? Bei meiner Lösung steht die Zahl als neue Zeile in der Ausgabedatei.
Liebe Grüße
Erik
Moin,
Nö, denn dann käme nicht diese Fehlermeldung. Die kommt nur dann, wenn Du vorher einen anderen Befehl hast, der einen Positionsparameter erwartet, zu dem get-wmiObject nicht passt.
Ich würde gerne die Möglichkeit haben die einzelnen Angaben wie auch in meiner Frage oben steht mit $Height und $Width individuell einsetzen zu können, für verschiedene Scripte.
Nö, da steht, dass Du das in eine Textdatei schreiben willst. Von Weiterverarbeiten steht da nichts. Aber auch das ist kein Problem:
Jetzt stehen die beiden Zahlen nackig in den beiden Variablen und Du kannst damit machen, was Du willst.
Nochmal: Die Methode, das über den Form-Konstruktor zu machen, ist einfach ungeeignet. Die ist dafür gedacht, dass Du Formulare an die Bildschirmauflösung anpassen kannst.
Liebe Grüße
Erik
Nö, denn dann käme nicht diese Fehlermeldung. Die kommt nur dann, wenn Du vorher einen anderen Befehl hast, der einen Positionsparameter erwartet, zu dem get-wmiObject nicht passt.
Ich würde gerne die Möglichkeit haben die einzelnen Angaben wie auch in meiner Frage oben steht mit $Height und $Width individuell einsetzen zu können, für verschiedene Scripte.
Nö, da steht, dass Du das in eine Textdatei schreiben willst. Von Weiterverarbeiten steht da nichts. Aber auch das ist kein Problem:
$height = $(get-wmiObject win32_desktopmonitor).screenheigth
$width = $(get-wmiObject win_32_desktopmonitor).screenwidth
Jetzt stehen die beiden Zahlen nackig in den beiden Variablen und Du kannst damit machen, was Du willst.
Nochmal: Die Methode, das über den Form-Konstruktor zu machen, ist einfach ungeeignet. Die ist dafür gedacht, dass Du Formulare an die Bildschirmauflösung anpassen kannst.
Liebe Grüße
Erik
Hi
Darüber funktioniert das nur bei einem einzelnen Monitor. Bei einem Multi Monitor Setup braucht man offenbar WinForms
von https://social.technet.microsoft.com/Forums/lync/en-US/219cf510-2c8d-431 ... geklaut
Darüber funktioniert das nur bei einem einzelnen Monitor. Bei einem Multi Monitor Setup braucht man offenbar WinForms
Add-Type -AssemblyName System.Windows.Forms
$Monitors = [System.Windows.Forms.Screen]::AllScreens
foreach ($Monitor in $Monitors)
{
$DeviceName = (($Monitor.DeviceName).replace("\", "")).replace(".", "")
$Width = $Monitor.bounds.Width
$Height = $Monitor.bounds.Height
Write-Host "$DeviceName - $Width x $height"
}
Zitat von @timsen-96:
Da habe ich leider das gleiche Problem wie bei der Methode die ganz am Anfang hatte und zwar wird der Hauptmonitor (2560x1440) als 2048x1152 angezeigt!
Ganz einfach, deine Skalierung steht nicht auf 100%, odr du hast ein HighDPI Monitor, der Output liefert dir immer die skalierte Auflösung entsprechend deiner Einstellung.Da habe ich leider das gleiche Problem wie bei der Methode die ganz am Anfang hatte und zwar wird der Hauptmonitor (2560x1440) als 2048x1152 angezeigt!
https://stackoverflow.com/questions/35963727/powershell-script-returning ...
Da nicht jede Anwendung DPI-Aware ist sind die Ergebnisse in unterschiedlichen Hostumgebungen auch unterschiedlich. That's the reason.
https://powershell.org/forums/topic/how-to-get-screen-resolution-with-dp ...
http://james-ramsden.com/c-get-dpi-screen/
Grüße Uwe
Ooops! Da macht man es einmal nicht so, dass man es testet und aus der Konsole kopiert und schon passiert's. Tschulligung!
Add-Type -A System.Windows.Forms
Add-Type @'
using System;
using System.Runtime.InteropServices;
using System.Drawing;
public class DPI {
[DllImport("gdi32.dll")]
static extern int GetDeviceCaps(IntPtr hdc, int nIndex);
public enum DeviceCap {
VERTRES = 10,
DESKTOPVERTRES = 117
}
public static float scaling() {
Graphics g = Graphics.FromHwnd(IntPtr.Zero);
IntPtr desktop = g.GetHdc();
int LogicalScreenHeight = GetDeviceCaps(desktop, (int)DeviceCap.VERTRES);
int PhysicalScreenHeight = GetDeviceCaps(desktop, (int)DeviceCap.DESKTOPVERTRES);
return (float)PhysicalScreenHeight / (float)LogicalScreenHeight;
}
}
'@ -ReferencedAssemblies 'System.Drawing.dll'
$ratio = [Math]::round([DPI]::scaling(), 2)
$size = [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize
$height = [int]($size.Height * $ratio)
$width = [int]($size.Width * $ratio)
"$width x $height"
Dito, die meisten so rumfliegenden Wrapper taugen nüscht.
Warum nicht gleich in c# schreiben? Überflüssiger Balast fällt dann gleich auch weg ...
Warum nicht gleich in c# schreiben? Überflüssiger Balast fällt dann gleich auch weg ...
https://gallery.technet.microsoft.com/scriptcenter/PS2EXE-GUI-Convert-e7 ...
Warum nicht gleich das inoffizielle MS-Tool aus der Gallery verwenden?
Warum nicht gleich das inoffizielle MS-Tool aus der Gallery verwenden?
Interessante Seite. Direkt beim Aufruf
Der Download wurde verboten.;https: //authedmine. com/lib/authedmine.min.js;not-a-virus:HEUR:RiskTool.Script.Miner.heur;https://authedmine.com/lib/authedmine.min.js;Firefox;Legales Programm, mit dem Angreifer den Computer oder die Benutzerdaten beschädigen können;07/19/2018 23:10:42
edit: Hab das Script von Uwe grade bei mir auf meinem PC ausgeführt. Nur ein Display ist in FullHD im Einsatz. Sowohl das Script, als auch die Exe (kompiliert mit PS2EXE-GUI) zeigt mit 1920x1080 an.
Der Download wurde verboten.;https: //authedmine. com/lib/authedmine.min.js;not-a-virus:HEUR:RiskTool.Script.Miner.heur;https://authedmine.com/lib/authedmine.min.js;Firefox;Legales Programm, mit dem Angreifer den Computer oder die Benutzerdaten beschädigen können;07/19/2018 23:10:42
edit: Hab das Script von Uwe grade bei mir auf meinem PC ausgeführt. Nur ein Display ist in FullHD im Einsatz. Sowohl das Script, als auch die Exe (kompiliert mit PS2EXE-GUI) zeigt mit 1920x1080 an.
Ganz einfach, hinsetzen und lernen. Die hälfte hast du oben schon als C#
. Der Rest ist Pippifax und zu 99,9 % gleich wie in Powershell.
Der Bildschirm wird nativ bei 1282 x 1049 betrieben, dort ist im Beispiel eine Skalierung von 125% aktiv, bei allen Methoden als PS1, EXE oder in der ISE konsistente Ausgaben :

That's it, works as designed.
Grüße Uwe
Das bedeutet wohl das mein Vorhaben (Die Bildschirmauflösung egal was für eine Skalierung verwendet wird, individuell in einer txt Datei eintragen zu lassen, als exe Datei) so nicht machbar ist.
Doch siehe, everything the same:Der Bildschirm wird nativ bei 1282 x 1049 betrieben, dort ist im Beispiel eine Skalierung von 125% aktiv, bei allen Methoden als PS1, EXE oder in der ISE konsistente Ausgaben :
Obwohl das Problem nicht unbedingt an der Konvertierung liegt, weil wenn ich das Script mit Windows Power Shell öffne, also nicht mit ISE dann habe ich genau das gleiche Problem.
Entweder du erzählst uns hier was vom Pferd, oder wir kennen deine Umgebung und deinen installierten Ramsch nicht... That's it, works as designed.
Grüße Uwe