Easy install Script for Rustdesk
at master 6.0 kB view raw
1$ErrorActionPreference= 'silentlycontinue' 2#Run as administrator and stays in the current directory 3if (-Not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) { 4 if ([int](Get-CimInstance -Class Win32_OperatingSystem | Select-Object -ExpandProperty BuildNumber) -ge 6000) { 5 Start-Process PowerShell -Verb RunAs -ArgumentList "-NoProfile -ExecutionPolicy Bypass -Command `"cd '$pwd'; & '$PSCommandPath';`""; 6 Exit; 7 } 8} 9# Replace wanipreg and keyreg with the relevant info for your install. IE wanipreg becomes your rustdesk server IP or DNS and keyreg becomes your public key. 10 11$rustdesk_url = 'https://github.com/rustdesk/rustdesk/releases/latest' 12$request = [System.Net.WebRequest]::Create($rustdesk_url) 13$response = $request.GetResponse() 14$realTagUrl = $response.ResponseUri.OriginalString 15$rustdesk_version = $realTagUrl.split('/')[-1].Trim('v') 16Write-Output("Installing Rustdesk version $rustdesk_version") 17 18function OutputIDandPW([String]$rustdesk_id, [String]$rustdesk_pw) { 19 Write-Output("######################################################") 20 Write-Output("# #") 21 Write-Output("# CONNECTION PARAMETERS: #") 22 Write-Output("# #") 23 Write-Output("######################################################") 24 Write-Output("") 25 Write-Output(" RustDesk-ID: $rustdesk_id") 26 Write-Output(" RustDesk-Password: $rustdesk_pw") 27 Write-Output("") 28} 29 30If (!(Test-Path $env:Temp)) { 31 New-Item -ItemType Directory -Force -Path $env:Temp > null 32} 33 34If (!(Test-Path "$env:ProgramFiles\Rustdesk\RustDesk.exe")) { 35 36 cd $env:Temp 37 38 If ([Environment]::Is64BitOperatingSystem) { 39 $os_arch = "x64" 40 } Else { 41 $os_arch = "x32" 42 } 43 44 Invoke-WebRequest https://github.com/rustdesk/rustdesk/releases/download/$rustdesk_version/rustdesk-$rustdesk_version-windows_$os_arch.zip -Outfile rustdesk.zip 45 46 Expand-Archive rustdesk.zip 47 cd rustdesk 48 Start-Process "rustdesk-$rustdesk_version-putes.exe" -argumentlist "--silent-install" -wait 49 50 # Set URL Handler 51 New-Item -Path "HKLM:\SOFTWARE\Classes\RustDesk" > null 52 Set-ItemProperty -Path "HKLM:\SOFTWARE\Classes\RustDesk" -Name "(Default)" -Value "URL:RustDesk Protocol" > null 53 New-ItemProperty -Path "HKLM:\SOFTWARE\Classes\RustDesk" -Name "URL Protocol" -Type STRING > null 54 55 New-Item -Path "HKLM:\SOFTWARE\Classes\RustDesk\DefaultIcon" > null 56 Set-ItemProperty -Path "HKLM:\SOFTWARE\Classes\RustDesk\DefaultIcon" -Name "(Default)" -Value "RustDesk.exe,0" > null 57 58 New-Item -Path "HKLM:\SOFTWARE\Classes\RustDesk\shell" > null 59 New-Item -Path "HKLM:\SOFTWARE\Classes\RustDesk\shell\open" > null 60 New-Item -Path "HKLM:\SOFTWARE\Classes\RustDesk\shell\open\command" > null 61 $rustdesklauncher = '"' + $env:ProgramFiles + '\RustDesk\RustDeskURLLauncher.exe" %1"' 62 Set-ItemProperty -Path "HKLM:\SOFTWARE\Classes\RustDesk\shell\open\command" -Name "(Default)" -Value $rustdesklauncher > null 63 64 Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force > null 65 Install-Module ps2exe -Force > null 66 67$urlhandler_ps1 = @" 68 `$url_handler = `$args[0] 69 `$rustdesk_id = `$url_handler -creplace '(?s)^.*\:','' 70 Start-Process -FilePath '$env:ProgramFiles\RustDesk\rustdesk.exe' -ArgumentList "--connect `$rustdesk_id" 71"@ 72 73 New-Item "$env:ProgramFiles\RustDesk\urlhandler.ps1" > null 74 Set-Content "$env:ProgramFiles\RustDesk\urlhandler.ps1" $urlhandler_ps1 > null 75 Invoke-Ps2Exe "$env:ProgramFiles\RustDesk\urlhandler.ps1" "$env:ProgramFiles\RustDesk\RustDeskURLLauncher.exe" > null 76 77 # Cleanup Tempfiles 78 Remove-Item "$env:ProgramFiles\RustDesk\urlhandler.ps1" > null 79 cd $env:Temp 80 Remove-Item $env:Temp\rustdesk -Recurse > null 81 Remove-Item $env:Temp\rustdesk.zip > null 82} 83 84# Write config 85$RustDesk2_toml = @" 86rendezvous_server = 'wanipreg' 87nat_type = 1 88serial = 0 89 90[options] 91custom-rendezvous-server = 'wanipreg' 92key = 'keyreg' 93relay-server = 'wanipreg' 94api-server = 'https://wanipreg' 95enable-audio = 'N' 96"@ 97 98If (!(Test-Path $env:AppData\RustDesk\config\RustDesk2.toml)) { 99 New-Item $env:AppData\RustDesk\config\RustDesk2.toml > null 100} 101Set-Content $env:AppData\RustDesk\config\RustDesk2.toml $RustDesk2_toml > null 102 103If (!(Test-Path $env:WinDir\ServiceProfiles\LocalService\AppData\Roaming\RustDesk\config\RustDesk2.toml)) { 104 New-Item $env:WinDir\ServiceProfiles\LocalService\AppData\Roaming\RustDesk\config\RustDesk2.toml > null 105} 106Set-Content $env:WinDir\ServiceProfiles\LocalService\AppData\Roaming\RustDesk\config\RustDesk2.toml $RustDesk2_toml > null 107 108$random_pass = (-join ((65..90) + (97..122) | Get-Random -Count 8 | % {[char]$_})) 109Start-Process "$env:ProgramFiles\RustDesk\RustDesk.exe" -argumentlist "--password $random_pass" -wait 110 111# Get RustDesk ID 112If (!("$env:WinDir\ServiceProfiles\LocalService\AppData\Roaming\RustDesk\config\RustDesk.toml")) { 113 $rustdesk_id = (Get-Content $env:AppData\RustDesk\config\RustDesk.toml | Where-Object { $_.Contains("id") }) 114 $rustdesk_id = $rustdesk_id.Split("'")[1] 115 $rustdesk_pw = (Get-Content $env:AppData\RustDesk\config\RustDesk.toml | Where-Object { $_.Contains("password") }) 116 $rustdesk_pw = $rustdesk_pw.Split("'")[1] 117 Write-Output("Config file found in user folder") 118 OutputIDandPW $rustdesk_id $rustdesk_pw 119} Else { 120 $rustdesk_id = (Get-Content $env:WinDir\ServiceProfiles\LocalService\AppData\Roaming\RustDesk\config\RustDesk.toml | Where-Object { $_.Contains("id") }) 121 $rustdesk_id = $rustdesk_id.Split("'")[1] 122 $rustdesk_pw = (Get-Content $env:WinDir\ServiceProfiles\LocalService\AppData\Roaming\RustDesk\config\RustDesk.toml | Where-Object { $_.Contains("password") }) 123 $rustdesk_pw = $rustdesk_pw.Split("'")[1] 124 Write-Output "Config file found in windows service folder" 125 OutputIDandPW $rustdesk_id $rustdesk_pw 126} 127 128Stop-Process -Name RustDesk -Force > null 129Start-Service -Name RustDesk > null