と思う人は多いと思ったので作ってみました。
営利目的とか会社で使うならRustDesk Server Proのライセンス買ってあげて下さいね。
RustDesk2.toml
rendezvous_server = 'RustDeskメインサーバのIPまたはホスト名:21116'
[options]
key = '生成済みの公開鍵'
custom-rendezvous-server = 'RustDeskメインサーバのIPまたはホスト名'
relay-server = 'RustDeskリレーサーバのIPまたはホスト名'
上記以外の設定はRustDeskクライアント側で設定変更をした後、AppDataディレクトリから該当のRustDesk2.toml
を見ると設定内容を確認できます。
Installer.ps1
# 管理者権限昇格要求用
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole("Administrators")) { Start-Process powershell.exe "-File `"$PSCommandPath`"" -Verb RunAs; exit }
Set-Location -Path (Split-Path -Path $MyInvocation.MyCommand.Definition -Parent)
# RustDeskのクライアントが存在していた場合、一旦アンインストールする
if (Test-Path "$env:APPDATA\RustDesk") {
& "C:\Program Files\RustDesk\rustdesk.exe" --uninstall
Start-Sleep -Seconds 15
}
# サービスのデータも削除する
Remove-Item -Recurse -Force "C:\Windows\ServiceProfiles\LocalService\AppData\Roaming\RustDesk" -ErrorAction SilentlyContinue
# 各ユーザーのデータも削除する
Get-ChildItem -Directory "C:\Users" | ForEach-Object {
$userDir = $_.FullName
$rustDeskPath = "$userDir\AppData\Roaming\RustDesk"
if (Test-Path $rustDeskPath) {
Remove-Item -Recurse -Force $rustDeskPath -ErrorAction SilentlyContinue
}
}
# rustdeskのインストーラーを実行する
& ".\rustdesk.exe" --silent-install
# インストールしてrustdesk.exeが叩けるようになるまで待つ
do {
Start-Sleep -Seconds 1
} until (Test-Path "C:\Program Files\RustDesk\rustdesk.exe")
# コンピューター名関連の処理をする
$computerName = $env:COMPUTERNAME
# コンピューター名の1文字目が英字以外の場合"R"を接頭語にする(好きなように変えられます )
if ($computerName[0] -notmatch '^[a-zA-Z]') {
$computerName = "R" + $computerName
}
# 英数字以外(ハイフンとか)使われている場合ヌル文字に置き換える
$cleanedComputerName = $computerName -replace '[^a-zA-Z0-9]', ''
#16文字を超える場合16文字以内に切り捨てる
if ($cleanedComputerName.Length -gt 16) {
$cleanedComputerName = $cleanedComputerName.Substring(0, 16)
}
$RDCN = $cleanedComputerName
# 事前に生成した設定ファイルを突っ込む
$configDir = "C:\Windows\ServiceProfiles\LocalService\AppData\Roaming\RustDesk\config"
New-Item -ItemType Directory -Path $configDir -Force
Copy-Item -Path "RustDesk2.toml" -Destination "$configDir\"
# 事前に生成したIDを突っ込む
$idContent = "id = '$RDCN'"
$idContent | Out-File -FilePath "$configDir\RustDesk.toml" -Encoding utf8
# 各ユーザーで同じことをする
Get-ChildItem -Directory "C:\Users" | ForEach-Object {
$userDir = $_.FullName
$userConfigDir = "$userDir\AppData\Roaming\RustDesk\config"
if (-not (Test-Path $userConfigDir)) {
New-Item -ItemType Directory -Path $userConfigDir -Force
Copy-Item -Path "RustDesk2.toml" -Destination "$userConfigDir\"
$idContent | Out-File -FilePath "$userConfigDir\RustDesk.toml" -Encoding utf8
}
}
# 念の為ちょっと寝かせる
Start-Sleep -Seconds 10
# 無人アクセス用パスワードを設定する(ちゃんとセキュリティには気をつけて設定して下さい)
& "C:\Program Files\RustDesk\rustdesk.exe" --password HogeFuga
上記をiexpressとかでパッケージ化、配布すれば無人インストールセットアップが出来ます。
IDが重複してしまった場合の処理は行っていません。また、判定もしていません。
OSS版サーバはユーザー側でのID変更は対応していません。(サーバ側のsqliteをさわさわすれば弄ることは可能、但しクライアント側も反映が必要)(--set-idを使わなかったのはこれが理由)
一度使用したIDは別のコンピューターに割り振ることはそのままでは出来ません。
サーバのsqliteを削除して再起動するか、編集すれば再利用することが出来ます。