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/contentid/670179

Ausgedruckt am: 16.12.2024 um 01:12 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