1

У нас в сети около 250 компьютеров, на которых я хочу развернуть обновления Java. В качестве дистрибутива мы используем SCCM 2012 / SCUP 2011.

Примечание. Мне нужно развернуть версию как x86, так и x64.

Поэтому я создаю два обновления со следующими правилами:

Installable Rule

Registry Value 'HKLM\Software\JavaSoft\Java Runtime Environment\CurrentVersion' exists

Installed Rule

Registry String 'HKLM\Software\JavaSoft\Java Runtime Environment\Java7FamilyVersion' Begins With '1.7.0_11'

Теперь о проблемах:

  • java.exe запущен на компьютере (например, из-за открытого окна браузера): процедура обновления java удаляет старую версию java; процедура установки завершается ошибкой, потому что java.exe все еще работает (хотя он был удален). В следующий раз, когда пользователь перезагружается, на компьютере не установлена java

  • некоторые пользователи включают функцию автоматического обновления Java. Таким образом, каждый раз, когда выпускается новая версия, она автоматически получает updatet (это не проблема). Но в следующем цикле развертывания SCCM пытается установить предыдущее обновление снова. (7U12 был выпущен и автоматически обновлен, но SCCM все еще имеет 7U11 и пытается установить его, хотя у пользователя более новая версия)

Любая помощь приветствуется!

1 ответ1

2

Для вашей первой проблемы (запущен Java.exe)

Я использую скрипт powershell для установки Java, который (помимо прочего) закрывает большие 3 браузера. Я вставлю это ниже для справки:

function Get-ScriptDirectory{
    $Invocation = (Get-Variable MyInvocation -Scope 1).Value
    try {
        Split-Path $Invocation.MyCommand.Path -ea 0
    }
    catch {
    Write-Warning 'You need to call this function from within a saved script.'
    }
}

function Get-Architecture{
    return $(gwmi win32_operatingsystem).OSArchitecture
}


$Path = Get-ScriptDirectory

#Close all instances of IE, Firefox, & Chrome
Get-Process | where {$_.ProcessName -match "iexplore"} | Stop-Process -Force
Get-Process | where {$_.ProcessName -match "chrome"} | Stop-Process -Force
Get-Process | where {$_.ProcessName -match "firefox"} | Stop-Process -Force

#Install
Start-Process -FilePath "$Path\jre-6u41-windows-i586.exe" -ArgumentList "/s /v`"/qb REBOOT=ReallySuppress JAVAUPDATE=0 WEBSTARTICON=0 SYSTRAY=0`"" -Wait

#Also Install the 64-bit JRE if on a 64 workstation
if(Get-Architecture -match "64")
{
    Start-Process -FilePath "$Path\jre-6u41-windows-x64.exe" -ArgumentList "/s /v`"/qb REBOOT=ReallySuppress JAVAUPDATE=0 WEBSTARTICON=0 SYSTRAY=0`"" -Wait
}

#Import reg keys to disable auto updating
reg import "$Path\JavaUpdate.reg"

Вы также можете заметить, что он устанавливает 32-разрядную версию Java на каждом компьютере и устанавливает 64-разрядную версию Java на 64-разрядных компьютерах после проверки 64-разрядной ОС.

Я упаковываю этот скрипт вместе с Java exes в sfx, который распаковывает и запускает

powershell.exe -executionpolicy bypass -noprofile -file C:\Temp\Java\install.ps1

Для вашего второго вопроса, есть два ключа reg, которые Java проверяет для автоматического обновления:

HKLM\SOFTWARE\JavaSoft\Java Update\Policy\EnableAutoUpdateCheck
HKLM\SOFTWARE\JavaSoft\Java Update\Policy\EnableJavaUpdate

Они оба должны быть установлены в 0, чтобы отключить автообновление (некоторые версии Java читают один ключ, а другие - другой). Я развертываю ключи reg с пакетом, как вы можете видеть в сценарии, но я также использую DCM SCCM 2012 и устанавливаю их как элементы конфигурации, и включаю их исправление, чтобы они всегда были равны 0.

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