$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.exe в текущей папке $localRustDesk = Join-Path $PSScriptRoot "rustdesk.exe" $rustdeskExistsLocally = Test-Path $localRustDesk if (-not $rustdeskExistsLocally) { # Checks for the latest version of RustDesk $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" # Устанавливаем фиктивную версию для локального файла } # Checks the version of RustDesk installed. $rdver = ((Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\RustDesk\" -ErrorAction SilentlyContinue).Version) # Skips to inputting the configuration if the latest version of RustDesk is already installed. if ($rdver -eq $RDLATEST -and -not $rustdeskExistsLocally) { echo "RustDesk $rdver is already installed." cd $env:ProgramFiles\RustDesk echo "Inputting configuration now." .\rustdesk.exe --config $rustdesk_cfg .\rustdesk.exe --password $rustdesk_pw # Добавляем параметры в конфигурационные файлы $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 } } $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" echo "Password: $rustdesk_pw" echo "..............................................." echo "" echo "Press Enter to open RustDesk." pause .\rustdesk.exe exit } 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 } } $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 $trigger.Repetition = New-ScheduledTaskTriggerRepetition -Interval (New-TimeSpan -Seconds 30) # Интервал 30 секунд # Регистрация задания Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -Settings $settings -User "SYSTEM" -RunLevel Highest -Force echo "Scheduled task '$taskName' created to check online status every 30 seconds at system startup." # Немедленный запуск задания Start-ScheduledTask -TaskName $taskName echo "Scheduled task '$taskName' has been started." echo "Press Enter to open RustDesk." pause .\rustdesk.exe