Эта ошибка является результатом сбоя 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-битное))". Это ключ к исправлению.