Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата 41275jur:
С PowerShell я не справлюсь. »
Справитесь, если уделите достаточно времени. Печально, конечно, что по сю пору нет вменяемого руководства по языку. В крайнем случае Вы всегда можете использовать и банальный .Net — VB или C++, благо что и компиляторы под рукой, и .Net нынче практически на девяносто процентах машин наличествует «искаропки», и даже Visual Studio в Express варианте бесплатна. На пакетных же файлах Ваша задача решаема через такую пень-колоду, что лучше и не вспоминать.

Цитата 41275jur:
Скрипт твой супер, хоть ты и говоришь, что ужас-ужас-ужас. »
Там действительно трэш, угар и содомия в коде — мои познания в нём крайне невелики.

Цитата 41275jur:
$sExpandPath - откуда взялась буква s »
Я написал . Обычный приём для нетипизированных языков — указывать подтип переменной, в данном случае — что она будет содержать строковое значение (да, я знаю, что там и строка — тоже объект).

Цитата 41275jur:
аналогично с $oRegExp4DownloadFileName - буква o и что это за 4 »
Аналогично. «o» — переменная будет «объектного» типа. «4» — читать следует как акроним слова «For», т.е. это могло бы выглядеть и как «$oRegExpForDownloadFileName». Также зачастую используют и «2» как акроним слова «To», например, «Go2Out» и т.п. Никакого сакрального смысла в них не вкладывается.

Цитата 41275jur:
ExpandPath, ExpandFileName, ExpandFullName - не могу нигде найти про них »
И не найдёте. Это просто имена обычных переменных.

Вот так уже малость получше будет, проверка, загрузка и распаковка самой утилиты и некоторых плагинов:
Скрытый текст
Код: Выделить весь код
# Imagine x86 — http://www.nyam.pe.kr/blog/entry/Imagine
# http://www.nyam.pe.kr/dev/imagine/download/unicode/Imagine_1.0.9_Unicode.zip
#
# Imagine Plugins x86 — http://www.nyam.pe.kr/blog/entry/Imagine-Plugins:
# http://www.nyam.pe.kr/dev/imagine/download/plugin/Imagine_Plugin_7Z_0.0.5.zip
# http://www.nyam.pe.kr/dev/imagine/download/plugin/Imagine_Plugin_Archive_0.0.6.zip
# http://www.nyam.pe.kr/dev/imagine/download/plugin/Imagine_Plugin_RAR_0.0.4.zip
# http://www.nyam.pe.kr/dev/imagine/download/plugin/Imagine_Plugin_WebP_0.0.8.zip
# & etc.

