Files
vpn-proxy/install.ps1

106 lines
4.8 KiB
PowerShell
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ==========================================
# 🚀 VPN PROXY INSTALLER
# ==========================================
# Этот скрипт автоматически скачивает и устанавливает VPN Proxy
# Использование:
# iwr https://git.dokops.ru/dokril/vpn-proxy/raw/branch/master/install.ps1 | iex
# Исправляем кодировку (кириллицу)
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$ErrorActionPreference = "Stop"
# --- 1. Проверка прав администратора ---
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]"Administrator")) {
Write-Warning "⚠️ Требуются права администратора!"
Write-Host "🔄 Перезапускаю скрипт с правами администратора..." -ForegroundColor Cyan
# Сохраняем скрипт во временный файл, если он запущен из памяти (iex)
if ($MyInvocation.MyCommand.CommandType -eq 'Script') {
Start-Process powershell -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$($MyInvocation.MyCommand.Path)`"" -Verb RunAs
}
else {
# Если запущено через IEX, мы не можем просто перезапустить файл.
# Поэтому мы просто просим пользователя запустить терминал от админа.
Write-Error "Пожалуйста, запустите PowerShell от имени Администратора и попробуйте снова."
}
exit
}
# --- 2. Настройки ---
$InstallRoot = "C:\Tools"
$InstallDir = "$InstallRoot\vpn-proxy"
# Точная ссылка предоставленная пользователем
$ZipUrl = "https://git.dokops.ru/dokril/vpn-proxy/archive/master.zip"
$TempZip = "$env:TEMP\vpn-proxy-install.zip"
Write-Host "🚀 Начинаем установку VPN Proxy..." -ForegroundColor Green
Write-Host "📂 Путь установки: $InstallDir" -ForegroundColor Gray
# Переходим во временную папку, чтобы не блокировать удаление, если мы уже в C:\Tools\vpn-proxy
Set-Location $env:TEMP
# --- 3. Подготовка папки ---
if (-not (Test-Path $InstallRoot)) {
New-Item -ItemType Directory -Path $InstallRoot -Force | Out-Null
}
# --- 4. Скачивание ---
Write-Host "⬇️ Скачивание архива обновления..." -ForegroundColor Cyan
try {
Invoke-WebRequest -Uri $ZipUrl -OutFile $TempZip
}
catch {
Write-Error "❌ Ошибка скачивания с $ZipUrl`nПроверьте подключение к интернету."
exit 1
}
# --- 5. Распаковка ---
Write-Host "📦 Распаковка..." -ForegroundColor Cyan
# Если папка уже есть, удаляем старую
if (Test-Path $InstallDir) {
try {
Remove-Item $InstallDir -Recurse -Force -ErrorAction Stop
}
catch {
Write-Warning "⚠️ Не удалось удалить старую папку $InstallDir"
Write-Warning " Ошибка: $($_.Exception.Message)"
Write-Warning " Убедитесь, что файлы не открыты в других программах и вы не находитесь в этой папке."
$retry = Read-Host " Нажмите Enter чтобы попробовать снова (или Ctrl+C для отмены)"
try {
Remove-Item $InstallDir -Recurse -Force -ErrorAction Stop
}
catch {
Write-Error "❌ Так и не удалось удалить папку. Установка прервана."
exit 1
}
}
}
Expand-Archive -Path $TempZip -DestinationPath $InstallRoot -Force
# Архивы обычно распаковываются в папку vpn-proxy-master или vpn-proxy-main
# Нам нужно переименовать её в vpn-proxy
$ExtractedFolder = Get-ChildItem -Path $InstallRoot -Directory | Where-Object { $_.Name -match "vpn-proxy-(master|main)" } | Select-Object -First 1
if ($ExtractedFolder) {
Rename-Item -Path $ExtractedFolder.FullName -NewName "vpn-proxy" -Force
}
# Удаляем временный архив
Remove-Item $TempZip -Force
if (-not (Test-Path "$InstallDir\manage.ps1")) {
Write-Error "❌ Ошибка установки: файл manage.ps1 не найден в $InstallDir"
exit 1
}
# --- 6. Запуск ---
Write-Host "✅ Установка завершена!" -ForegroundColor Green
Write-Host "🚀 Запускаем меню управления..." -ForegroundColor Cyan
Start-Sleep -Seconds 1
Set-Location $InstallDir
.\manage.ps1