implementando o Java com o SCCM / SCUP

1

Temos uma rede de cerca de 250 PCs para os quais quero implantar as atualizações do java. Como software de distribuição, estamos usando o SCCM 2012 / SCUP 2011.

Observação: preciso implantar a versão x86 e x64.

Então, crio duas atualizações com as seguintes regras:

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'

Agora, os problemas :

  • java.exe está sendo executado no computador (devido a uma janela do navegador aberta, por exemplo): a rotina de atualização do java desinstala a versão antiga do java; a rotina de instalação falha porque java.exe ainda está em execução (embora tenha sido desinstalado). Da próxima vez que o usuário reiniciar, nenhum java será instalado na máquina

  • alguns usuários ativam a função de atualização automática de java. Portanto, sempre que uma nova versão é lançada, ela é atualizada automaticamente (esse não é o problema). Mas no próximo ciclo de implantação SCCM trys para instalar a atualização anterior novamente. (7U12 foi lançado e autoupdatet, mas SCCM ainda tem 7U11 e trys para instalar isso, embora o usuário tenha uma versão mais nova)

Qualquer ajuda é apreciada!

    
por Sani 20.02.2013 / 10:06

1 resposta

2

Para o seu primeiro problema (o Java.exe está sendo executado)

Eu uso um script powershell para instalar o Java, que (entre outras coisas) fecha os grandes 3 navegadores. Vou colá-lo abaixo para referência:

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"

Você também pode perceber que ele instala o java de 32 bits em todas as máquinas e instala o java de 64 bits em máquinas de 64 bits após uma verificação de 64 bits do sistema operacional.

Eu empacotei esse script com os exes Java em um sfx que descompacta e executa

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

Para sua segunda pergunta, há duas chaves reg que o Java verifica a atualização automática:

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

Eles ambos devem ser definidos como 0 para desabilitar a atualização automática (algumas versões do Java lêem uma chave e outras lêem outras). Eu implanto as chaves de registro com o pacote, como você pode ver no script, mas também uso o DCM do SCCM 2012s e as defino como itens de configuração, e ativo a correção para garantir que sejam sempre 0.

    
por 25.02.2013 / 20:35