Загрузка данных


Чтобы менять ключи налету без ручного редактирования config.json и без необходимости ставить Python, можно сделать универсальный скрипт на PowerShell или простой BAT-файл.
PowerShell уже встроен в любую Windows 10/11 и умеет парсить строку vless:// (включая как Reality, так и WebSocket), генерировать config.json и сразу перезапускать xray.exe.
Скрипт быстрой смены ключа (connect.ps1)
Создайте в папке C:\1 файл connect.ps1 со следующим содержимым:
param (
    [string]$Link
)

if (-not $Link) {
    $Link = Read-Host "Вставьте ключ vless://"
}

$Link = $Link.Trim()

if (-not ($Link -match "^vless://([^@]+)@([^:]+):(\d+)\??(.*)$")) {
    Write-Host "[-] Неверный формат vless:// ссылки!" -ForegroundColor Red
    exit 1
}

$uuid   = $Matches[1]
$server = $Matches[2]
$port   = [int]$Matches[3]
$query  = $Matches[4] -split "#"[0]

# Разбор query-параметров
$params = @{}
if ($query) {
    foreach ($part in ($query -split "&")) {
        $kv = $part -split "=", 2
        if ($kv.Length -eq 2) {
            $params[$kv[0]] = [System.Uri]::UnescapeDataString($kv[1])
        }
    }
}

$netType   = if ($params.ContainsKey("type")) { $params["type"] } else { "tcp" }
$security  = if ($params.ContainsKey("security")) { $params["security"] } else { "none" }
$sni       = if ($params.ContainsKey("sni")) { $params["sni"] } else { $server }
$fp        = if ($params.ContainsKey("fp")) { $params["fp"] } else { "chrome" }
$flow      = if ($params.ContainsKey("flow")) { $params["flow"] } else { "" }

$stream = @{
    network  = $netType
    security = $security
}

# Обработка Reality
if ($security -eq "reality") {
    $stream["realitySettings"] = @{
        serverName  = $sni
        fingerprint = $fp
        publicKey   = $params["pbk"]
        shortId     = if ($params.ContainsKey("sid")) { $params["sid"] } else { "" }
        spiderX     = if ($params.ContainsKey("spx")) { $params["spx"] } else { "/" }
    }
}

# Обработка TLS / WebSocket
if ($security -eq "tls") {
    $stream["tlsSettings"] = @{
        serverName     = $sni
        fingerprint    = $fp
        allowInsecure  = $true
        alpn           = @("http/1.1")
    }
}

if ($netType -eq "ws") {
    $wsPath = if ($params.ContainsKey("path")) { $params["path"] } else { "/" }
    $stream["wsSettings"] = @{
        path    = $wsPath
        headers = @{
            Host = $sni
        }
    }
}

# Сборка итогового JSON
$config = @{
    log = @{ loglevel = "warning" }
    inbounds = @(
        @{
            tag      = "socks-in"
            port     = 10808
            listen   = "127.0.0.1"
            protocol = "socks"
            settings = @{ udp = $true }
        },
        @{
            tag      = "http-in"
            port     = 10809
            listen   = "127.0.0.1"
            protocol = "http"
        }
    )
    outbounds = @(
        @{
            protocol = "vless"
            settings = @{
                vnext = @(
                    @{
                        address = $server
                        port    = $port
                        users   = @(
                            @{
                                id         = $uuid
                                encryption = "none"
                                flow       = $flow
                            }
                        )
                    }
                )
            }
            streamSettings = $stream
        }
    )
}

$jsonText = $config | ConvertTo-Json -Depth 10
[System.IO.File]::WriteAllText("$PSScriptRoot\config.json", $jsonText, [System.Text.Encoding]::UTF8)

Write-Host "[+] config.json успешно обновлен для $server:$port ($security/$netType)" -ForegroundColor Green

# Остановка старых процессов xray, если были запущены
Get-Process -Name "xray" -ErrorAction SilentlyContinue | Stop-Process -Force

Write-Host "[*] Запуск xray.exe... Для выхода нажмите Ctrl+C" -ForegroundColor Cyan
& "$PSScriptRoot\xray.exe" run -c "$PSScriptRoot\config.json"

Как пользоваться
Чтобы привязать быстрый вызов прямо к обычной командной строке, создайте рядом файл run.bat:
@echo off
powershell -ExecutionPolicy Bypass -File "%~dp0connect.ps1" %*

Теперь в CMD достаточно написать:
run.bat "vless://ВАШ_НОВЫЙ_КЛЮЧ"

Или просто:
run.bat

(Скрипт сам напишет Вставьте ключ vless://, вы нажмете правой кнопкой мыши для вставки, нажмете Enter — и конфиг сразу пересоберется, старый Xray завершится, а новый подключится).