Цитата 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."
При желании ещё можно удалять загруженные архивы, дабы не путались под ногами.