kpunkt
Goto Top

Display-Skalierung per Powershell ändern

Mahlzeit!

Ich hab der Buchhaltung jetzt mal was gutes getan und hab denen sieben gekurvte 34-Zöller mit Ultrabreit (3440x1440) gekauft.
Momentan werkeln bei denen überall 24-Zöller in FHD (und da bei der einen oder anderen mit 125er Skalierung).
Heißt: die 34er werden da eben mit 3440x1440 und 125% Skalierung laufen. Sieht hübsch aus, ist gut lesbar und man arbeitet quasi wie mit zwei bisherigen 24-Zöller.
Ich muss da, bzw. werde da sowieso manuell am Client arbeiten, weil ich da sicher gehen mus, dass die neuesten Intel-UHD-Treiber drauf sind, damit die auch die 3440 bzw. die 1440 können.

Weil ich das aber selber noch nie gemacht habe, habe ich mir gedacht, man könnte ja Auflösung und Skalierung per Skript und GPO an die Rechner schicken. Sechs der sieben Windows-Clients sind baugleich.
Jetzt habe ich ein bisschen bei meinem Client rumgewerkelt, aber ich hab so ein Skript nicht hinbekommen.
Auflösung geht, aber die Skalierung...Wie krieg ich die hin?

Mein Versuch (ohne Skalierung)
1
2
3
4
5
6
7
if (-not (Get-Module -ListAvailable -Name DisplaySettings)) {
       Install-Module -Name DisplaySettings -Force -Scope CurrentUser
}

Import-Module DisplaySettings

Set-DisplayResolution -Width 3440 -Height 1440

Im Netz gesucht und der Schwarm meint, es müssen die LogPixels in HKCU:\Control Panel\Desktop geändert werden.
96 für 100%, 120 für 125%.
Oke....
Mein Ergebnis unter Mithilfe Internetz sieht dann so aus:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Set-DisplayResolution -Width 3440 -Height 1440

$registryPath = "HKCU:\Control Panel\Desktop"  
$scalingKey = "LogPixels"  

Set-ItemProperty -Path $registryPath -Name $scalingKey -Value 120

$code = @"  
using System.Runtime.InteropServices;
public class DisplaySettings {
    [DllImport("user32.dll")]  
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool SystemParametersInfo(uint uiAction, uint uiParam, uint pvParam, uint fWinIni);
    
    public const uint SPI_SETLOGPIXELS = 0x2005;
    public const uint SPIF_UPDATEINIFILE = 0x01;
    public const uint SPIF_SENDWININICHANGE = 0x02;
}
"@  

Add-Type -TypeDefinition $code
[DisplaySettings]::SystemParametersInfo(0x2005, 120, 0, 0x01 -bor 0x02)

Naja, was soll ich sagen....die Auflösung wird geändert und es wird auch der Wert für die LogPixels geschrieben.
Alleine die Skalierung bleibt immer gleich. Ich hab sogar mal neu gestartet.

Hat jemand von euch eine Idee, wie man die Skalierung per Powershell ändert?

k.

Content-ID: 672170

Url: https://administrator.de/forum/display-skalierung-per-powershell-aendern-672170.html

Ausgedruckt am: 30.03.2025 um 10:03 Uhr

BiberMan
BiberMan 26.03.2025 aktualisiert um 15:44:46 Uhr
Goto Top
aber die Skalierung...Wie krieg ich die hin?
1
2
3
New-ItemProperty 'HKCU:\Control Panel\Desktop' -Name "LogPixels" -Value 120 -Force -PropertyType DWord  
New-ItemProperty 'HKCU:\Control Panel\Desktop' -Name "Win8DpiScaling" -Value 1 -Force -PropertyType DWord  
logoff
kpunkt
kpunkt 26.03.2025 aktualisiert um 16:00:22 Uhr
Goto Top
-PropertyType kennt Powershell nicht. Das wirft es als Fehlermeldung raus.
Ohne dem PropertyType läufts durch, aber die Skalierung wird nicht geändert nach dem logoff.

