2014-10-28 117 views
1

我们有一个依赖Java的应用程序,我们正在使用SCCM安装程序推送给客户端。将Java更新到最新版本的Powershell脚本

由于Java的被几乎每月更新(和旧的更新之后到期30天),我们正在寻找一种方式,有SCCM安装程序保持最新的Java版本更新。我们有能力从我们的SCCM安装程序运行Powershell脚本,但我们还没有找到一种方法来编写脚本,该脚本将自动下载并安装最新的Java版本。

有谁知道这是可能的,我们怎么能去吗?

在此先感谢!

+0

由于您在询问有关创建软件安装软件包的问题,​​因此您可能会考虑您的问题。虽然这是可能的...如果你想得到这个帮助,我建议你向我们展示你已经尝试过的一些代码,然后社区会帮助你。 – Matt 2014-10-28 15:15:39

+0

软件安装包不是问题的主题。编写脚本来下载Java,如上所述,我们还没有找到任何方式来下载最新版本的Java,所以我们没有任何代码可以显示。感谢您的答复。 – korymiller 2014-10-28 17:57:34

+0

您的问题确实_automatically下载并安装最新的Java版本_这就是为什么我回应我的方式我FYI – Matt 2014-10-28 18:13:47

回答

1

你或许可以使用现有的链接此页面上的下载:http://java.com/en/download/manual.jsp

或者,你可以做下载一次,并把它放在一个文件共享,所以你可以用简单的方法来从一个复制文件UNC路径像

\\fileserver\folder\installerpackage.exe 

只是为头痛准备。在处理了几十台机器上的Java自身的移除和升级问题之后,我可以告诉你它并不总是一个干净的卸载/重新安装。除非他们改进了卸载程序,否则很有可能最终会遇到Java安装程序认为已安装的情况,但事实并非如此。我也看到了相反的地方,它认为它没有安装,但它是。

+0

我认为这些链接可能是我们需要的。非常感谢! – korymiller 2014-10-29 19:30:59

2

请看看this下载使用PowerShell安装Java沉默了文件和this。 例如:

Invoke-WebRequest $address -OutFile $destination 
# $addressis the http-address of the installer 
# $destination is a Path where the the downloadoutput should saved to 
$destination /s 
# with the '/s' Parameter you are starting the installer silent 

如果你能得到的下载链接,你应该能够下载并安装Java。但atm我不知道如何获得链接。 我希望这会有所帮助。

+0

谢谢你的回应! – korymiller 2014-10-28 17:58:13

+0

您需要包含这些链接的有用部分。如果他们以后死了,你的答案对任何人都是没有用的。 – Matt 2014-10-28 18:14:38

+0

我希望我的编辑能够实现你的愿望。 – 2014-10-29 08:09:20

0

首先,你需要获得最新的下载链接(32位)。

$JavaFile = [pscustomobject]@{ 
    JavaVersion = '' 
    FileName = '' 
    DownloadURL = $((Invoke-WebRequest 'http://www.java.com/en/download/manual.jsp').links | where innerHTML -like "Windows Offline" | select href).href 
} 

对于64位URL使用:

$JavaFile = [pscustomobject]@{ 
    JavaVersion = '' 
    FileName = '' 
    DownloadURL = $((Invoke-WebRequest 'http://www.java.com/en/download/manual.jsp').links | where innerHTML -like "Windows Offline (64-bit)" | select href).href 
} 

所以现在我们要检查,如果我们已经下载的文件。 我们可以通过检查日志文件来做到这一点。所以首先创建一个javahistorylog.log来存储用过的链接。 使用以下函数,我们可以检查链接的日志。

function CheckHistory ($fileurl,$path){ 
    $history=Get-Content "$path" 
    $r = $false 
    Foreach ($historicurl in $history){ 
     if ($historicurl -eq $fileurl){ 
      $r = $true 
     } 
    } 
    return $r 
} 

如果没有找到,我们可以继续下载文件。

$JavaFile.FileName = "tempinstaller$(get-date -Format yyMMddmm).exe" 
Invoke-WebRequest $JavaFile.DownloadURL -OutFile ("$TempDownloadLocation\"+ $JavaFile.FileName) -ev $DLErr 
if($DLErr){Exit} 

下载后,我们可以做一些编辑的setup.exe 首先得到该版本和安全名称。

$TempFileName = $JavaFile.FileName 
$JavaFile.JavaVersion = get-item ("$TempDownloadLocation\"+ $JavaFile.FileName) | select -ExpandProperty versioninfo | select -ExpandProperty productversion 

第二组,并从originalfilename prop生成名称。

$JavaFile.FileName = "jre1."+(((Select-String -Pattern '[0-9]u[0-9]+' -InputObject (get-item ("$TempDownloadLocation\$TempFileName") | select -ExpandProperty versioninfo | select -ExpandProperty originalfilename)) | 
ForEach-Object -Process { 
    $_.Matches 
} | 
ForEach-Object -Process { 
    $_.Value 
}) -replace 'u', '.0_') 

现在重命名文件。

Rename-Item -Path "$TempDownloadLocation\$TempFileName" -NewName ($JavaFile.FileName+".exe") 

更新historylog

if(Test-Path -path ("$TempDownloadLocation\"+$JavaFile.FileName+".exe")){ 
    add-content "$TempDownloadLocation\javahistorylog.log" $JavaFile.DownloadURL 
} 

现在我们可以考虑让MSI文件为构建SW包。

微星将位于:

$MsiFilePathTemp = "$env:LOCALAPPDATA\Oracle\Java\" -replace 'Local', 'LocalLow' 

我们可以通过执行设置和应对微星得到MSI:

Start-Process -FilePath ("$TempDownloadLocation\"+$JavaFile.FileName+".exe") -ArgumentList '/s' 
while(!(Test-Path ("$MsiFilePathTemp\"+$JavaFile.FileName+"\"+$JavaFile.FileName+".msi"))) 
{ 
    Start-Sleep -Seconds 1.5 
} 
Copy-Item -Path ("$MsiFilePathTemp\"+$JavaFile.FileName+"\"+$JavaFile.FileName+".msi") -Destination $MsiFilePathOut -Force -ErrorVariable $CDR 
if($CDR){ 
    exit 
} 

现在停止该进程并删除该.exe文件

Get-Process -Name $JavaFile.FileName | Stop-Process 
While (Get-Process -Name $JavaFile.FileName -ErrorAction SilentlyContinue) 
{ 
    Start-Sleep -Seconds 2 
} 
Remove-Item -Path ("$TempDownloadLocation\"+$JavaFile.FileName+".exe") -Force 
$MSIFile = ("$MsiFilePathOut\"+$JavaFile.FileName+".msi") 

现在你有$MSIFile这是你可以用来建立y的msi路径我们的SCCM包装。