Dieser Fehler scheint das Ergebnis eines Fehlers zu sein Get-ItemProperty
. In Ihrem Protokoll ist der Teil des Skripts, das fehlschlägt, hier:
Write-Output "Searching if new version exists..." $checkreg64 = Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion | Where-Object { $_.DisplayName -like '*Java 8*' -and ([Version]$_.DisplayVersion) -eq $version} -ErrorAction SilentlyContinue $checkreg32 = Get-ItemProperty HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion | Where-Object { $_.DisplayName -like '*Java 8*' -and ([Version]$_.DisplayVersion) -eq $version} -ErrorAction SilentlyContinue
Dieser Fehler tritt auf, wenn Get-ItemProperty
erwartet wird, einen Registrierungsschlüssel des Typs X zu lesen und einen Schlüssel zu lesen, dessen Daten nicht den Einschränkungen des Schlüsseltyps entsprechen. Forschung1 Forschung2 Forschung3
Die Lösung in diesem Fall bestand darin, den ungültigen Schlüssel in der Registrierung (die Registrierungspfade, die in $checkreg64
und abgefragt werden $checkreg32
) zu finden und ihn manuell als DWORD mit dem Wert 1 neu zu erstellen.
Aktualisieren:
Aus den Kommentaren erhalten Sie beim Abfragen "Angegebene Umwandlung ist ungültig" Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*
. Es ist möglich, dass sich an diesem Speicherort ein nicht zusammenhängender Schlüssel befindet, der einen ungültigen Unterschlüssel enthält, wodurch die Abfrage für diesen Speicherort fehlschlägt. Wir sollten in der Lage sein, jeden Schlüssel einzeln vom Ort der Deinstallation aus zu analysieren, um festzustellen, welcher Schlüssel bei der Abfrage Probleme hat.
Führen Sie das unten aus:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | % { write-host "Key Name:" $_.PSChildName }
Dies sollte einige Ergebnisse zurückgeben, dann wird der Specified cast
Fehler zurückgegeben. Der Fehler tritt bei dem Schlüssel auf, der den ungültigen Unterschlüssel enthält.
Wenn zum Beispiel die Ergebnisse der obigen Angaben folgendermaßen aussehen:
Key Name: fake_key_name_1 Key Name: fake_key_name_2 Key Name: fake_key_name_3 Get-ItemProperty : Specified cast is not valid.
Der letzte Schlüssel, den Sie erfolgreich abfragen konnten, war dann fake_key_name_3
. Der Schlüssel, den wir nicht abfragen konnten, war der nächste Schlüssel in der Liste. Öffnen Sie regedit und navigieren Sie zum nächsten Schlüsselnamen (vermutlich fake_key_name_4
). Hier liegt der Fehler. Hier sollte ein ungültiger Unterschlüssel sein. Beheben Sie das Problem und führen Sie den Befehl erneut aus. Wenn Sie keine Fehler erhalten, sind Sie fertig. Wenn Sie weitere Schlüssel mit Fehlern erhalten, suchen Sie ihre ungültigen Unterschlüssel und beheben Sie sie.
Bei einem der verknüpften Beispiele, die ich ursprünglich zur Verfügung gestellt hatte, würde der Benutzer erwarten, einen REG_DWORD-Schlüssel mit data = "(ungültiger DWORD (32-Bit) -Wert)" zu finden. Dies ist der Schlüssel zur Behebung.