2

В настоящее время я получаю эту ошибку при установке Java SE Runtime Environment (jre8), обновление работало нормально:

Searching if new version exists...
ERROR: Specified cast is not valid.
The install of jre8 was NOT successful.
Error while running 'C:\ProgramData\chocolatey\lib\jre8\tools\chocolateyInstall.ps1'.
 See log for details.

Chocolatey installed 0/1 packages. 1 packages failed.
 See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).

Failures
 - jre8 (exited -1) - Error while running 'C:\ProgramData\chocolatey\lib\jre8\tools\chocolateyInstall.ps1'.
 See log for details.

chocolatey.log (я не могу вставить сюда из-за ограничения в 30 000 символов, я удалил даты)

1 ответ1

2

Эта ошибка является результатом сбоя Get-ItemProperty . Из вашего журнала, часть скрипта, которая терпит неудачу, находится здесь:

  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

Эта ошибка возникает, когда Get-ItemProperty ожидает чтения раздела реестра типа X и считывает ключ, данные которого не соответствуют ограничениям типа ключа. исследование1 исследование2 исследование3

Решением в этом случае было найти недопустимый ключ в реестре (пути к реестру, которые запрашиваются в $checkreg64 и $checkreg32), и вручную создать его как DWORD со значением 1.

Обновить:

Из комментариев вы получите "Указанное приведение неверно" при запросе Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* . Возможно, в этом расположении имеется несвязанный ключ, содержащий недопустимый подраздел, что приводит к сбою запроса к этому расположению. Мы должны иметь возможность анализировать каждый ключ по отдельности из места удаления, чтобы определить, к какому ключу у нас возникают проблемы.

Запустите ниже:

Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | % { write-host "Key Name:" $_.PSChildName }

Это должно вернуть некоторые результаты, а затем вернет Specified cast ошибку приведения. Ошибка произойдет с ключом, содержащим недопустимый подраздел.

Например, если результаты выше выглядят так:

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.

Тогда последний ключ, который вы смогли успешно запросить, был fake_key_name_3 . Ключ, который мы не могли запросить, был следующим ключом в списке. Откройте regedit и перейдите к следующему имени ключа (предположительно, fake_key_name_4). Вот где провал. Здесь должен быть недействительный подраздел. Исправьте это, затем повторите команду. Если вы не получили ошибок, все готово. Если вы получите больше ключей с ошибками, найдите и исправьте их недействительные подразделы.

В случае одного из связанных примеров, которые я изначально предоставил, пользователь может ожидать найти ключ REG_DWORD с data = "(недопустимое значение DWORD (32-битное))". Это ключ к исправлению.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .