2014-10-28 4 views
1

У нас есть приложение, зависящее от Java, мы работаем над установщиком SCCM, чтобы выталкивать клиентов.Скрипт Powershell для обновления Java до последней версии

Из-за того, что Java обновляется почти ежемесячно (и устаревшие обновления истекают через 30 дней), мы ищем способ обновить установщик SCCM с последней версией Java. У нас есть возможность запускать сценарий Powershell из нашего установщика SCCM, но мы не нашли способ написать сценарий, который будет автоматически загружать и устанавливать последнюю версию Java.

Кто-нибудь знает, возможно ли это, и как мы можем это сделать?

Спасибо заранее!

+0

Вы можете задать вопрос, потому что вы спрашиваете о создании пакета установки программного обеспечения. Хотя это возможно ... если вы хотите помочь с этим, я предлагаю вам показать нам какой-то код, который вы попробовали, а затем сообщество поможет вам. – Matt

+0

Пакет установки программного обеспечения не является темой вопроса. Написание сценария для загрузки Java, как указано выше, мы не нашли способа загрузить последнюю версию Java, поэтому у нас нет кода для показа. Благодарю за ваш ответ. – korymiller

+0

В вашем вопросе указывается автоматическая загрузка и установка последней версии Java, поэтому я ответил так, как я сделал FYI – Matt

ответ

1

Вы можете, вероятно, использовать ссылки, доступные на этой странице для скачивания: http://java.com/en/download/manual.jsp

В качестве альтернативы, вы можете сделать загрузку раз и поместить его в общей папке, так что вы можете использовать простые методы для копирования файла из UNC-путь, такой как

\\fileserver\folder\installerpackage.exe 

Просто будьте готовы к головной боли. Имея дело с удалением и обновлением Java на десятках машин, я могу сказать, что это не всегда чистая деинсталляция/переустановка. Если они не улучшили деинсталлятор, есть шанс, что вы, в конце концов, столкнетесь с ситуацией, когда установщик Java считает, что он установлен, но это не так. Я также видел противоположное, где он думает, что он не установлен, но это так.

+0

Я думаю, что эти ссылки могут быть тем, что нам нужно. Спасибо огромное! – korymiller

2

Пожалуйста, посмотрите на this для загрузки файла с powershell и this для установки java silent. Например:

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. Но я не знаю, как вы можете получить ссылку. Надеюсь, это немного поможет.

+0

Спасибо за ответ! – korymiller

+0

Вам необходимо включить полезные части этих ссылок. Если они станут мертвыми позже, ваш ответ будет бесполезен для всех. – Matt

+0

Надеюсь, мое редактирование выполнит ваши пожелания. –

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 

Второй комплект и сгенерируйте имя из оригинальной опоры.

$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.

от MSI будет расположен по адресу:

$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, который представляет собой путь к msi, который можно использовать для построения y наш пакет SCCM.

Смежные вопросы