使用 SCCM/SCUP 部署 Java

使用 SCCM/SCUP 部署 Java

我们的网络有大约 250 台 PC,我想将 Java 更新部署到这些 PC 上。作为分发软件,我们使用 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 的自动更新功能。因此,每当发布新版本时,它都会自动更新(这不是问题)。但在下一个部署周期中,SCCM会尝试再次安装上一个更新。(7U12 已发布并自动更新,但SCCM仍有 7U11 并尝试安装,尽管用户有较新的版本)

任何帮助都将不胜感激!

答案1

对于您的第一个问题(Java.exe 正在运行)

我使用 powershell 脚本来安装 Java,它(除其他功能外)会关闭三大浏览器。我将它粘贴在下面以供参考:

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 位检查后在 64 位机器上安装 64 位 java。

我把这个脚本和 Java exes 打包成一个 sfx 文件,然后解压并运行

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

对于您的第二个问题,Java 检查两个注册表项以进行自动更新:

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

他们两个都必须设置为 0 才能禁用自动更新(某些版本的 Java 读取一个键,而某些版本的 Java 读取其他键)。我使用包部署注册表项,如您在脚本中看到的那样,但我还使用 SCCM 2012s DCM 并将它们设置为配置项,并启用对它们的修复以确保它们始终为 0。

相关内容