69 lines
1.8 KiB
PowerShell
69 lines
1.8 KiB
PowerShell
#Requires -RunAsAdministrator
|
|
|
|
param(
|
|
[Parameter(Mandatory=$false)]
|
|
[string]$ComputerName
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
# Verify running as Administrator
|
|
$identity = [Security.Principal.WindowsIdentity]::GetCurrent()
|
|
$principal = [Security.Principal.WindowsPrincipal]$identity
|
|
if (-not $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
|
|
Write-Error "This script must be run as a machine Administrator."
|
|
exit 1
|
|
}
|
|
|
|
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Definition
|
|
|
|
# --- Read deployment config ---
|
|
|
|
$configFile = Join-Path $ScriptDir "bootstrap.json"
|
|
if (-not (Test-Path $configFile)) {
|
|
Write-Error "Missing bootstrap.json in $ScriptDir. This file should be provided by the domain administrator."
|
|
exit 1
|
|
}
|
|
|
|
try {
|
|
$config = Get-Content $configFile -Raw | ConvertFrom-Json
|
|
} catch {
|
|
Write-Error "Failed to parse bootstrap.json: $_"
|
|
exit 1
|
|
}
|
|
|
|
if (-not $config.DnsServer) {
|
|
Write-Error "bootstrap.json is missing required field: DnsServer"
|
|
exit 1
|
|
}
|
|
if (-not $config.Domain) {
|
|
Write-Error "bootstrap.json is missing required field: Domain"
|
|
exit 1
|
|
}
|
|
|
|
$DnsServer = $config.DnsServer
|
|
$Domain = $config.Domain
|
|
|
|
# --- Step 1: Install Nebula ---
|
|
|
|
Write-Host ""
|
|
Write-Host "=== Step 1/3: Installing Nebula ==="
|
|
& "$ScriptDir\install-nebula.ps1" -DnsServer $DnsServer -Domain $Domain
|
|
if ($LASTEXITCODE -ne 0) { exit 1 }
|
|
|
|
# --- Step 2: Set DNS ---
|
|
|
|
Write-Host ""
|
|
Write-Host "=== Step 2/3: Configuring DNS ==="
|
|
& "$ScriptDir\set-dns.ps1" -DnsServer $DnsServer
|
|
if ($LASTEXITCODE -ne 0) { exit 1 }
|
|
|
|
# --- Step 3: Join Domain ---
|
|
|
|
Write-Host ""
|
|
Write-Host "=== Step 3/3: Joining Domain ==="
|
|
$joinArgs = @{ Domain = $Domain }
|
|
if ($ComputerName) { $joinArgs.ComputerName = $ComputerName }
|
|
& "$ScriptDir\join-domain.ps1" @joinArgs
|
|
if ($LASTEXITCODE -ne 0) { exit 1 }
|