Este erro parece ser o resultado de Get-ItemProperty
falhar. Do seu log, a parte do script que está falhando está aqui:
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
Essa falha ocorre quando Get-ItemProperty
espera ler uma chave de registro do tipo X e lê uma chave cujos dados não correspondem às restrições do tipo de chave. research1 research2 research3
A solução neste caso foi encontrar a chave inválida no registro (o registro caminhos que são consultados em $checkreg64
e $checkreg32
) e recriá-lo manualmente como um DWORD com valor 1.
Atualização:
Nos comentários, você recebe "Invocação especificada não é válida" ao consultar Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*
. É possível que exista uma chave não relacionada nesse local que contenha uma subchave inválida, fazendo com que a consulta nesse local falhe. Devemos ser capazes de analisar cada chave individualmente a partir do local de desinstalação para determinar qual chave estamos tendo problemas para consultar.
Execute o abaixo:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | % { write-host "Key Name:" $_.PSChildName }
Isso deve retornar alguns resultados e, em seguida, retornará o erro Specified cast
. O erro ocorrerá na chave que contém a subchave inválida.
Por exemplo, se os resultados acima forem assim:
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.
A última chave que você conseguiu consultar com sucesso foi fake_key_name_3
. A chave que não pudemos consultar foi a próxima chave da lista. Abra regedit e navegue até o próximo nome da chave (presumivelmente, fake_key_name_4
). Este é o lugar onde a falha é. Deve haver uma subchave inválida aqui. Corrija isso e execute o comando novamente. Se você não receber nenhum erro, está tudo pronto. Se você obtiver mais chaves com erros, localize e corrija as subchaves inválidas.
No caso de um dos exemplos vinculados fornecidos originalmente, o usuário esperaria encontrar uma chave REG_DWORD com data="(valor DWORD (32-bit) inválido)". Essa é a chave para corrigir.