Anzeige

Am Puls von Microsoft

Anzeige

Kleineres Powershell Problem

edv.kleini

Win11 Registry-Fummler
Also
Folgendes Problem tut sich bei diesen Powershell Skripten auf.
Diese Skripte hatten wir hier im Mai, Juni 2024 schon einmal behandelt.
Im Grunde funktioniert ja alles und das auch richtig,
aber bei einem meiner beiden Notebooks wird die Auflösung doppelt angezeigt.
Bei meinen PCs wird die Auflösung immer "einstellig" bzw. richtig angezeigt.
Zugegeben... in Powershell bin ich noch nicht so bewandert, durch aus lernfähig und neugierig.

Die Bilder 1 und 2 zeigen das Notebook, wo es nicht richtig funktioniert.

1723132008547.jpeg

1723132032745.jpeg

Die Bilder 3 und 4 zeigen das Notebook, wo es richtig funktioniert.
Aus Gründen des Privatsphärenschutzes habe ich die UUID ausgegraut.

1723132080733.jpeg


1723132108887.jpeg


Es hat also nichts mit dem Skript, sondern höchstwahrscheinlich mit dem Notebook selbst zu tun.
Der Witz ist: das kleine Programm qres.exe liest es richtig aus.

Was ich schon probiert habe bei der Auflösung 1366 * 768 ist:
Code:
if ($Computername -eq "JOJO238-2") { $Horizontal = "1366" }
if ($Computername -eq "JOJO238-2") { $Vertical = "768" }
Soweit so gut und das funktioniert dann natürlich auch.
Auch auf anderen Computern.
Aber das Ganze ist halt nur für eine Auflösung und nicht Sinn und Zweck.
Das Skript soll ja universell für alle Computer funktionieren.

Was nicht funktionierte:
Beispiel:
Code:
if ($Horizontal -eq "1366 1366") { $Horizontal = "1366" }
if ($Vertical -eq "768 768") { $Vertical = "768" }
Das habe ich dann in allen Computern drinstehen : Horizontal 1366 und Vertikal 768.
Auch bei anderen Auflösungen wie z.B. 1920 * 1080 auf anderen Computern.
Und das kann es ja nicht sein.

Ich versuche dem Powershell Skript beizubringen, dass wenn die
Auflösung doppelt gezeigt wird, dasss sie dann eben nur einfach angezeigt wird.

