266 lines
11 KiB
PowerShell
266 lines
11 KiB
PowerShell
$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 |