# --- БЛОК НАСТРОЕК ---
$NewHostName = "DC"
$DomainName = "sbcgeek.com"
$NetBIOSName = "SBCGEEK"
$StaticIP = "192.168.1.100"
$MaskPrefix = 24
$Gateway = "192.168.1.1"
$DNSPrimary = "192.168.1.1"
$AdminPassword = "P@ssw0rd"
$DSRMPassword = ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force
$ScriptPath = "C:\Users\Administrator\Desktop\setup-dc.ps1"
# ---------------------
Set-TimeZone -Id "Russian Standard Time"
# Функция для добавления скрипта в автозапуск после перезагрузки
function Set-RunOnce {
$Command = "powershell.exe -ExecutionPolicy Bypass -File `"$ScriptPath`""
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" -Name "DC_Setup" -Value $Command
}
# Включить автологон
function Set-AutoLogon {
param(
[string]$UserName,
[string]$Password,
[string]$Domain
)
$RegPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
Set-ItemProperty -Path $RegPath -Name "AutoAdminLogon" -Value "1"
Set-ItemProperty -Path $RegPath -Name "DefaultUserName" -Value $UserName
Set-ItemProperty -Path $RegPath -Name "DefaultPassword" -Value $Password
Set-ItemProperty -Path $RegPath -Name "DefaultDomainName" -Value $Domain
}
# Удалить автологон после завершения установки
function Remove-AutoLogon {
$RegPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
Set-ItemProperty -Path $RegPath -Name "AutoAdminLogon" -Value "0" -ErrorAction SilentlyContinue
Remove-ItemProperty -Path $RegPath -Name "DefaultUserName" -ErrorAction SilentlyContinue
Remove-ItemProperty -Path $RegPath -Name "DefaultPassword" -ErrorAction SilentlyContinue
Remove-ItemProperty -Path $RegPath -Name "DefaultDomainName" -ErrorAction SilentlyContinue
}
# Аккуратная настройка IP и DNS без падения на повторном запуске
function Set-NetworkConfig {
$Interface = Get-NetAdapter | Where-Object { $_.Status -eq "Up" } | Select-Object -First 1
if (-not $Interface) {
throw "Не найден активный сетевой интерфейс."
}
$CurrentIP = Get-NetIPAddress -InterfaceIndex $Interface.InterfaceIndex -AddressFamily IPv4 -ErrorAction SilentlyContinue |
Where-Object { $_.IPAddress -eq $StaticIP }
if (-not $CurrentIP) {
$ExistingIPv4 = Get-NetIPAddress -InterfaceIndex $Interface.InterfaceIndex -AddressFamily IPv4 -ErrorAction SilentlyContinue |
Where-Object { $_.PrefixOrigin -ne "WellKnown" }
foreach ($ip in $ExistingIPv4) {
try {
Remove-NetIPAddress -InterfaceIndex $Interface.InterfaceIndex -IPAddress $ip.IPAddress -Confirm:$false -ErrorAction SilentlyContinue
} catch {
}
}
$ExistingRoutes = Get-NetRoute -InterfaceIndex $Interface.InterfaceIndex -AddressFamily IPv4 -DestinationPrefix "0.0.0.0/0" -ErrorAction SilentlyContinue
foreach ($route in $ExistingRoutes) {
try {
Remove-NetRoute -InterfaceIndex $Interface.InterfaceIndex -DestinationPrefix "0.0.0.0/0" -Confirm:$false -ErrorAction SilentlyContinue
} catch {
}
}
New-NetIPAddress -InterfaceIndex $Interface.InterfaceIndex `
-IPAddress $StaticIP `
-PrefixLength $MaskPrefix `
-DefaultGateway $Gateway `
-AddressFamily IPv4 `
-Confirm:$false | Out-Null
}
Set-DnsClientServerAddress -InterfaceIndex $Interface.InterfaceIndex -ServerAddresses $DNSPrimary
}
# ЭТАП 1: Настройка сети и имени
if ($env:COMPUTERNAME -ne $NewHostName) {
Write-Host "ЭТАП 1: Настройка сети и имени..." -ForegroundColor Cyan
Set-NetworkConfig
# Автологон локальным Administrator до создания домена
Set-AutoLogon -UserName "Administrator" -Password $AdminPassword -Domain "."
# Добавляем скрипт в RunOnce и переименовываем
Set-RunOnce
Rename-Computer -NewName $NewHostName -Force
Restart-Computer -Force
exit
}
# ЭТАП 2: Установка роли AD DS
if (!(Get-WindowsFeature -Name AD-Domain-Services).Installed) {
Write-Host "ЭТАП 2: Установка роли AD DS..." -ForegroundColor Cyan
Set-NetworkConfig
# После ребута всё ещё логинимся локальным Administrator
Set-AutoLogon -UserName "Administrator" -Password $AdminPassword -Domain "."
Set-RunOnce
Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools
Restart-Computer -Force
exit
}
# ЭТАП 3: Развертывание леса AD
$DomainRole = (Get-CimInstance Win32_ComputerSystem).DomainRole
if ($DomainRole -lt 4) {
Write-Host "ЭТАП 3: Развертывание леса Active Directory..." -ForegroundColor Cyan
Set-NetworkConfig
# После установки DC вход уже должен быть доменным Administrator
Set-AutoLogon -UserName "Administrator" -Password $AdminPassword -Domain $DomainName
Import-Module ADDSDeployment
Install-ADDSForest `
-CreateDnsDelegation:$false `
-DatabasePath "C:\Windows\NTDS" `
-DomainMode "WinThreshold" `
-DomainName $DomainName `
-DomainNetbiosName $NetBIOSName `
-ForestMode "WinThreshold" `
-InstallDns:$true `
-LogPath "C:\Windows\NTDS" `
-NoRebootOnCompletion:$false `
-SysvolPath "C:\Windows\SYSVOL" `
-SafeModeAdministratorPassword $DSRMPassword `
-Force:$true
} else {
Write-Host "Сервер уже является контроллером домена (DomainRole: $DomainRole)." -ForegroundColor Green
# На DC лучше переключить DNS на самого себя
try {
$Interface = Get-NetAdapter | Where-Object { $_.Status -eq "Up" } | Select-Object -First 1
Set-DnsClientServerAddress -InterfaceIndex $Interface.InterfaceIndex -ServerAddresses "127.0.0.1"
} catch {
}
# Удаляем параметры автологина после завершения установки
Remove-AutoLogon
# Удаляем файл скрипта, если нужно
Remove-Item $ScriptPath -Force -ErrorAction SilentlyContinue
}