RustDesk/RustInstall.ps1

266 lines
11 KiB
PowerShell
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

$ErrorActionPreference = 'silentlycontinue'
# Формируем пароль из зашифрованных частей
$p1 = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("cDk4"))
$p2 = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("Nng="))
$p3 = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("Yjc4"))
$rustdesk_pw = $p1 + $p2 + $p3
# Get your config string from your Web portal and Fill Below
$rustdesk_cfg = "0nI1JnL09GclRWL0lmL0NXdy9yL6MHc0RHaiojIpBXYiwiI9gjYwBjbXVERFRXZiNEVYBjRGdHUZhUUvBVRx52dWlmenlTY6t0U1IlMLhlI6ISeltmIsISdy5CdvBXZk1Cdp5CdzVnciojI5FGblJnIsISdy5CdvBXZk1Cdp5CdzVnciojI0N3boJye"
################################### Please Do Not Edit Below This Line #########################################
# Run as administrator and stays in the current directory
if (-Not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
if ([int](Get-CimInstance -Class Win32_OperatingSystem | Select-Object -ExpandProperty BuildNumber) -ge 6000) {
Start-Process PowerShell -Verb RunAs -ArgumentList "-NoProfile -ExecutionPolicy Bypass -Command `"cd '$pwd'; & '$PSCommandPath';`"";
Exit;
}
}
# Проверка наличия установленного RustDesk
$rustdeskInstalled = Test-Path "$env:ProgramFiles\RustDesk\rustdesk.exe"
$rdver = ((Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\RustDesk\" -ErrorAction SilentlyContinue).Version)
if ($rustdeskInstalled -and $rdver) {
echo "RustDesk $rdver is already installed. Importing configuration..."
cd $env:ProgramFiles\RustDesk
.\rustdesk.exe --config $rustdesk_cfg
.\rustdesk.exe --password $rustdesk_pw
} else {
$localRustDesk = Join-Path $PSScriptRoot "rustdesk.exe"
$rustdeskExistsLocally = Test-Path $localRustDesk
if (-not $rustdeskExistsLocally) {
$url = 'https://www.github.com//rustdesk/rustdesk/releases/latest'
$request = [System.Net.WebRequest]::Create($url)
$response = $request.GetResponse()
$realTagUrl = $response.ResponseUri.OriginalString
$RDLATEST = $realTagUrl.split('/')[-1].Trim('v')
echo "RustDesk $RDLATEST is the latest version."
} else {
$RDLATEST = "local"
}
if (!(Test-Path C:\ProgramData\RustDesk)) {
New-Item -ItemType Directory -Force -Path C:\ProgramData\RustDesk > null
}
cd C:\ProgramData\RustDesk
if ($rustdeskExistsLocally) {
echo "Found local rustdesk.exe, using it for installation."
Copy-Item -Path $localRustDesk -Destination ".\rustdesk.exe" -Force
} else {
echo "Downloading RustDesk version $RDLATEST."
powershell Invoke-WebRequest "https://github.com/rustdesk/rustdesk/releases/download/$RDLATEST/rustdesk-$RDLATEST-x86_64.exe" -Outfile "rustdesk.exe"
}
echo "Installing RustDesk."
Start-Process .\rustdesk.exe --silent-install
Start-Sleep -Seconds 10
$ServiceName = 'rustdesk'
$arrService = Get-Service -Name $ServiceName -ErrorAction SilentlyContinue
if ($arrService -eq $null) {
echo "Installing service."
cd $env:ProgramFiles\RustDesk
Start-Process .\rustdesk.exe --install-service -wait -Verbose
Start-Sleep -Seconds 20
}
while ($arrService.Status -ne 'Running') {
Start-Service $ServiceName
Start-Sleep -seconds 5
$arrService.Refresh()
}
echo "Please wait a few seconds."
Start-Sleep -Seconds 10
Remove-Item -Path "C:\ProgramData\RustDesk\rustdesk.exe" -Force
echo "Temporary installation files have been cleaned up."
cd $env:ProgramFiles\RustDesk
echo "Inputting configuration now."
.\rustdesk.exe --config $rustdesk_cfg
.\rustdesk.exe --password $rustdesk_pw
}
# Добавляем папку RustDesk в исключения Windows Defender
$defenderPath = "C:\Program Files\RustDesk"
try {
Add-MpPreference -ExclusionPath $defenderPath -ErrorAction Stop
echo "Added $defenderPath to Windows Defender exclusions."
} catch {
echo "Failed to add $defenderPath to Windows Defender exclusions: $_"
}
# Удаляем ярлык с общего рабочего стола
$publicDesktop = "C:\Users\Public\Desktop\RustDesk.lnk"
if (Test-Path $publicDesktop) {
Remove-Item -Path $publicDesktop -Force
echo "Removed RustDesk shortcut from Public Desktop."
}
# Создаем папку RustDesk в меню Пуск под Critical Fixes
$startMenuPath = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Critical Fixes\RustDesk"
if (!(Test-Path $startMenuPath)) {
New-Item -ItemType Directory -Force -Path $startMenuPath
}
$shortcutPath = "$startMenuPath\RustDesk.lnk"
$shell = New-Object -ComObject WScript.Shell
$shortcut = $shell.CreateShortcut($shortcutPath)
$shortcut.TargetPath = "$env:ProgramFiles\RustDesk\rustdesk.exe"
$shortcut.Save()
echo "Created RustDesk shortcut in Start Menu under Critical Fixes\RustDesk."
# Удаляем папку RustDesk из корня Programs
$rustDeskStartMenu = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\RustDesk"
if (Test-Path $rustDeskStartMenu) {
Remove-Item -Path $rustDeskStartMenu -Recurse -Force
echo "Removed RustDesk folder from Start Menu Programs."
}
# Добавляем параметры в конфигурационные файлы
$configPath = "$env:USERPROFILE\AppData\Roaming\RustDesk\config"
$config2Path = "$configPath\RustDesk2.toml"
$configLocalPath = "$configPath\RustDesk_local.toml"
if (!(Test-Path $configPath)) {
New-Item -ItemType Directory -Force -Path $configPath
}
if (!(Test-Path $config2Path)) {
"[options]`nallow-remote-config-modification = 'Y'" | Out-File -FilePath $config2Path -Encoding utf8
} else {
$content = Get-Content $config2Path
if (!($content -match "allow-remote-config-modification")) {
if ($content -match "\[options\]") {
$content = $content -replace "\[options\]", "[options]`nallow-remote-config-modification = 'Y'"
} else {
$content += "`n[options]`nallow-remote-config-modification = 'Y'"
}
$content | Out-File -FilePath $config2Path -Encoding utf8
}
}
if (!(Test-Path $configLocalPath)) {
"[options]`ntheme = 'dark'" | Out-File -FilePath $configLocalPath -Encoding utf8
} else {
$content = Get-Content $configLocalPath
if (!($content -match "theme")) {
if ($content -match "\[options\]") {
$content = $content -replace "\[options\]", "[options]`ntheme = 'dark'"
} else {
$content += "`n[options]`ntheme = 'dark'"
}
$content | Out-File -FilePath $configLocalPath -Encoding utf8
}
}
# Создание BAT-файла для удаления
$uninstallBatPath = "$env:ProgramFiles\RustDesk\Uninstall RustDesk.bat"
$uninstallBatContent = @"
@echo off
echo Stopping RustDeskOnlineCheck task...
schtasks /End /TN "RustDeskOnlineCheck"
timeout /t 2 >nul
echo Deleting RustDeskOnlineCheck task...
schtasks /Delete /TN "RustDeskOnlineCheck" /F
echo Stopping RustDesk service...
sc stop rustdesk
timeout /t 2 >nul
echo Uninstalling RustDesk...
"C:\Program Files\RustDesk\rustdesk.exe" --uninstall
echo Cleaning up files...
rd /s /q "C:\ProgramData\RustDesk"
rd /s /q "%appdata%\RustDesk"
rd /s /q "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Critical Fixes\RustDesk"
echo Removing Windows Defender exclusion...
powershell -Command "Remove-MpPreference -ExclusionPath 'C:\Program Files\RustDesk'" 2>nul
echo RustDesk has been completely removed.
pause
"@
# Удаляем существующий ярлык Uninstall RustDesk, если он есть
$uninstallLnkPath = "$env:ProgramFiles\RustDesk\Uninstall RustDesk.lnk"
if (Test-Path $uninstallLnkPath) {
Remove-Item -Path $uninstallLnkPath -Force
echo "Removed original Uninstall RustDesk shortcut."
}
# Создаем BAT-файл в папке RustDesk
$uninstallBatContent | Out-File -FilePath $uninstallBatPath -Encoding ASCII
echo "Created Uninstall RustDesk.bat in $env:ProgramFiles\RustDesk"
# Копируем BAT-файл в Critical Fixes\RustDesk
Copy-Item -Path $uninstallBatPath -Destination "$startMenuPath\Uninstall RustDesk.bat" -Force
echo "Copied Uninstall RustDesk.bat to $startMenuPath"
$rustdesk_id = .\rustdesk.exe --get-id | Write-Output -OutVariable rustdesk_id
echo "All done! Please double check the Network settings tab in RustDesk."
echo ""
echo "..............................................."
echo "RustDesk ID: $rustdesk_id"
$RustID = $rustdesk_id
$ComputerName = $env:COMPUTERNAME
$InstallTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$ServerURL = "https://rd.it-depot.ru/api/install"
$Body = @{
"rust_id" = $RustID
"computer_name" = $ComputerName
"install_time" = $InstallTime
} | ConvertTo-Json -Compress
Invoke-RestMethod -Uri $ServerURL -Method Post -Body $Body -ContentType "application/json"
echo "Initial entry added to address book."
echo "..............................................."
echo ""
# Создание скрипта для проверки онлайн-статуса
$checkScriptPath = "C:\ProgramData\RustDesk\RustDeskOnlineCheck.ps1"
$checkScriptContent = @"
`$ErrorActionPreference = 'SilentlyContinue'
`$RustID = "$RustID"
`$ComputerName = "$ComputerName"
`$InstallTime = "$InstallTime"
`$ServerURL = "https://rd.it-depot.ru/api/install"
while (`$true) {
`$Body = @{
`"rust_id`" = `$RustID
`"computer_name`" = `$ComputerName
`"install_time`" = `$InstallTime
`"last_seen`" = (Get-Date -Format `"yyyy-MM-dd HH:mm:ss`")
} | ConvertTo-Json -Compress
try {
Invoke-RestMethod -Uri `$ServerURL -Method Post -Body `$Body -ContentType `"application/json`" -ErrorAction Stop
Write-Host "Online ping sent for ID `$RustID at `(Get-Date -Format 'HH:mm:ss')" -ForegroundColor Green
}
catch {
Write-Host "Error sending online ping: `$_" -ForegroundColor Red
}
Start-Sleep -Seconds 30
}
"@
$checkScriptContent | Out-File -FilePath $checkScriptPath -Encoding UTF8
echo "Created online check script at $checkScriptPath"
# Создание задания в Планировщике задач
$taskName = "RustDeskOnlineCheck"
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -File `"$checkScriptPath`""
$trigger = New-ScheduledTaskTrigger -AtStartup
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable -RunOnlyIfNetworkAvailable
Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -Settings $settings -User "SYSTEM" -RunLevel Highest -Force
echo "Scheduled task '$taskName' created to check online status at system startup."
Start-ScheduledTask -TaskName $taskName
echo "Scheduled task '$taskName' has been started."
echo "Press Enter to open RustDesk."
pause
.\rustdesk.exe