$vmname = "dc"
$iso = "C:\SBC Geek LAB\DISTR\en-us_windows_server_2022_updated_march_2026_x64_dvd_3f772967.iso"
$path = "C:\SBC Geek LAB\"
$NewVHDPath = ($path + $vmname + "\Virtual Hard Disks\" + $vmname + ".vhdx")
$lan = "LAN"

New-VM `
-Generation 2 `
-Name $vmname `
-Path $path `
-MemoryStartupBytes 4GB `
-NewVHDPath $NewVHDPath `
-NewVHDSizeBytes 127GB `
-SwitchName $lan

Add-VMDvdDrive -VMName $vmname -Path $iso
Set-VMProcessor -VMname $vmname -count 2 -Reserve 0
$DVD = Get-VMDvdDrive -VMName $vmname
Set-VMFirmware -VMName $vmname -SecureBootTemplateId ([guid]'1734c6e8-3154-4dda-ba5f-a874cc483422') -FirstBootDevice $dvd
Откройте PowerShell ISE (под Administrator), на VM dc, вставьте текст скрипта и сохраните на рабочем столе VM файл setup-dc.ps1 (обязательно), и запустите его - Этап 1 - Авт. перезагрузка (1)
# --- БЛОК НАСТРОЕК ---
$NewHostName   = "DC"
$DomainName    = "sbcgeek.com"
$NetBIOSName   = "SBCGEEK"
$StaticIP      = "192.168.1.100"
$MaskPrefix    = 24
$Gateway       = "192.168.1.1"
$DNSPrimary    = "192.168.1.1"
$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
}

# ЭТАП 1: Настройка сети и имени
if ($env:COMPUTERNAME -ne $NewHostName) {
    Write-Host "ЭТАП 1: Настройка сети и имени..." -ForegroundColor Cyan
    
    # Настройка IP
    $Interface = Get-NetAdapter | Where-Object { $_.Status -eq "Up" } | Select-Object -First 1
    New-NetIPAddress -InterfaceIndex $Interface.InterfaceIndex -IPAddress $StaticIP -PrefixLength $MaskPrefix -DefaultGateway $Gateway -Confirm:$false
    Set-DnsClientServerAddress -InterfaceIndex $Interface.InterfaceIndex -ServerAddresses $DNSPrimary
    
    # Добавляем скрипт в 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-RunOnce
    Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools
    Restart-Computer -Force
    exit
}

# ЭТАП 3: Развертывание леса AD
# Проверяем роль сервера через WMI. 4 и 5 — это Domain Controller.
$DomainRole = (Get-CimInstance Win32_ComputerSystem).DomainRole

if ($DomainRole -lt 4) {
    Write-Host "ЭТАП 3: Развертывание леса Active Directory..." -ForegroundColor Cyan
    
    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
    # Удаляем файл скрипта, если нужно
    Remove-Item $ScriptPath -Force
}
Made on
Tilda