# ========================================================= # MAX Windows Toolkit - 安装 RustDesk(含服务器配置) # 中文界面,统一风格 # 功能:安装/更新 RustDesk、导入服务器配置、设置固定密码 # ========================================================= $Common = "C:\Setup\windows\lib\common.ps1" if (Test-Path $Common) { . $Common } Write-Header "安装 RustDesk 远程支持" Show-AdminWarn # --------------------------------------------------------- # 配置 # --------------------------------------------------------- $AppsDir = "C:\Setup\apps" $AppBaseUrl = if ($Global:AppBaseUrl) { $Global:AppBaseUrl } else { "$Global:RepoBase/apps" } $RustDeskFileName = "rustdesk-Setup.exe" $RustDeskUrl = "$AppBaseUrl/$RustDeskFileName" $RustDeskInstaller = Join-Path $AppsDir $RustDeskFileName # RustDesk 服务器配置(注意:不要将配置放到公开仓库) $RustDeskConfigString = "Qfi0za0UXeMJXT21WZINVYYFzTohDNiBVe4sENX90QIlWTrdlUtdFRoB1QiVHaiojI5V2aiwiI0ETMxIjOt92YugXYtZnb19yL6AHd0hmI6ISawFmIsISbvNmL4FWb25WdiojI5FGblJnIsISbvNmL4FWb25WdiojI0N3boJye" $RustDeskPermanentPassword = "88888888" try { New-Item -ItemType Directory -Path $AppsDir -Force -ErrorAction Stop | Out-Null } catch {} # --------------------------------------------------------- # 辅助函数 # --------------------------------------------------------- # 查找 RustDesk 可执行文件 function Get-RustDeskExePath { $Candidates = @( "C:\Program Files\RustDesk\rustdesk.exe", "C:\Program Files (x86)\RustDesk\rustdesk.exe", "$env:ProgramFiles\RustDesk\rustdesk.exe" ) if (${env:ProgramFiles(x86)}) { $Candidates += "${env:ProgramFiles(x86)}\RustDesk\rustdesk.exe" } foreach ($Path in $Candidates) { if (-not [string]::IsNullOrWhiteSpace($Path) -and (Test-Path $Path)) { return $Path } } foreach ($Root in @("C:\Program Files", "C:\Program Files (x86)")) { if (Test-Path $Root) { $Found = Get-ChildItem -Path $Root -Filter "rustdesk.exe" -Recurse -File -ErrorAction SilentlyContinue | Select-Object -First 1 if ($Found) { return $Found.FullName } } } return $null } # 关闭 RustDesk 进程 function Stop-RustDeskProcesses { Write-Info "正在关闭 RustDesk 进程..." Get-Process -Name "rustdesk" -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue Start-Sleep -Seconds 2 } # 下载 RustDesk 安装程序 function Download-RustDeskInstaller { Write-Info "正在下载/更新 RustDesk 安装程序..." Write-Muted "URL : $RustDeskUrl" Write-Muted "路径: $RustDeskInstaller" if (Download-File -Url $RustDeskUrl -OutFile $RustDeskInstaller) { try { Unblock-File -Path $RustDeskInstaller -ErrorAction SilentlyContinue } catch {} Write-OK "RustDesk 安装程序已就绪" return $true } Write-Err "下载 RustDesk 安装程序失败" return $false } # 安装 RustDesk function Install-RustDesk { if (-not (Test-IsAdmin)) { Write-Warn "当前 PowerShell 未以管理员身份运行" Write-Warn "RustDesk 安装可能失败或密码设置可能无效" Write-Warn "建议以管理员身份运行 PowerShell" } if (-not (Download-RustDeskInstaller)) { return $false } try { Unblock-File -Path $RustDeskInstaller -ErrorAction SilentlyContinue } catch {} Stop-RustDeskProcesses Write-Info "正在安装/更新 RustDesk..." Write-Muted "安装程序: $RustDeskInstaller" Write-Muted "参数: --silent-install" try { $Process = Start-Process -FilePath $RustDeskInstaller -ArgumentList "--silent-install" -PassThru $Exited = $Process.WaitForExit(600000) if ($Exited) { Write-OK "RustDesk 安装程序已退出,退出代码: $($Process.ExitCode)" } else { Write-Warn "RustDesk 安装超时,正在终止安装程序..." Stop-Process -Id $Process.Id -Force -ErrorAction SilentlyContinue } Start-Sleep -Seconds 8 $RustDeskExe = Get-RustDeskExePath if ($RustDeskExe) { Write-OK "RustDesk 已安装: $RustDeskExe" return $true } Write-Warn "RustDesk 安装已完成,但未找到 rustdesk.exe" return $false } catch { Write-Err "RustDesk 安装失败" Write-Muted $_.Exception.Message return $false } } # 导入 RustDesk 服务器配置 function Import-RustDeskServerConfig { param([string]$ConfigString) if ([string]::IsNullOrWhiteSpace($ConfigString)) { Write-Warn "RustDesk 配置字符串为空,跳过服务器配置导入" return $false } $ConfigString = $ConfigString.Trim().TrimStart("=") if ([string]::IsNullOrWhiteSpace($ConfigString)) { Write-Err "RustDesk 配置字符串清理后无效" return $false } $RustDeskExe = Get-RustDeskExePath if ([string]::IsNullOrWhiteSpace($RustDeskExe)) { Write-Err "未找到 rustdesk.exe,跳过服务器配置导入" return $false } Write-Info "正在导入 RustDesk 服务器配置..." Write-Muted "RustDesk 路径: $RustDeskExe" try { Stop-RustDeskProcesses Write-Muted "执行: rustdesk.exe --config <隐藏配置>" $Process = Start-Process -FilePath $RustDeskExe -ArgumentList @("--config", $ConfigString) -PassThru -WindowStyle Hidden $Exited = $Process.WaitForExit(15000) if ($Exited) { Write-OK "RustDesk 服务器配置导入完成,退出代码: $($Process.ExitCode)" } else { Write-Warn "RustDesk 配置导入命令超时,继续执行..." } Start-Sleep -Seconds 2 Stop-RustDeskProcesses return $true } catch { Write-Err "导入 RustDesk 服务器配置失败" Write-Muted $_.Exception.Message return $false } } # 设置 RustDesk 固定密码 function Set-RustDeskPermanentPassword { param([string]$Password) if ([string]::IsNullOrWhiteSpace($Password)) { Write-Warn "RustDesk 固定密码为空,跳过设置" return $false } $RustDeskExe = Get-RustDeskExePath if ([string]::IsNullOrWhiteSpace($RustDeskExe)) { Write-Err "未找到 rustdesk.exe,跳过密码设置" return $false } Write-Info "正在设置 RustDesk 固定密码..." Write-Muted "密码: ********" try { Stop-RustDeskProcesses $Process = Start-Process -FilePath $RustDeskExe -ArgumentList @("--password", $Password) -PassThru -WindowStyle Hidden $Exited = $Process.WaitForExit(15000) if ($Exited) { Write-OK "RustDesk 固定密码命令完成,退出代码: $($Process.ExitCode)" } else { Write-Warn "RustDesk 密码命令超时,继续执行..." } Start-Sleep -Seconds 2 Stop-RustDeskProcesses return $true } catch { Write-Err "设置 RustDesk 固定密码失败" Write-Muted $_.Exception.Message return $false } } # 获取 RustDesk ID function Get-RustDeskId { $RustDeskExe = Get-RustDeskExePath if ([string]::IsNullOrWhiteSpace($RustDeskExe)) { return $null } try { $Id = & $RustDeskExe --get-id 2>$null if (-not [string]::IsNullOrWhiteSpace($Id)) { return $Id.Trim() } } catch {} return $null } # 启动 RustDesk function Start-RustDesk { $RustDeskExe = Get-RustDeskExePath if ([string]::IsNullOrWhiteSpace($RustDeskExe)) { Write-Err "未找到 rustdesk.exe,请先安装 RustDesk" return } Write-Info "正在启动 RustDesk..." Write-Muted "路径: $RustDeskExe" try { Start-Process -FilePath $RustDeskExe Write-OK "RustDesk 已启动" } catch { Write-Err "启动 RustDesk 失败" Write-Muted $_.Exception.Message } } # 显示结果 function Show-RustDeskResult { Write-OK "================================================" Write-OK "RustDesk 远程支持已就绪" Write-OK "================================================" $Id = Get-RustDeskId if ($Id) { Write-OK "RustDesk ID : $Id" } else { Write-Warn "RustDesk ID : 请在 RustDesk 窗口中查看" } Write-OK "固定密码: 88888888" Write-Info "" Write-Info "注意事项:" Write-Info "- 临时密码功能未被禁用" Write-Info "- 可使用临时密码或固定密码连接" Write-Info "- 长期无人值守访问建议后续更改更强密码" } # --------------------------------------------------------- # 直接执行 # --------------------------------------------------------- Write-Info "此脚本将直接执行以下操作:" Write-Info "- 安装/更新 RustDesk" Write-Info "- 导入服务器配置" Write-Info "- 设置固定密码为 88888888" Write-Info "- 启动 RustDesk" Write-Info "" try { if (Install-RustDesk) { Import-RustDeskServerConfig -ConfigString $RustDeskConfigString | Out-Null Set-RustDeskPermanentPassword -Password $RustDeskPermanentPassword | Out-Null Start-RustDesk Start-Sleep -Seconds 3 Show-RustDeskResult } else { Write-Err "" Write-Err "RustDesk 安装失败,请检查网络或安装程序" } } catch { Write-Err "脚本执行异常" Write-Muted $_.Exception.Message } Write-Line Write-OK "脚本执行完成" Pause-Max