Загрузка данных
Чтобы менять ключи налету без ручного редактирования 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 завершится, а новый подключится).