Add install.ps1
This commit is contained in:
91
install.ps1
Normal file
91
install.ps1
Normal file
@@ -0,0 +1,91 @@
|
||||
|
||||
|
||||
# ControlD MDM Agent — Windows Installer
|
||||
# Usage: powershell -ExecutionPolicy Bypass -File install.ps1 -ControlDToken <TOKEN> -DashboardURL <URL> -EmployeeName <NAME>
|
||||
param(
|
||||
[Parameter(Mandatory=$true)][string]$ControlDToken,
|
||||
[Parameter(Mandatory=$true)][string]$DashboardURL,
|
||||
[Parameter(Mandatory=$true)][string]$EmployeeName
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
$CtrldDir = "C:\ProgramData\ControlD"
|
||||
$CtrldBin = "$CtrldDir\ctrld.exe"
|
||||
$CtrldConfig = "$CtrldDir\ctrld.toml"
|
||||
$DeviceID = [guid]::NewGuid().ToString()
|
||||
$Hostname = $env:COMPUTERNAME
|
||||
|
||||
Write-Host "[*] Installing ControlD MDM agent for $EmployeeName on $Hostname..."
|
||||
|
||||
# 1. Download ctrld binary
|
||||
Write-Host "[*] Downloading ctrld..."
|
||||
New-Item -ItemType Directory -Force -Path $CtrldDir | Out-Null
|
||||
$arch = if ([Environment]::Is64BitOperatingSystem) { "amd64" } else { "386" }
|
||||
$url = "https://github.com/Control-D-Inc/ctrld/releases/latest/download/ctrld-windows-$arch.exe"
|
||||
Invoke-WebRequest -Uri $url -OutFile $CtrldBin -UseBasicParsing
|
||||
|
||||
# 2. Write config
|
||||
Write-Host "[*] Writing ctrld.toml..."
|
||||
@"
|
||||
[upstream.0]
|
||||
endpoint = "https://dns.controld.com/$ControlDToken"
|
||||
type = "doh"
|
||||
timeout = 5000
|
||||
|
||||
[listener.0]
|
||||
ip = "127.0.0.1"
|
||||
port = 53
|
||||
"@ | Set-Content -Path $CtrldConfig -Encoding UTF8
|
||||
|
||||
# 3. Install as Windows Service
|
||||
Write-Host "[*] Installing Windows service..."
|
||||
& $CtrldBin service install --config $CtrldConfig 2>$null
|
||||
& $CtrldBin service start 2>$null
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
sc.exe create "ControlDAgent" binPath= "`"$CtrldBin`" run --config `"$CtrldConfig`"" start= auto | Out-Null
|
||||
sc.exe start "ControlDAgent" | Out-Null
|
||||
}
|
||||
|
||||
# 4. Set DNS on all adapters to 127.0.0.1
|
||||
Write-Host "[*] Setting system DNS..."
|
||||
Get-NetAdapter | Where-Object { $_.Status -eq 'Up' } | ForEach-Object {
|
||||
Set-DnsClientServerAddress -InterfaceIndex $_.ifIndex -ServerAddresses "127.0.0.1"
|
||||
}
|
||||
|
||||
# 5. Register with MDM backend
|
||||
Write-Host "[*] Registering device with MDM backend..."
|
||||
try {
|
||||
$body = @{
|
||||
device_id = $DeviceID
|
||||
hostname = $Hostname
|
||||
employee = $EmployeeName
|
||||
os = "windows"
|
||||
resolver_id = $ControlDToken
|
||||
} | ConvertTo-Json
|
||||
Invoke-RestMethod -Uri "$DashboardURL/api/register" -Method POST -Body $body -ContentType "application/json"
|
||||
} catch {
|
||||
Write-Host "[!] Warning: Could not reach MDM backend. Device will register on next heartbeat."
|
||||
}
|
||||
|
||||
# 6. Set up heartbeat scheduled task (every 5 min)
|
||||
Write-Host "[*] Setting up heartbeat..."
|
||||
$heartbeatScript = @"
|
||||
try {
|
||||
`$ip = (Invoke-RestMethod -Uri 'https://ifconfig.me' -UseBasicParsing -TimeoutSec 5)
|
||||
} catch { `$ip = 'unknown' }
|
||||
`$body = @{ device_id = '$DeviceID'; ip = `$ip } | ConvertTo-Json
|
||||
Invoke-RestMethod -Uri '$DashboardURL/api/heartbeat' -Method POST -Body `$body -ContentType 'application/json' -TimeoutSec 10
|
||||
"@
|
||||
$heartbeatPath = "$CtrldDir\heartbeat.ps1"
|
||||
$heartbeatScript | Set-Content -Path $heartbeatPath -Encoding UTF8
|
||||
|
||||
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-ExecutionPolicy Bypass -File `"$heartbeatPath`""
|
||||
$trigger = New-ScheduledTaskTrigger -RepetitionInterval (New-TimeSpan -Minutes 5) -Once -At (Get-Date)
|
||||
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
|
||||
Register-ScheduledTask -TaskName "ControlDHeartbeat" -Action $action -Trigger $trigger -Principal $principal -Force | Out-Null
|
||||
|
||||
Write-Host "[+] Installation complete!"
|
||||
Write-Host " Device ID: $DeviceID"
|
||||
Write-Host " Config: $CtrldConfig"
|
||||
Write-Host " DNS: 127.0.0.1 -> ControlD (DoH)"
|
||||
|
||||
Reference in New Issue
Block a user