Gerade noch aschnell die Meldung angesehen:
1
2
3
4
5
6
7
8
9
10
11
The settings change was successful.


Win8DpiScaling : 1
PSPath         : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Control Panel\Desktop
PSParentPath   : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Control Panel
PSChildName    : Desktop
PSDrive        : HKCU
PSProvider     : Microsoft.PowerShell.Core\Registry

False
Wo kommt dieses False her?
BiberMan
BiberMan 26.03.2025 aktualisiert um 16:01:49 Uhr
Goto Top
Zitat von @kpunkt:

-PropertyType kennt Powershell nicht. Das wirft es als Fehlermeldung raus.
Ohne dem PropertyType läufts durch, aber die Skalierung wird nicht geändert nach dem logoff.



Doch kennt sie, klappt hier problemlos
https://learn.microsoft.com/de-de/powershell/module/microsoft.powershell ...
kpunkt
kpunkt 26.03.2025 um 16:08:34 Uhr
Goto Top
Oke...aber Computer sagt nein
2025-03-26 16_04_19-administrator_ windows powershell ise

Hier mal das ganze Gekritzel falls ich da einen Dreher hab, den ich nicht sehe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Set-DisplayResolution -Width 3440 -Height 1440

Set-ItemProperty 'HKCU:\Control Panel\Desktop' -Name "LogPixels" -Value 120 -Force -PropertyType DWord  
New-ItemProperty 'HKCU:\Control Panel\Desktop' -Name "Win8DpiScaling" -Value 1 -Force -PropertyType DWord  

$code = @"  
using System.Runtime.InteropServices;
public class DisplaySettings {
    [DllImport("user32.dll")]  
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool SystemParametersInfo(uint uiAction, uint uiParam, uint pvParam, uint fWinIni);
    
    public const uint SPI_SETLOGPIXELS = 0x2005;
    public const uint SPIF_UPDATEINIFILE = 0x01;
    public const uint SPIF_SENDWININICHANGE = 0x02;
}
"@  

Add-Type -TypeDefinition $code
[DisplaySettings]::SystemParametersInfo(0x2005, 120, 0, 0x01 -bor 0x02)

#logoff
BiberMan
BiberMan 26.03.2025 aktualisiert um 16:12:23 Uhr
Goto Top
Hast nicht korrekt übernommen du nutzt statt New-ItemProperty "set-itemproperty", ändere es und es klappt ohne Fehler.
kpunkt
kpunkt 26.03.2025 aktualisiert um 16:15:51 Uhr
Goto Top
Jupp, mein Fehler. Hatte mich schon gewundert, wieso er nur an einer Stelle meckerte.
Geändert und getestet.
Leider bleibt die Skalierung bei 100%. Natürlich ist da nach dem logoff gemeint.
BiberMan
BiberMan 26.03.2025 aktualisiert um 16:22:28 Uhr
Goto Top
Hm, klappt hier einwandfrei auf ner W11 Kiste, vielleicht haut dir da dein Graka-Treiber zwischen die Beine, k.A.
kpunkt
kpunkt 26.03.2025 um 16:22:32 Uhr
Goto Top
Fällt mir gerade ein....das ist ja als Admin.
Muss da nicht der eingeloggte User damit....muss mal schauen....
BiberMan
BiberMan 26.03.2025 aktualisiert um 16:25:14 Uhr
Goto Top
HKCU ist natürlich für den aktuellen User ...
pebcak7123
pebcak7123 26.03.2025 um 16:24:57 Uhr
Goto Top
natürlich musst du das im user kontext laufen lassen oder aber vorher den registry hive des users laden
kpunkt
kpunkt 26.03.2025 um 16:29:25 Uhr
Goto Top
Jupp....verquer im Kopp.
Da muss ich am Freitag nochmal spielen.
Ich bin ja nicht soooo der große Scripter.

Aber schon mal Danke