Solución:
Este error parece ser el resultado de Get-ItemProperty
defecto. Desde su registro, la parte del script que está fallando está aquí:
Write-Output "Searching if new version exists..."
$checkreg64 = Get-ItemProperty HKLM:SoftwareMicrosoftWindowsCurrentVersionUninstall* | Select-Object DisplayName, DisplayVersion | Where-Object { $_.DisplayName -like '*Java 8*' -and ([Version]$_.DisplayVersion) -eq $version} -ErrorAction SilentlyContinue
$checkreg32 = Get-ItemProperty HKLM:SoftwareWOW6432NodeMicrosoftWindowsCurrentVersionUninstall* | Select-Object DisplayName, DisplayVersion | Where-Object { $_.DisplayName -like '*Java 8*' -and ([Version]$_.DisplayVersion) -eq $version} -ErrorAction SilentlyContinue
Esta falla ocurre cuando Get-ItemProperty
espera leer una clave de registro de tipo X y lee una clave cuyos datos no coinciden con las restricciones del tipo de clave. investigación1 investigación2 investigación3
La solución en este caso fue encontrar la clave no válida en el registro (las rutas de registro que se consultan en $checkreg64
y $checkreg32
) y recrearlo manualmente como DWORD con valor 1.
Actualizar:
De los comentarios, obtienes “La conversión especificada no es válida” al realizar consultas. Get-ItemProperty HKLM:SoftwareMicrosoftWindowsCurrentVersionUninstall*
. Es posible que haya una clave no relacionada en esta ubicación que contenga una subclave no válida, lo que provocará que la consulta en esta ubicación falle. Deberíamos poder analizar cada clave individualmente desde la ubicación de desinstalación para determinar qué clave tenemos problemas para consultar.
Ejecute lo siguiente:
Get-ItemProperty HKLM:SoftwareMicrosoftWindowsCurrentVersionUninstall* | % { write-host "Key Name:" $_.PSChildName }
Esto debería devolver algunos resultados, luego, devolverá el Specified cast
error. El error ocurrirá en la clave que alberga la subclave no válida.
Por ejemplo, si los resultados de lo anterior se ven así:
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.
Entonces, la última clave que pudo consultar con éxito fue fake_key_name_3
. La clave que no pudimos consultar fue la siguiente clave de la lista. Abra regedit y busque el siguiente nombre de clave (presumiblemente, fake_key_name_4
). Aquí es donde está el fracaso. Debería haber una subclave no válida aquí. Solucione esto, luego ejecute el comando nuevamente. Si no obtiene ningún error, está todo listo. Si obtiene más claves con errores, busque y corrija sus subclaves no válidas.
En el caso de uno de los ejemplos vinculados que proporcioné originalmente, el usuario esperaría encontrar una clave REG_DWORD con data = “(valor DWORD (32 bits) no válido)”. Esta es la clave para arreglar.
acabo de tener este problema. Yo hice:
get-childitem hklm:softwaremicrosoftwindowscurrentversionuninstall |
foreach { write-host $_.pspath; $_ } | get-itemproperty
y se atragantó HKLM:softwaremicrosoftwindowscurrentversionuninstallnbi-nb-base-8.2.0.0.201609300101
, que es para Netbeans 8.2. Veo en regedit que NoModify tiene “(valor DWORD (32 bits) no válido)”. get-itemproperty -erroraction continue
no tiene efecto.
EDITAR: La gente de Netbeans finalmente está arreglando esto actualmente. https://issues.apache.org/jira/browse/NETBEANS-2523