Vllt. kann ja jemand helfen.
Das Original-Skript lege ich hier auch mal als Text-Datei rein.
Danke an die Leser hier, die mir damals schon geholfen haben.:love:
Code:
set-ExecutionPolicy -ExecutionPolicy Bypass -force
    $Host.UI.RawUI.WindowTitle = 'Abfrage von Kerndaten'
    $Host.UI.RawUI.ForegroundColor = 'Black'
    $Host.UI.RawUI.BackgroundColor = 'White'
    cls
    $Mein_Betriebssystem = (Get-CimInstance Win32_OperatingSystem).Caption
    $Version = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').DisplayVersion
    $Architektur = (Get-CimInstance Win32_operatingsystem).OSArchitecture
    $Buildnummer = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').CurrentBuild
    $Erweiterung = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').UBR
    $Computername = (Get-CimInstance Win32_ComputerSystem).Name
    $Meine_Domaene = (Get-CimInstance Win32_ComputerSystem).Domain
    $Benutzername = (Get-CimInstance Win32_ComputerSystem).PrimaryOwnerName
    $User_ID = [System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value
    $Horizontal = (Get-CimInstance Win32_VideoController).CurrentHorizontalResolution
    $Vertical = (Get-CimInstance Win32_VideoController).CurrentVerticalResolution
Write-Host ('
Die wichtigsten Kerndaten dieses Systems werden hier mit Powershell angezeigt.')
Write-Host
Write-Host "Auf Ihrem Computer ist" -NoNewLine; Write-Host " $Mein_Betriebssystem" -ForegroundColor Green -NoNewLine; Write-Host ", Version" -NoNewLine; Write-Host " $Version" -ForegroundColor Green -NoNewLine; Write-Host " als" -NoNewLine; Write-Host " $Architektur" -ForegroundColor Green -NoNewLine; Write-Host " Betriebssystem installiert."
Write-Host
Write-Host "Die momentane Buildnummer lautet" -NoNewLine; Write-Host " $Buildnummer" -ForegroundColor Green -NoNewLine; Write-Host "." -ForegroundColor Green -NoNewLine; Write-Host "$Erweiterung" -ForegroundColor Green -NoNewLine; Write-Host "."
Write-Host
Write-Host "Der Name dieses Computers lautet" -NoNewLine; Write-Host " $Computername" -ForegroundColor Green -NoNewLine; Write-Host "."
Write-Host
Write-Host "Der Name der Arbeitsgruppe lautet" -NoNewLine; Write-Host " $Meine_Domaene" -ForegroundColor Green -NoNewLine; Write-Host "."
Write-Host
Write-Host "Die User-ID des momentan angemeldeten Benutzers" -NoNewLine; Write-Host " $Benutzername" -ForegroundColor Green -NoNewLine; Write-Host " lautet" -NoNewLine; Write-Host " $User_ID" -ForegroundColor Green -NoNewLine; Write-Host "."
Write-Host
Write-Host "Die Bilschirmauflösung ist" -NoNewLine; Write-Host " $Horizontal" -ForegroundColor Green -NoNewLine; Write-Host " Bildpunkte horizontal" -NoNewLine; Write-Host " und" -NoNewLine; Write-Host " $Vertical" -ForegroundColor Green -NoNewLine; Write-Host " Bildpunkte vertikal."
Write-Host
Write-Host Hier werden Ihnen nur die zuletzt installierten Windows Updates angezeigt.
Write-Host "Darunter fallen jedoch nicht Treiber, Office oder unter WSUS empfangene Updates."
Write-Host WSUS steht für Windows Server Update Services. Die Server sind von Microsoft.
Write-Host
Write-Host "HotFixID  Beschreibung    Installiert am     " -ForegroundColor Blue -NoNewline; Write-Host "(Eine genaue Uhrzeitauflösung ist nicht möglich.)" -ForegroundColor Red
Write-Host -ForegroundColor Blue ---------   ---------------    -------------------
$Host.UI.RawUI.ForegroundColor = 'Blue'
Get-HotFix | Select-Object -Property HotFixID, Description, Installedon | Sort-Object -Property InstalledOn | Format-Table -HideTableHeaders
$Host.UI.RawUI.ForegroundColor = 'Black'
Write-Host 'Zum Beenden drücken Sie eine beliebige Taste . . . '-NoNewLine;[void]($Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown'));Write-Host
exit
 

Anhänge

  • Check_for_Updates2.txt
    3,6 KB · Aufrufe: 54
Zuletzt bearbeitet:
Anzeige
Die Klasse Win32_VideoController liefert ggfs. mehrere Einträge zurück, falls mehrere Videocontroller vorhanden sind.

Win32_VideoController class - Win32 apps | Microsoft Learn

Dort findet sich ein Powershell Beispiel, wie man die Informationen aller Videocontroller einzeln ausliest.
Lass das bitte mal laufen und schau, ob dir auf einem Gerät damit mehrere Videocontroller angezeigt werden.

Die erste Zeile "set-ExecutionPolicy -ExecutionPolicy Bypass -force" ist übrigens unsinnig. Wenn die Execution Policy nicht so gesetzt ist, dass dein Script aufgerufen werden darf, wird diese Zeile eh nicht ausgeführt. Ist die Execution Policy bereits so gesetzt, dass Scripts ausgeführt werden, brauchst du sie nicht zu ändern. Weg damit! :)
 
Ich probiere gerade hiermit rum

Code:
$Computername = (Get-CimInstance Win32_ComputerSystem).Name

$horizontal = (Get-CimInstance Win32_VideoController).Currenthorizontalresolution
$vertical = (Get-CimInstance Win32_VideoController).Currentverticalresolution
$horizontal2 =("$horizontal").remove(4)
$vertical2 =("$vertical").remove(4)

write-host $Computername
write-host "Abfrage Test welcher Computer ist das..."
if ($Computername -eq "JOJO238-2") {write-host $horizontal2 mal $vertical2}
if ($Computername -ne "JOJO238-2") {write-host $horizontal mal $vertical}
pause

So funktioniert es für mich und das reicht mir für meine Computer völlig aus!

Kann als Lösung markiert werden...
 
Zuletzt bearbeitet:
Die Bilder 1 und 2 zeigen das Notebook, wo es nicht richtig funktioniert.
Bitte führe auf diesem Notebook mal in der Windows PowerShell folgenden Befehl aus:
Code:
Get-CimInstance Win32_VideoController | Out-File "$env:UserProfile\Desktop\VideoController.txt"

Füge danach das Log VideoController.txt an deine nächste Antwort an.
 
Wie gewünscht im Anhang
Die Zeile habe ich abgeändert in
Get-CimInstance Win32_VideoController | Out-File "f:\VideoController.txt"
Erklärung:
Laufwerk F: ist meine Spielwiese für sowas und nicht mein Desktop...
Sieht wohl laut LOG-Datei so aus, als wäre der Controller 2 mal drin!

PCI\VEN_8086&DEV_2A42&SUBSYS_1526103C&REV_07\3&B1BFB68&0&10
PCI\VEN_8086&DEV_2A43&SUBSYS_1526103C&REV_07\3&B1BFB68&0&11
aberwitzig...

So´n uraltes Notebook HP 620 von vor dem Krieg, aber ich weiss nicht von vor welchem
und dann 2 Video-Controller onboard!
 

Anhänge

  • VideoController.txt
    9,6 KB · Aufrufe: 48
Zuletzt bearbeitet:
Das hier habe ich auch noch getestet:
Code:
Add-Type -AssemblyName System.Windows.Forms
$screen_cnt  = [System.Windows.Forms.Screen]::AllScreens.Count
$col_screens = [system.windows.forms.screen]::AllScreens

$info_screens = ($col_screens | ForEach-Object {if ("$($_.Primary)" -eq "True") {$monitor_type = "Die primäre Anzeige hat eine Auflösung von"} else {$monitor_type = "Die sekundäre Anzeige hat eine Auflösung von"}write-host $monitor_type "$($_.Bounds.Width) Bildpunkten horizontal und $($_.Bounds.Height) Bildpunkten vertikal."})

$info_screens
write-host
pause
und so sieht dann das fertige Skript jetzt aus:
Code:
Add-Type -AssemblyName System.Windows.Forms
$screen_cnt  = [System.Windows.Forms.Screen]::AllScreens.Count
$col_screens = [system.windows.forms.screen]::AllScreens
    $Host.UI.RawUI.WindowTitle = 'Abfrage von Kerndaten'
    $Host.UI.RawUI.ForegroundColor = 'Black'
    $Host.UI.RawUI.BackgroundColor = 'White'
    cls
    $Mein_Betriebssystem = (Get-CimInstance Win32_OperatingSystem).Caption
    $Version = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').DisplayVersion
    $Architektur = (Get-CimInstance Win32_operatingsystem).OSArchitecture
    $Buildnummer = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').CurrentBuild
    $Erweiterung = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').UBR
    $Computername = (Get-CimInstance Win32_ComputerSystem).Name
    $Meine_Domaene = (Get-CimInstance Win32_ComputerSystem).Domain
    $Benutzername = (Get-CimInstance Win32_ComputerSystem).PrimaryOwnerName
    $User_ID = [System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value
$esc = [char]27
Write-Host ('
Die wichtigsten Kerndaten dieses Systems werden hier mit Powershell angezeigt.')
Write-Host 
Write-Host "Auf Ihrem Computer ist" -NoNewLine; Write-Host " $Mein_Betriebssystem" -ForegroundColor Green -NoNewLine; Write-Host ", Version" -NoNewLine; Write-Host " $Version" -ForegroundColor Green -NoNewLine; Write-Host " als" -NoNewLine; Write-Host " $Architektur" -ForegroundColor Green -NoNewLine; Write-Host " Betriebssystem installiert."
Write-Host 
Write-Host "Die momentane Buildnummer lautet" -NoNewLine; Write-Host " $Buildnummer" -ForegroundColor Green -NoNewLine; Write-Host "." -ForegroundColor Green -NoNewLine; Write-Host "$Erweiterung" -ForegroundColor Green -NoNewLine; Write-Host "."
Write-Host 
Write-Host "Der Name dieses Computers lautet" -NoNewLine; Write-Host " $Computername" -ForegroundColor Green -NoNewLine; Write-Host "."
Write-Host 
Write-Host "Der Name der Arbeitsgruppe lautet" -NoNewLine; Write-Host " $Meine_Domaene" -ForegroundColor Green -NoNewLine; Write-Host "."
Write-Host 
Write-Host "Die User-ID des momentan angemeldeten Benutzers" -NoNewLine; Write-Host " $Benutzername" -ForegroundColor Green -NoNewLine; Write-Host " lautet" -NoNewLine; Write-Host " $User_ID" -ForegroundColor Green -NoNewLine; Write-Host "."
Write-Host
$info_screens = ($col_screens | ForEach-Object {if ("$($_.Primary)" -eq "True") {$monitor_type = "Die primäre Anzeige hat eine Auflösung von"} else {$monitor_type = "Die sekundäre Anzeige hat eine Auflösung von"}write-host "$monitor_type" -NoNewLine; write-host  " $($_.Bounds.Width) " -foregroundcolor magenta -NoNewLine; write-host "Bildpunkten horizontal und " -NoNewLine; write-host  "$($_.Bounds.Height) " -ForeGroundcolor magenta -NoNewLine; write-host "Bildpunkten vertikal."; write-host})
$info_screens
Write-Host Hier werden Ihnen nur die zuletzt installierten Windows Updates in aufsteigender Reihenfolge angezeigt.
Write-Host "Darunter fallen jedoch nicht Treiber, Office oder unter WSUS empfangene Updates."
Write-Host WSUS steht für Windows Server Update Services. Die Server sind von Microsoft.
Write-Host 
Write-Host "HotFixID  Beschreibung    Installiert am     " -ForegroundColor Blue -NoNewline; Write-Host "(Eine genaue Uhrzeitauflösung ist nicht möglich.)" -ForegroundColor Red
Write-Host -ForegroundColor Blue ---------   ---------------    -------------------
$Host.UI.RawUI.ForegroundColor = 'Blue'
Get-HotFix | Select-Object -Property HotFixID, Description, Installedon | Sort-Object -Property InstalledOn | Format-Table -HideTableHeaders
$Host.UI.RawUI.ForegroundColor = 'Black'
Write-Host 'Zum Beenden drücken Sie eine beliebige Taste . . . '-NoNewLine;[void]($Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown'));Write-Host
exit

Ansi-Format nicht vergessen!

Dank Deiner Hilfe und mit genügend Spucke und Geduld kann sich das Skript so jetzt sehen lassen !!!
 
Zuletzt bearbeitet:
Wie man die Auflösung der primären Anzeige in einem DOS-Script ohne Powershell hinbekommt
mittels wmic oder qres.exe ist ja noch einfach und machbar.
Aber wie macht man das in einem DOS-Fenster für einen zweiten Monitor
sprich für eine sekundäre Anzeige und nur dann wenn dieser zweite Monitor auch wirklich angeschlossen ist?
Gute Frage nächste Frage....
 
Zuletzt bearbeitet:
Erfahrungswerte:
Schließt man mehrere Monitore an, funktioniert das Powershell Skript soweit.
Aber wenn man einen Monitor mit sehr hoher Auflösung anschließt (oder ´nen 4K Fernseher),
dann stellt MS Windows ja die Skalierung anders ein, als die üblichen 100 Prozent.
Und genau darin liegt das Problem.
Enweder Powershell oder oder die CIM Instance Win32 berechnen dann einen Wert für die Auflösung,
der gar nicht stimmt bzw. anders ist, als der angezeigte Wert in den Windows Systemeinstellungen.

Trotzdem ist das schon ganz lustig so...
Die Bilder zeigen einmal einen alten VGA Monitor mit drangehängt bei 1280 mal 1024 Bildpunkten
und dann meinen Fernseher,
(wo es auch sein kann dass, dieser Fernseher die Werte der Auflösung bei anderer Skalierung nicht richtig zurück gibt,
aber was Anderes habe ich nicht zum Testen).
wo ich ein bisschen mit der Auflösung gespielt habe, immer bei einer Skalierung von 100 Prozent:
1723248873592.png

1723248905173.png


1723248930402.png
 
Zuletzt bearbeitet:
Ich krich noch die Krise mit Powershell.
Also
Ich schließe an mein Notebook mein TV mit 1920*1080 an und stelle die Auflösung passend dazu ein und
erweitere die Anzeigen primär Notebook Display Skalierung 100 % und sekundär TV mit Skalierung 125%.
Rufe ich das Powershellscript auf

Code:
Add-Type -AssemblyName System.Windows.Forms
$screen_cnt  = [System.Windows.Forms.Screen]::AllScreens.Count
$col_screens = [system.windows.forms.screen]::AllScreens
    $Host.UI.RawUI.WindowTitle = 'Abfrage von Kerndaten'
    $Mein_Betriebssystem = (Get-CimInstance Win32_OperatingSystem).Caption
    $Version = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').DisplayVersion
    $Architektur = (Get-CimInstance Win32_operatingsystem).OSArchitecture
    $Buildnummer = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').CurrentBuild
    $Erweiterung = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').UBR
    $Computername = (Get-CimInstance Win32_ComputerSystem).Name
    $Meine_Domaene = (Get-CimInstance Win32_ComputerSystem).Domain
    $Benutzername = (Get-CimInstance Win32_ComputerSystem).PrimaryOwnerName
    $User_ID = [System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value
$esc = [char]27
Write-Host ('
Die wichtigsten Kerndaten dieses Systems werden hier mit Powershell angezeigt.')
Write-Host
Write-Host Auf Ihrem Coumputer ist $Mein_Betriebssystem, Version $Version als $Architektur Betriebssystem installiert.
Write-Host
Write-Host Die momentane Buildnummer lautet $Buildnummer'.'$Erweiterung'.'
Write-Host
Write-Host Der Name dieses Computers lautet $Computername'.'
Write-Host
Write-Host Der Name der Arbeitsgruppe lautet $Meine_Domaene'.'
Write-Host
Write-Host Die User-ID des momentan angemeldeten Benutzers $Benutzername lautet $User_ID'.'
Write-Host
$info_screens = ($col_screens | ForEach-Object {if ("$($_.Primary)" -eq "True") {$monitor_type = "Die primäre Anzeige hat eine Auflösung von"} else {$monitor_type = "Die sekundäre Anzeige hat eine Auflösung von"}write-host $monitor_type "$($_.Bounds.Width) Bildpunkten horizontal und $($_.Bounds.Height) Bildpunkten vertikal.";write-host})
$info_screens
Write-Host Hier werden Ihnen nur die zuletzt installierten Windows Updates in aufsteigender Reihenfolge angezeigt.
Write-Host "Darunter fallen jedoch nicht Treiber, Office oder unter WSUS empfangene Updates."
Write-Host WSUS steht für Windows Server Update Services. Die Server sind von Microsoft.
Write-Host `n'HotFixID  Beschreibung    Installiert am     (Eine genaue Uhrzeitauflösung ist nicht möglich).'
Write-Host --------- --------------- -------------------
Get-HotFix | Select-Object -Property HotFixID, Description, Installedon | Sort-Object -Property InstalledOn | Format-Table -HideTableHeaders
Write-Host 'Zum Beenden drücken Sie eine beliebige Taste . . . '-NoNewLine;[void]($Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown'));Write-Host
exit
dann bekomme ich dieses Bild
1723588069430.png

So... und das ist natürlich verkehrt, denn der Fernseher hat eine Auflösung 1920*1080 Bildpunkten.
Stelle ich die Skalierung auf 100 % um, dann werden die Auflösungen alle richtig angezeigt.

Dann habe ich noch das hier anzubieten : Damit wird mir die Skalierung angezeigt.

Code:
Add-Type -AssemblyName System.Windows.Forms
$rh=[int](Get-CimInstance -ClassName Win32_VideoController)[0].CurrentVerticalResolution
$vh=[int][System.Windows.Forms.SystemInformation]::VirtualScreen.Height
$screen_scale_factor=$rh/$vh
write-host Der Skalierungsfaktor liegt bei $screen_scale_factor
pause
Der Wunsch ist ganz einfach der, dass mir das Powershellskript die wahre Auflösung anzeigt,
von mir aus auch über den Umweg dass man sagt
if $screen_scale_factor -gt 1 $Screenheight1=$Screenheight*$screen_scale_factor
if $screen_scale_factor -gt 1 $Screenwidtht1=$Screenwidth*$screen_scale_factor
In der Zeile im großen Skript, da wo die Auflösung der Monitore angezeigt wird, liegt das Problem:
.Bounds.width und .Bound.height. Powershell muss halt merken
ich bin beim ersten Monitor, da ist momentan die Skalierung 100%
also Auflösung = Auflösung mal $scren_scalefactor (in dem Fall 1) also 1366 * 768
und ich bin beim zweiten Monitor, da ist momentan die Skalierung 125% also Auflösung
nicht 1536 * 864 sondern Auflösung = Auflösung mal 1,25.
So... und das soll natürlich passend für jeden Monitor gemacht werden, egal ob 1, 2 oder noch mehr Monitore!!!
Aber ich kriegs´ nicht hin...
@skorpion68 vllt hast Du ja eine Idee......
 
Zuletzt bearbeitet:
Mit dieser Zeile scheint es zu klappen (es wird jedesmal der Faktor berücksichtigt):
Code:
$info_screens = ($col_screens | ForEach-Object {if ("$($_.Primary)" -eq "True") {$monitor_type = "Die primäre Anzeige hat eine Auflösung von"} else {$monitor_type = "Die sekundäre Anzeige hat eine Auflösung von"}write-host "$monitor_type" -NoNewLine; write-host  " $($_.Bounds.Width*$([int][System.Windows.Forms.SystemInformation]::VirtualScreen.Height)/$_.Bounds.Height) " -foregroundcolor magenta -NoNewLine; write-host "Bildpunkten horizontal und " -NoNewLine; write-host  "$($_.Bounds.Height*$([int][System.Windows.Forms.SystemInformation]::VirtualScreen.Height)/$_.Bounds.Height) " -ForeGroundcolor magenta -NoNewLine; write-host "Bildpunkten vertikal."; write-host})
Bin mir aber nicht sicher, ob es noch klappt, wenn unterschiedliche Faktoren je Monitor gewählt wurden.
btw: bei mir wird nicht der korrekte Username angezeigt
 
Danke aber es funzt so leider nicht.
Dann sagt er die primäre Anzeige hat 1536.75 horizontal und 864 vertikal
die sekundäre 1536 horizontal und 864 vertikal. (wenn da die Skalierung bei 125 steht).

Aber ein kleines Stück bin ich heute morgen schon weiter gekommen.
Man darf dabei aber nur die Skalierung des 2. Monitors verändern.
Dann klappt es so aber immer mit der korrekten Auflösungsanzeige.
Wird die erste Anzeige in der Skalierung verändert, gibt es Datenmüll...
Wenn man mir aber erklärt wie folgendes funktioniert:
Ähnlich wie in einer Batchdatei: wenn Wert größer das oder kleiner das dann springe in Zeile sowieso...
und das in einem Powershellskript
Dann würde ich noch einen anderen Weg versuchen.
Code:
Add-Type -AssemblyName System.Windows.Forms
$verticalres=[int](Get-CimInstance -ClassName Win32_VideoController)[0].CurrentVerticalResolution
$horizontalres=[int](Get-CimInstance -ClassName Win32_VideoController)[0].CurrentHorizontalResolution
$screen_count  = [System.Windows.Forms.Screen]::AllScreens.count
$col_screens = [system.windows.forms.screen]::AllScreens

 $firstscreenheight = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds.Height
 $firstscreenwidth = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds.width
    $Host.UI.RawUI.WindowTitle = 'Abfrage von Kerndaten'
    $Mein_Betriebssystem = (Get-CimInstance Win32_OperatingSystem).Caption
    $Version = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').DisplayVersion
    $Architektur = (Get-CimInstance Win32_operatingsystem).OSArchitecture
    $Buildnummer = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').CurrentBuild
    $Erweiterung = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').UBR
    $Computername = (Get-CimInstance Win32_ComputerSystem).Name
    $Meine_Domaene = (Get-CimInstance Win32_ComputerSystem).Domain
    $Benutzername = (Get-CimInstance Win32_ComputerSystem).PrimaryOwnerName
    $User_ID = [System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value
$rh=(Get-CimInstance -ClassName Win32_VideoController)[0].CurrentVerticalResolution
$vh=[System.Windows.Forms.SystemInformation]::VirtualScreen.Height
$vhh=(Get-CimInstance -ClassName Win32_VideoController)[0].CurrenthorizontalResolution

$screen_scale_factor=$rh/$vh
 if ($firstscreenwidth -eq 1093) {$firstscreenwidth = 1366}
 if ($firstscreenheight -eq 614) {$firstscreenheight = 768}
 if ($firstscreenheight -eq 684) {$firstscreenheight = 768}
 if ($firstscreenwidth -eq 1536) {$firstscreenwidth = 1920}
 if ($firstscreenheight -eq 864) {$firstscreenheight = 1080}

$esc = [char]27

Write-Host ('
Die wichtigsten Kerndaten dieses Systems werden hier mit Powershell angezeigt.')
Write-Host 
Write-Host Auf Ihrem Coumputer ist $Mein_Betriebssystem, Version $Version als $Architektur Betriebssystem installiert.
Write-Host 
Write-Host Die momentane Buildnummer lautet $Buildnummer'.'$Erweiterung'.'
Write-Host 
Write-Host Der Name dieses Computers lautet $Computername'.'
Write-Host 
Write-Host Der Name der Arbeitsgruppe lautet $Meine_Domaene'.'
Write-Host 
Write-Host Die User-ID des momentan angemeldeten Benutzers $Benutzername lautet $User_ID'.'
write-host
# $info_screens = ($col_screens | ForEach-Object {if ("$($_.Primary)" -eq "True") {$monitor_type = "Die primäre Anzeige hat eine Auflösung von"} else {$monitor_type = "Die sekundäre Anzeige hat eine Auflösung von"}write-host $monitor_type "$($_.Bounds.Width) Bildpunkten horizontal und $($_.Bounds.Height) Bildpunkten vertikal.";write-host})
# $info_screens
 if ($screen_count -gt 1 -and $screen_scale_factor -eq 1) {write-host Die primäre Anzeige hat eine Auflösung von $firstscreenwidth Bildpunkten horizontal und $firstscreenheight Bildpunkten vertikal.}
 if ($screen_count -eq 1 -and $screen_scale_factor -gt 1) {write-host Die primäre Anzeige hat eine Auflösung von $horizontalres Bildpunkten horizontal und $verticalres Bildpunkten vertikal.}
 if ($screen_count -eq 1 -and $screen_scale_factor -eq 1) {write-host Die primäre Anzeige hat eine Auflösung von $firstscreenwidth Bildpunkten horizontal und $firstscreenheight Bildpunkten vertikal.}
 if ($screen_count -gt 1 -and $screen_scale_factor -gt 1) {write-host Die primäre Anzeige hat eine Auflösung von $firstscreenwidth Bildpunkten horizontal und $firstscreenheight Bildpunkten vertikal.} 
 if ($screen_count -gt 1) {Write-Host Die sekundäre Anzeige hat eine Auflösung von $horizontalres Bildpunkten horizontal und $verticalres Bildpunkten vertikal.} 
 if ($screen_count -gt 1) {Write-Host}
Write-Host Hier werden Ihnen nur die zuletzt installierten Windows Updates in aufsteigender Reihenfolge angezeigt.
Write-Host "Darunter fallen jedoch nicht Treiber, Office oder unter WSUS empfangene Updates."
Write-Host WSUS steht für Windows Server Update Services. Die Server sind von Microsoft.
Write-Host `n'HotFixID  Beschreibung    Installiert am     (Eine genaue Uhrzeitauflösung ist nicht möglich).'
Write-Host --------- --------------- -------------------
Get-HotFix | Select-Object -Property HotFixID, Description, Installedon | Sort-Object -Property InstalledOn | Format-Table -HideTableHeaders
Write-Host 'Zum Beenden drücken Sie eine beliebige Taste . . . '-NoNewLine;[void]($Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown'));Write-Host
# D:\Programme\batch\Info_Center_Settings.bat
exit
 
Zuletzt bearbeitet:
Hast du die Powershell bzw. die Entwickungsumgebung nach dem Umstellen der Skalierung neu gestartet? Erst danach kommen sinnvolle Werte raus.
(nur der Username ist falsch, die SID stimmt. Der angezeigte User zum Namen existiert gar nicht mehr.)
 
Zuletzt bearbeitet:
Jaja das habe ich
aber ich habe in dem Skript gerade noch was geändert ... kopier dir das noch mal (bitte)
Die Username Geschichte stammt nicht von mir (PrimaryOwnerName)... da gibt´s bestimmt noch andere
Möglichkeiten den momentan angemeldeten Benutzer anzuzeigen.
 
  • Danke!
Reaktionen: JCR
Jepp und danke Dir nur steht dann da C:\USERS\KLEIN ... nur der Name wäre besser
Das Problem mit der Skalierung und dem zweiten Monitor (vor allen Dingen dann, wenn der ´ne sehr hohe Auflösung und Skalierung hat) wird mich /uns wohl noch länger beschäftigen.
Aber bei ´ner 4k Auflösung mit einer Skalierung von 100% zu arbeiten, ist auch nicht gerade augenschonend! LOL
Denn nur dabei passiert es ja, dass die Aulösung in Powershell nicht richtig aufgebröselt wird!
Wenn man zwei absolut gleiche Monitore mit Beispiel 24 Zoll hat und 1920 mal 1080 dann geht die Skalierung
bis 150% ohne Probs.
 
Zuletzt bearbeitet:
Die User-ID des momentan angemeldeten Benutzers ...

Die sekundäre Anzeige hat eine Auflösung von 0 Bildpunkten horizontal und 0 Bildpunkten vertikal.
Da hat wohl was bei der letzten Version des Skripts nicht geklappt ;) eigentlich wäre das hier zu erwarten (jeweils 100%):
Die primäre Anzeige hat eine Auflösung von 1920 Bildpunkten horizontal und 1080 Bildpunkten vertikal.

Die sekundäre Anzeige hat eine Auflösung von 1920 Bildpunkten horizontal und 1080 Bildpunkten vertikal.
 
Ich geb´s dran...
Ich habe jetzt das Powershellskript aus früheren Verisonen benutzt und schreibe darein:
write-host Nur bei einer Skalierung von 100 Prozent wird die Auflösung der Monitore richtig angezeigt.
Sollen die Leute gucken wie ´se zurecht kommen.
Wenn die Skalierung bei 100% steht dann funzt es, ansonsten wird die Abfrage fehlerhaft.
Nirsoft MyMonitoRes oder wie der Kram heisst, ist da keinen Deut besser.
 
Jepp und danke Dir nur steht dann da C:\USERS\KLEIN ... nur der Name wäre besser
Oh, bitte entschuldige, meinte natürlich die Systemvariable $env:UserName.

Zu dem anderen Thema werde ich erst einmal nichts beitragen, da du immer mit neuen Anfragen kommst und ich aus Zeitnot zum Testen dann immer noch an der weit vorher gestellten Frage mich befinde.
 
Anzeige
Oben