peterleb
Goto Top

Powershell Fehleranzeige

Hallo Mädels und Jungs,

ein kleines Script schreibt einen Wert in die Registry.
Dabei leuchtet im Windows Terminal oder Powershellfenster eine gelbe Fehlermeldung, die ich aufgrund der Kürze der Anzeigedauer nicht lesen / auswerten kann.
Das Script läuft jedoch durch und schreibt den Wert.
Ich kann nur etwas mit "implicit" erkennen.
Beim Ausführen in VSCode sehe ich die Meldung gar nicht.

Wie kann ich die Meldung "einfangen"?

    $keyName = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"  
    $key2Name = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Screensavers\ssText3d\"  
    $ValueName = "DisplayString"  

    $Old_ssText3d = (Get-ItemProperty $key2Name -Name $ValueName).DisplayString
    $Version = (Get-ItemProperty $keyName -Name CurrentBuildNumber).CurrentBuildNumber

    $DisplayVersion = (Get-ItemProperty $keyName -Name DisplayVersion).DisplayVersion

    $PName = (Get-ItemProperty $keyName -Name ProductName).ProductName
    $RealPName =  (Get-WmiObject win32_operatingsystem).Caption
    $UBR = (Get-ItemProperty $keyName -Name UBR).UBR # gleich zu: BaseBuildRevisionNumber
	
    $RealPName =  $RealPName.TrimStart("Microsoft Windows ")  
    $RealPName =  $RealPName.TrimEnd(" Pro")  
    $New_ssText3d = $RealPName + " " + $DisplayVersion + " " + $Version + "." + $UBR  

    if ( $Old_ssText3d -ne $New_ssText3d )
	{
    Set-Itemproperty -path $key2Name -Name $ValueName -value $New_ssText3d
	}

Gruß
Peter

Content-ID: 670179

Url: https://administrator.de/forum/powershell-fehleranzeige-670179.html

Ausgedruckt am: 15.01.2025 um 14:01 Uhr

em-pie
em-pie 14.12.2024 um 10:58:53 Uhr
Goto Top
Moin,

Baue mal ans Ende ein Start-Sleep mit 10 Dekunden, ein „Press Any Key“ oder sowas ein.
Dann hättest du ausreichend Zeit für einen Screenshotface-wink
Crusher79
Crusher79 14.12.2024 um 11:14:54 Uhr
Goto Top
Moin,

Start-Sleep.

Oder soas wie try .... catch kann helfen.
gastric
gastric 14.12.2024 aktualisiert um 11:44:12 Uhr
Goto Top
Moin.
Erst einmal, gelbe Meldungen sind keine echten Fehler, sondern Standardmäßig erst einmal nur Warnungen.
Ich kann nur etwas mit "implicit" erkennen.
Das war zu 99% das ExecutionPolicy Warning über die implizite Überschreibung der Policy durch den Scope wenn das Skript über das Kontextmenü gestartet wurde.
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell ...

Alternativ zu den obigen Möglichkeiten Skript starten mittels -NoExit Parameter,
Powershell -NoExit -File "<Pfad zum Skript>"  
oder direkt in einer bereits offenen Powershell Konsole starten
<Pfad zum Skript>

Gruß gastric
PeterleB
PeterleB 14.12.2024 um 14:05:36 Uhr
Goto Top
Hallo,

letzteres hab' ich schon probiert.
Die Meldung bleibt nicht erhalten.

Die Sache mit der ExecutionPolicy Warning scheint schon der Grund zu sein.

Vielleicht hat jemand eine Idee, wie man sowas umleiten kann.

Gruß
Peter
em-pie
em-pie 14.12.2024 um 16:08:35 Uhr
Goto Top
Vielleicht hat jemand eine Idee, wie man sowas umleiten kann.
Powershell.exe -ExecutionPolicy Bypass C:\Scripts\mySceipt.ps1 wäre eine Variante
Die zweite wäre es, das Script zu signieren.

Bei der ersten könnte jemand anderes ja theoretisch die ps1 inhaltlich verändern und damit Schaden anrichten/ Daten abgreifen…
rubberman
rubberman 14.12.2024 um 20:24:18 Uhr
Goto Top
Moin.
Get-WmiObject ist seit v.3 als veraltet markiert und war in PS Core eine ganze Zeit lang nicht mehr verfügbar.
Gerade mal probiert und erstaunlicherweise funktioniert es wieder, aber mit aufblitzenden Warnungen, die sofort wieder überschrieben werden. Konnte es auch nicht lesen, aber ich vermute, da steht was davon, dass implizit das Get-CimInstance CmdLet genutzt wird. Anders gesagt, wenn du "explizit" das Get-CimInstance CmdLet nutzt, gibt es vermutlich auch keine Warnung mehr face-wink

Grüße
Steffen
rubberman
rubberman 20.12.2024 um 14:16:42 Uhr
Goto Top
Nachtrag
Wen es interessiert, ich hab's einfach mal aufgezeichnet. Die gelbe Markierung ist gleichzeitig die wandernde Fortschrittsanzeige, was das Lesen zur Laufzeit unmöglich macht. Hier eines der relevanten Frames aus der Aufzeichnung
get-wmiobject
Get-WmiObject ist weiter der Übeltäter, auch wenn ich mit meiner ursprünglichen Vermutung über den Inhalt der Meldung daneben lag.
PeterleB
PeterleB 21.12.2024 um 11:47:48 Uhr
Goto Top
Das ist ja stark!
Habe heute nur keine Zeit, mich intensiver zu befassen.

Gruß
Peter
rubberman
Lösung rubberman 21.12.2024 um 15:14:16 Uhr
Goto Top
Wie gesagt, für deinen Fall einfach Get-WmiObject durch Get-CimInstance im Code ersetzen und der Drops ist gelutscht. Keine weiteren Anpassungen nötig.

Grüße
Steffen
PeterleB
PeterleB 22.12.2024 um 16:51:45 Uhr
Goto Top
Vielen Dank!

Gruß
Peter