Windows Server 2012r2 Iso Better Here

Write-Host " n========================================" -ForegroundColor Cyan Write-Host "Windows Server 2012 R2 Custom ISO Builder" -ForegroundColor Cyan Write-Host "======================================== n" -ForegroundColor Cyan Write-Host "[1/7] Extracting source ISO..." -ForegroundColor Yellow Mount-DiskImage -ImagePath $SourceISOPath -PassThru | ForEach-Object Get-Volume).DriveLetter + ":" Copy-Item "$DriveLetter*" -Destination $ExtractDir -Recurse -Force Dismount-DiskImage -ImagePath $SourceISOPath Step 2: Mount WIM image (Server Standard + GUI) Write-Host "[2/7] Mounting Windows image..." -ForegroundColor Yellow $WimPath = "$ExtractDir\sources\install.wim" $Index = 2 # Index 2 = Windows Server 2012 R2 Standard (Server with GUI)

[Parameter(Mandatory=$true)] [string]$OutputISOPath, # Custom ISO output path

@($WorkDir, $MountDir, $ExtractDir, $TempDir) | ForEach-Object Out-Null windows server 2012r2 iso

$UnattendContent += @" </FirstLogonCommands> <OOBE> <HideEULAPage>true</HideEULAPage> <NetworkLocation>Work</NetworkLocation> <ProtectYourPC>3</ProtectYourPC> <SkipMachineOOBE>true</SkipMachineOOBE> <SkipUserOOBE>true</SkipUserOOBE> </OOBE> </component> </settings> </unattend> "@ $UnattendPath = "$ExtractDir\unattend.xml" $UnattendContent | Out-File -FilePath $UnattendPath -Encoding UTF8 Copy to mount (for boot.wim as well) $BootWimPath = "$ExtractDir\sources\boot.wim" $BootMountDir = "$WorkDir\boot_mount" New-Item $BootMountDir -ItemType Directory -Force | Out-Null

else Write-Host "[4/7] Skipping updates" -ForegroundColor Gray Write-Host "[5/7] Creating unattended installation file..." -ForegroundColor Yellow # Custom ISO output path @($WorkDir

if (-not (Test-Path $OscdimgPath)) Write-Host "oscdimg.exe not found. Downloading alternative..." -ForegroundColor Yellow # Alternative: Use mkisofs from cdrtools Write-Host "Please install Windows ADK: https://go.microsoft.com/fwlink/?linkid=2165885" -ForegroundColor Red exit 1

dism /Mount-Image /ImageFile:$WimPath /Index:$Index /MountDir:$MountDir if ($DriversFolder -and (Test-Path $DriversFolder)) Write-Host "[3/7] Injecting drivers..." -ForegroundColor Yellow dism /Image:$MountDir /Add-Driver /Driver:$DriversFolder /Recurse /ForceUnsigned else Write-Host "[3/7] Skipping driver injection" -ForegroundColor Gray Step 4: Add updates if ($UpdatesFolder -and (Test-Path $UpdatesFolder)) Write-Host "[4/7] Adding updates..." -ForegroundColor Yellow $Updates = Get-ChildItem $UpdatesFolder -Filter "*.msu" foreach ($Update in $Updates) Write-Host " Adding: $($Update.Name)" -ForegroundColor Gray dism /Image:$MountDir /Add-Package /PackagePath:$Update.FullName windows server 2012r2 iso

[string]$UpdatesFolder, # Folder with .msu updates (optional) [string]$DriversFolder, # Folder with .inf drivers (optional) [string]$PostInstallScript, # PowerShell script to run after setup (optional) [string]$ProductKey, # Product key for unattended install (optional) [string]$AdminPassword # Local admin password (optional) ) $ErrorActionPreference = "Stop" Check admin rights if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) Write-Host "Please run as Administrator" -ForegroundColor Red exit 1 Create working directory $WorkDir = "C:\WindowsServerISO_Build" $MountDir = "$WorkDir\mount" $ExtractDir = "$WorkDir\extract" $TempDir = "$WorkDir\temp"