user10883678

На Пикабу
100 рейтинг 0 подписчиков 0 подписок 1 пост 0 в горячем

Всегда свежий скрипт активации Windы и Offiсса - Microsoft-Activation-Scripts для Win PowerShell!

Всегда свежий скрипт активации Windы и Offiсса - Microsoft-Activation-Scripts для Win PowerShell! Mas, Активация, Powershell, Длиннопост

Захотелось мне спросить у ДипСика написать мне такой скрипт, т.к. работаю я админом и MAS - основной инструмент от жадности Билла ГЕЙтца и его прихлебателей. Хочу вот поделится с Вами!

Вот что их этого вышло, ну и конечно, думаю пригодится такой скрипт людям моей профессии. Актуальная версия всегда у тебя на компе! Скинул по сетке на станцию - и вперед!

Свежий софт, не отходя от кассы!

Я потратил где то час на общение с ним и тестирование, оно того стоило! Думаю подробности переписки никому не интересны, а вот результат - да!

Проверил на разных компах и серверах, все отрабатывает!

Наслаждайтесь:

# Улучшенный скрипт загрузки MAS с гарантированным определением версии

$targetDir = "C:\MAS"

$repoUrl = "https://github.com/massgravel/Microsoft-Activation-Scripts"

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

$apiUrl = "https://api.github.com/repos/massgravel/Microsoft-Activation..."

$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

}

}

Вот что у нас в итоге:

Всегда свежий скрипт активации Windы и Offiсса - Microsoft-Activation-Scripts для Win PowerShell! Mas, Активация, Powershell, Длиннопост

Все создалось! Пользуемся.

Всегда свежий скрипт активации Windы и Offiсса - Microsoft-Activation-Scripts для Win PowerShell! Mas, Активация, Powershell, Длиннопост

добавил себе в автозагрузку этот скрипт

Показать полностью 2
Отличная работа, все прочитано!