$aDownloadList = `
    (
        'Imagine - Image & Animation Viewer for Windows',
        'http://www.nyam.pe.kr/blog/entry/Imagine',
        '^http://www\.nyam\.pe\.kr/dev/imagine/download/unicode/(Imagine_[\d\.]+_Unicode\.zip)$',
        '^http://www\.nyam\.pe\.kr/dev/imagine/download/unicode/Imagine_([\d\.]+)_Unicode\.zip$',
        '.\Imagine',
        'Imagine.exe'
    ), (
        '7-zip File Format Plugin',
        'http://www.nyam.pe.kr/blog/entry/Imagine-Plugins',
        '^http://www\.nyam\.pe\.kr/dev/imagine/download/plugin/(Imagine_Plugin_7Z_[\d\.]+\.zip)$',
        '^http://www\.nyam\.pe\.kr/dev/imagine/download/plugin/Imagine_Plugin_7Z_([\d\.]+)\.zip$',
        '.\Imagine\Plugin',
        '7Z.plg'
    ), (
        'Numerous Archive File Formats Plugin',
        'http://www.nyam.pe.kr/blog/entry/Imagine-Plugins',
        '^http://www\.nyam\.pe\.kr/dev/imagine/download/plugin/(Imagine_Plugin_Archive_[\d\.]+\.zip)$',
        '^http://www\.nyam\.pe\.kr/dev/imagine/download/plugin/Imagine_Plugin_Archive_([\d\.]+)\.zip$',
        '.\Imagine\Plugin',
        'Archive\Archive.plg'
    ), (
        'RAR File Format Plugin',
        'http://www.nyam.pe.kr/blog/entry/Imagine-Plugins',
        '^http://www\.nyam\.pe\.kr/dev/imagine/download/plugin/(Imagine_Plugin_RAR_[\d\.]+\.zip)$',
        '^http://www\.nyam\.pe\.kr/dev/imagine/download/plugin/Imagine_Plugin_RAR_([\d\.]+)\.zip$',
        '.\Imagine\Plugin',
        'RAR.plg'
    ), (
        'WebP File Format Plugin',
        'http://www.nyam.pe.kr/blog/entry/Imagine-Plugins',
        '^http://www\.nyam\.pe\.kr/dev/imagine/download/plugin/(Imagine_Plugin_WebP_[\d\.]+\.zip)$',
        '^http://www\.nyam\.pe\.kr/dev/imagine/download/plugin/Imagine_Plugin_WebP_([\d\.]+)\.zip$',
        '.\Imagine\Plugin',
        'WebP\WebP.plg'
    ) | ForEach-Object -Process {
        [PSCustomObject]@{
            Name                    = $_[0];
            Uri                     = $_[1];
            RegExp4DownloadFileName = $_[2];
            RegExp4ProductVersion   = $_[3];
            ExpandPath              = $_[4];
            ExpandFileName          = $_[5]
        }
    }

foreach($oDownloadEntry in $aDownloadList) {
    $oUri                     = New-Object -TypeName 'System.Uri'                           -ArgumentList $oDownloadEntry.Uri
    $oRegExp4DownloadFileName = New-Object -TypeName 'System.Text.RegularExpressions.Regex' -ArgumentList $oDownloadEntry.RegExp4DownloadFileName, $([System.Text.RegularExpressions.RegexOptions]::IgnoreCase)
    $oRegExp4ProductVersion   = New-Object -TypeName 'System.Text.RegularExpressions.Regex' -ArgumentList $oDownloadEntry.RegExp4ProductVersion,   $([System.Text.RegularExpressions.RegexOptions]::IgnoreCase)
    $sExpandPath              = $oDownloadEntry.ExpandPath
    $sExpandFileName          = $oDownloadEntry.ExpandFileName
    $sExpandFullName          = "$sExpandPath\$sExpandFileName"

    Write-Host "`r`nUpdate checking [$($oDownloadEntry.Name)]…"

    try {
        $oHtmlWebResponseObject = Invoke-WebRequest -Uri $oUri -UseBasicParsing -ErrorAction Stop
    } catch {
        $oHttpStatusCode = $_.Exception.Response.StatusCode
        Write-Host "Can't load [$($oUri.AbsoluteUri)] ($($oHttpStatusCode.value__): $oHttpStatusCode)"
        continue
    }

    $oHtmlWebResponseObject.Links | ForEach-Object -Process {
        $sHRef = $_.href

        if($oRegExp4DownloadFileName.IsMatch($sHRef)) {
            $sDownloadFileName       = $oRegExp4DownloadFileName.Matches($sHRef).Item(0).Groups.Item(1).Value
            $sDownloadProductVersion = $oRegExp4ProductVersion.Matches($sHRef).Item(0).Groups.Item(1).Value
        
            Write-Host "Remote product version is [$sDownloadProductVersion]."

            if(Test-Path -Path $sExpandFullName -PathType Leaf) {
                $sExpandProductVersion = (Get-Item -Path $sExpandFullName).VersionInfo.ProductVersion
                Write-Host "Local product version is [$sExpandProductVersion]."
            } else {
                $sExpandProductVersion = "0.0.0.0"
                Write-Host "Local product not found."
            }

            if($sDownloadProductVersion -ne $sExpandProductVersion) {
                Write-Host "Try downloading…"
                (New-Object -TypeName 'System.Net.WebClient').DownloadFile($sHRef, $sDownloadFileName)
            
                if(Test-Path -Path $sDownloadFileName -PathType Leaf) {
                    Write-Host "Unzip downloaded file [$sDownloadFileName] into [$sExpandPath]…"
                    Expand-Archive -Path $sDownloadFileName -DestinationPath $sExpandPath -Force | Out-Null
                    Write-Host "Ready."
                } else {
                    Write-Host "Not found downloaded file [$sDownloadFileName]."
                }
            } else {
                Write-Host "Current version [$sExpandProductVersion] is up to date."
            }
        }
    }
}

Write-Host "`r`nThat's done."

При желании ещё можно удалять загруженные архивы, дабы не путались под ногами.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:10, 27-04-2017 | #22