yotyot
Goto Top

Powershell: Irgendeinen Wert in Registry-Schlüssel erkennen

Moin alle!

Ich hätt' da gern mal 'n Problem:

Ich will in einem PS-Script feststellen, ob es überhaupt irgendeinen Wert (oder ist es eine Eigenschaft?) in einem Registry-Schlüssel gibt. Da die Einträge dynamisch erzeugt werden und ich die Namen nicht kenne (immer wieder neue 30-stellige GUIDs), komme ich gerade nicht weiter.

Hier ein Beispiel:

if (Get-WasAuchImmer HKLM:\Software\Microsoft\WIndows\CurrentVersion\WindowsUpdate\Services\Pending | UndWasJetztHier?) {$Vorhanden = $true}

Ich will wissen, ob es unter diesem Schlüssel einen Eintrag gibt (DWORD), dessen Namen ich nicht kenne.

Alle Anleitungen, die ich bisher gefunden habe, beziehen sich immer auf einen bekannten Wert. Alles, was ich bisher ausprobiert habe, führt nicht zum Ziel.

Kann mir jemand meine ImKreisDreherei beenden?

Gruß

Jörg

Content-ID: 2340604895

Url: https://administrator.de/contentid/2340604895

Ausgedruckt am: 24.11.2024 um 15:11 Uhr

Doskias
Doskias 30.03.2022 um 10:01:31 Uhr
Goto Top
Moin,

du bist doch schon auf dem richtigen Weg:
Zitat von @YotYot:
Alle Anleitungen, die ich bisher gefunden habe, beziehen sich immer auf einen bekannten Wert. Alles, was ich bisher ausprobiert habe, führt nicht zum Ziel.
Kann mir jemand meine ImKreisDreherei beenden?

Klar. Du musst ja irgendwo definieren welche Werte du kennst. Wenn du das definierst hast, dann rufst du einfach deinen Registry Key ab und vergleichst ob da Werte drin sind, die du nicht als bekannt deklariert hast. Ist das der Fall, hast du einen neuen Wert entdeckt.

Gruß
Doskias
YotYot
YotYot 30.03.2022 um 10:30:23 Uhr
Goto Top
Naja, das Problem daran ist: die Werte, die ich kenne, sind diese:
Ende der Liste.

Normalerweise ist der Schlüssel leer. Nach Windows Updates tauchen hier gelegentlich 30-stellige GUIDs auf, die ich vorher nicht kenne. Das erfordert dann möglicherweise einen Neustart, der aber nicht immer automatisch durchgeführt wird. Also will ich wissen, wenn es hier einen Eintrag gibt, um den Server per Script neu starten zu lassen.

Weil aber der Schlüssel normalerweise leer ist und ich die neuen Einträge nicht kenne, kann ich da nichts vergleichen. Daher will ich wissen, ob ein Eintrag vorhanden ist, nicht wie er aussieht.
Bisher bekomme ich, je nachdem, was ich abfrage, immer false oder immer true heraus.
Doskias
Doskias 30.03.2022 um 10:34:28 Uhr
Goto Top
Zitat von @YotYot:
Bisher bekomme ich, je nachdem, was ich abfrage, immer false oder immer true heraus.

Ist doch noch einfacher. Ich weiß nicht was du abfragst, aber true und false sollten ja reichen um zu wissen ob das was ist oder nicht. Poste doch einfach hier mal deinen Code, dann kann man die zielführender helgen.
Th0mKa
Th0mKa 30.03.2022 um 11:18:03 Uhr
Goto Top
Zitat von @YotYot:
Normalerweise ist der Schlüssel leer. Nach Windows Updates tauchen hier gelegentlich 30-stellige GUIDs auf, die ich vorher nicht kenne. Das erfordert dann möglicherweise einen Neustart, der aber nicht immer automatisch durchgeführt wird. Also will ich wissen, wenn es hier einen Eintrag gibt, um den Server per Script neu starten zu lassen.

Moin,

mach doch einfach ein get-childitem mit count und wenn das Ergebnis größer als 0 ist weißt du das dort Werte drin sind.

/Thomas
1915348599
Lösung 1915348599 30.03.2022 aktualisiert um 12:28:40 Uhr
Goto Top
Zitat von @YotYot:
Normalerweise ist der Schlüssel leer. Nach Windows Updates tauchen hier gelegentlich 30-stellige GUIDs auf, die ich vorher nicht kenne. Das erfordert dann möglicherweise einen Neustart, der aber nicht immer automatisch durchgeführt wird. Also will ich wissen, wenn es hier einen Eintrag gibt, um den Server per Script neu starten zu lassen.
Da gehört mehr dazu, das zeigt nicht zuverlässig an das ein Reboot erforderlich ist, guckst du ...
Check for pending reboot with PowerShell

Um noch die Frage zu beantworten, wenn es Unterschlüssel sind dann
if (Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Services\Pending' | ? Name -match '[a-f\d]{8}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{12}'){  
    # do whatever you want
}
Wenn es dagegen Werte sind
if (Get-ItemProperty -Path 'HKLM:\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate\Services\Pending' | ?{$_ -match '[a-f\d]{8}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{12}'}){  
    # do whatever you want
}

Bitte dann auch schließen nicht vergessen ...
YotYot
Lösung YotYot 31.03.2022 um 11:22:36 Uhr
Goto Top
Hallo Pretty,

ja, die ganzen anderen Keys und Gedöns habe ich fertig, danke trotzdem für den Kontrollhinweis face-wink

Und wenn ich,... ach, was soll ich sagen: der Fehler saß vor der Tastatur.
Ich hatte ja schon alles gemacht: gci, gip und ein paar andere Dinge vor lauter Verlegenheit auch. Lustigerweise hat das in der Shell auch funktionieret, nur im Script nicht. Und da es sich um einen Remote-Server handelt, den ich abfrage (bzw. mehrere, um genau zu sein), erhöhen sich natürlich auch die möglichen Fehlerquellen.
Wer seine Variablen nicht korrekt in die Remote-Maschine übergibt, muss sich dann aber auch nicht wundern, oder?

Danke Euch fürs Mitdenken!