Всегда свежий скрипт активации Windы и Offiсса - Microsoft-Activation-Scripts для Win PowerShell!
Захотелось мне спросить у ДипСика написать мне такой скрипт, т.к. работаю я админом и MAS - основной инструмент от жадности Билла ГЕЙтца и его прихлебателей. Хочу вот поделится с Вами!
Вот что их этого вышло, ну и конечно, думаю пригодится такой скрипт людям моей профессии. Актуальная версия всегда у тебя на компе! Скинул по сетке на станцию - и вперед!
Свежий софт, не отходя от кассы!
Я потратил где то час на общение с ним и тестирование, оно того стоило! Думаю подробности переписки никому не интересны, а вот результат - да!
Проверил на разных компах и серверах, все отрабатывает!
Наслаждайтесь:
# Улучшенный скрипт загрузки MAS с гарантированным определением версии
$targetDir = "C:\MAS"
$fallbackUrl = "$repoUrl/archive/refs/heads/master.zip"
$archivePath = "$env:TEMP\MAS-latest.zip"
# 1. Создание целевой папки
if (-not (Test-Path -Path $targetDir -ErrorAction SilentlyContinue)) {
try {
New-Item -ItemType Directory -Path $targetDir -Force | Out-Null
Write-Host "[OK] Папка $targetDir создана" -ForegroundColor Green
} catch {
Write-Host "[ERROR] Ошибка создания папки: $_" -ForegroundColor Red
exit 1
}
}
# 2. Определение версии (3 способа)
function Get-MASVersion {
# Способ 1: Через GitHub API (самый точный)
try {
$response = Invoke-RestMethod -Uri $apiUrl -Method Get -ErrorAction Stop
$version = $response.tag_name -replace 'v',''
if ($version -match '^\d+\.\d+$') {
Write-Host "[INFO] Версия определена через GitHub API: $version" -ForegroundColor Cyan
return $version
}
} catch {
Write-Host "[WARNING] Не удалось получить версию через GitHub API: $_" -ForegroundColor Yellow
}
# Способ 2: Через парсинг главной страницы
try {
$html = Invoke-WebRequest -Uri $repoUrl -UseBasicParsing -ErrorAction Stop
if ($html.Content -match 'Latest release:.*?v(\d+\.\d+)') {
$version = $matches[1]
Write-Host "[INFO] Версия определена через парсинг страницы: $version" -ForegroundColor Cyan
return $version
}
} catch {
Write-Host "[WARNING] Не удалось распарсить версию со страницы: $_" -ForegroundColor Yellow
}
# Способ 3: Через файл version.txt после загрузки
try {
$tempDir = "$env:TEMP\MAS-version-check"
New-Item -ItemType Directory -Path $tempDir -Force | Out-Null
Invoke-WebRequest -Uri $fallbackUrl -OutFile "$tempDir\master.zip" -ErrorAction Stop
Expand-Archive -Path "$tempDir\master.zip" -DestinationPath $tempDir -Force
$versionFile = Get-ChildItem -Path $tempDir -Recurse -Filter "version.txt" -ErrorAction SilentlyContinue | Select-Object -First 1
if ($versionFile -and (Get-Content $versionFile.FullName -Raw) -match 'Version[\s:=]*([\d.]+)') {
$version = $matches[1]
Write-Host "[INFO] Версия определена через version.txt: $version" -ForegroundColor Cyan
return $version
}
} catch {
Write-Host "[WARNING] Не удалось определить версию через version.txt: $_" -ForegroundColor Yellow
} finally {
if (Test-Path $tempDir) { Remove-Item $tempDir -Recurse -Force }
}
return "UNKNOWN"
}
$version = Get-MASVersion
$downloadUrl = "$repoUrl/archive/refs/heads/master.zip" # Всегда используем master ветку
# 3. Загрузка
try {
Write-Host "Загрузка MAS $version..." -ForegroundColor Cyan
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -Uri $downloadUrl -OutFile $archivePath -UserAgent "PowerShell"
$ProgressPreference = 'Continue'
if (-not (Test-Path -Path $archivePath)) {
throw "Файл не был загружен"
}
} catch {
Write-Host "[ERROR] Ошибка загрузки: $_" -ForegroundColor Red
exit 1
}
# 4. Распаковка
$tempExtractDir = "$env:TEMP\MAS-temp-extract"
$finalDir = Join-Path -Path $targetDir -ChildPath "MAS_$version"
try {
# Очистка перед распаковкой
if (Test-Path -Path $tempExtractDir) {
Remove-Item -Path $tempExtractDir -Recurse -Force
}
New-Item -ItemType Directory -Path $tempExtractDir -Force | Out-Null
Write-Host "Распаковка..." -ForegroundColor Cyan
if (Test-Path -Path "C:\Program Files\7-Zip\7z.exe") {
& "C:\Program Files\7-Zip\7z.exe" x $archivePath -o"$tempExtractDir" -y | Out-Null
} else {
Expand-Archive -Path $archivePath -DestinationPath $tempExtractDir -Force
}
# Дополнительная проверка версии после распаковки
$extractedFolder = Get-ChildItem -Path $tempExtractDir | Where-Object { $_.PSIsContainer } | Select-Object -First 1
if ($extractedFolder) {
$versionFile = Get-ChildItem -Path $extractedFolder.FullName -Recurse -Filter "version.txt" -ErrorAction SilentlyContinue | Select-Object -First 1
if ($versionFile -and (Get-Content $versionFile.FullName -Raw) -match 'Version[\s:=]*([\d.]+)') {
$newVersion = $matches[1]
if ($newVersion -ne $version) {
Write-Host "[INFO] Обновление версии с $version на $newVersion" -ForegroundColor Yellow
$version = $newVersion
$finalDir = Join-Path -Path $targetDir -ChildPath "MAS_$version"
}
}
# Перенос в финальную папку
if (Test-Path -Path $finalDir) {
Remove-Item -Path $finalDir -Recurse -Force
}
Move-Item -Path $extractedFolder.FullName -Destination $finalDir -Force
Write-Host "[SUCCESS] Установлено в: $finalDir" -ForegroundColor Green
explorer $finalDir
} else {
throw "Не найдена распакованная папка"
}
} catch {
Write-Host "[ERROR] Ошибка при распаковке: $_" -ForegroundColor Red
exit 1
} finally {
# Очистка
if (Test-Path -Path $archivePath) {
Remove-Item -Path $archivePath -Force
}
if (Test-Path -Path $tempExtractDir) {
Remove-Item -Path $tempExtractDir -Recurse -Force
}
}
Вот что у нас в итоге: