Smitis
Silver Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Код: <# Обновление TCC RT x86 и TCC RT x64 v24, версия 2019.01.31 Папка с TCC RT x86 расположена ..\TCCRT относительно скрипта (задаётся переменной $tcc32dir) Папка с TCC RT x64 расположена ..\TCCRT64 относительно скрипта (задаётся переменной $tcc64dir) В случае измения версии TCC RT, изменить адрес в переменной $setuplink Параметры: -NotCheck (сокращённо -NC) - не сравнивать даты, обновление будет проведено в любом случае -NotDelete (сокращённо -ND) - после обновления не удалять инсталятор (tcc-rt.exe) и папку с распакованными файлами (имеет буквенно-цифровой вид типа C3175DD) Особенности обновления: - Так как на сайте версию иногда "забывают" обновить, обновление определяется по дате файла инсталятора. Дата последнего обновления храниться в самом скрипте в переменной $date1s. - Инсталятор скачивается и распаковывается (запускается с ключом /extract). - Распаковываются msi-файлы во временные папки. - Из распакованных файлов удаляются все языковые файлы, кроме русского и английского, updater.exe, файлы txt. - Состав файлов иногда меняется поэтому проверяются файлы в папке назначения и для "лишних" файлов exe, dll и tlb, отсутствующих в инсталяторе, выводиться сообщение "Extra: ..." #> param( [Parameter()] [Alias('NC')] [switch] $NotCheck, [Parameter()] [Alias('ND')] [switch] $NotDelete ) $scriptfile = $MyInvocation.MyCommand.Path $scriptdir = $MyInvocation.MyCommand.Path | Split-Path -Parent $tcc32dir = "$scriptdir\..\TCCRT" $tcc64dir = "$scriptdir\..\TCCRT64" $setuplink = "https://jpsoft.com/downloads/v24/tcc-rt.exe" $setupfile = [System.IO.Path]::GetFileName($setuplink) # Строка $date1s перезаписывается при обновлении!!! $date1s = "Mon, 28 Jan 2019 17:45:59 GMT" $date1 = [datetime] 0 if ($date1s) { try { $date1 = [datetime]::ParseExact($date1s,"r",$null) } catch {} } function UnpackMsi($msi,$sub,$dst) { $temp = [System.IO.Path]::GetDirectoryName($msi) Start-Process -Wait "msiexec.exe" -ArgumentList "/a",$msi,"/qb","TARGETDIR=$temp\$sub" if (Test-Path "$temp\$sub\32-bit") { Move-Item "$temp\$sub\32-bit\*" "$temp\$sub" -Force Remove-Item "$temp\$sub\32-bit" -Force } "*.msi","*.txt","french.dll","german.dll","italian.dll","spanish.dll","updater.exe" | foreach { Remove-Item (Join-Path "$temp\$sub" $_) -Force -EA Silent } Get-ChildItem "$temp\$sub" -File | foreach { $srcname = $_.Name.ToLower() $srcfile = $_.FullName if ($srcname -cne $_.Name) { # в нижний регистр Rename-Item $srcfile $srcname } Write-Host "Copy: $srcname" Copy-Item $srcfile $dst -Force } # Проверить наличие "лишних" файлов exe и dll Get-ChildItem -Lit $dst | where { ".exe",".dll" -contains $_.Extension } | foreach { if (-not (Test-Path (Join-Path "$temp\$sub" $_.Name))) { Write-Host "Extra: $($_.Name)" } } } Write-Host "TCCRT Update" Write-Host "Check..." [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $web = Invoke-WebRequest $setuplink -Method Head $date2s = $web.Headers["Last-Modified"] $date2 = [datetime]::ParseExact($date2s,"r",$null) Write-Host ("Previous setup date: "+$date1.DateTime) #Write-Host ("Previous setup date: {0:yyyy-MM-dd HH:mm:ss}" -f $date1) Write-Host ("New setup date: "+$date2.DateTime) #Write-Host ("New setup date: {0:yyyy-MM-dd HH:mm:ss}" -f $date2) Get-ChildItem -Lit $tcc64dir -Filter "*.log" -Recurse | Remove-Item -Force Get-ChildItem -Lit $tcc32dir -Filter "*.log" -Recurse | Remove-Item -Force if ($date2 -gt $date1 -or $NotCheck) { [string[]]$script = Get-Content $scriptfile for ($i=0;$i -lt $script.Length;$i++) { if ($script[$i] -match '^\$date1s\s*=') { $script[$i] = '$date1s = "'+$date2s+'"' break } } Set-Content $scriptfile $script -Enc UTF8 Write-Host "Download $setuplink" $temp = $env:TEMP Set-Location $env:TEMP Invoke-WebRequest $setuplink -Out $setupfile Write-Host "Unpack..." Start-Process -Wait $setupfile -ArgumentList "/extract:$temp","/exenoupdates" Get-ChildItem "." -Dir | sort -Property LastWriteTime -Descending | foreach { # ищем новую папку созданную при распаковке $temp = $_.FullName if (Test-Path -Lit "$temp\tcc-rt.msi") { Write-Host "Temporary folder: $temp" Write-Host "Destination: $tcc32dir" UnpackMsi "$temp\tcc-rt.msi" "x86" $tcc32dir Write-Host "Destination: $tcc64dir" UnpackMsi "$temp\tcc-rt.x64.msi" "x64" $tcc64dir if (-not $NotDelete) { Remove-Item $setupfile Remove-Item $temp -Recurse -Force } break } } } |
| Всего записей: 3219 | Зарегистр. 09-02-2003 | Отправлено: 12:25 23-11-2018 | Исправлено: Smitis, 20:31 14-04-2019 |
|