Easy install Script for Rustdesk
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