Helautomatisera Exchange Server-förutsättningar med ett PowerShell-skript
Om du planerar att installera Microsoft Exchange Server 2019 och senare, funderar du därför på att automatisera Exchange Server Prerequisites för att distribuera den snabbt. Vi har dig täckt.
Att installera Microsoft Exchange Server manuellt tar mycket tid eftersom du måste ladda ner de olika mjukvarupaketen från olika källor.
Efter att ha laddat ner och installerat dem måste du installera de nödvändiga Windows-funktionerna och sedan utöka schemat, förbereda AD och alla domäner.
Att göra detta manuellt tar tid, och om du missar något kommer Exchange Setup inte att fortsätta och uppmanar dig att installera den saknade funktionen.
I den här guiden går jag igenom ett helautomatiskt PowerShell-skript som ställs inalla nödvändiga komponenterför Exchange Server 2019.
Såsom Windows-funktioner, .NET Framework, C++ redistributables, UCMA och URL Rewrite.
Detta kommer att göras med hjälp av Exchange Server 2019 Prerequisites Script, som är en helt automatiserad build i PowerShell.
Detta Exchange PowerShell-skript är snabbt, enkelt och säkert, därför felfritt, för att automatisera Exchange Server-förutsättningar för att snabbt distribuera Exchange Server.
Vad skriptet gör med automatiskt
Vanligtvis vet du att det finns flera program och funktioner som måste installeras innan du installerar Exchange-servern.
Detta skript tar automatiskt hand om installationen av följande programvara och funktioner.
- Installerar .NET Framework 4.8
- Installerar Visual C++ Redistributables (2012 & 2013)
- Installationer krävs Windows Server roller och funktioner
- Installerar URL Rewrite-modulen
- Installerar UCMA 4.0
- Säkerställer att du är redo för Exchange-schema/domänförberedelser
Därför kontrollerar den också om någon funktion eller programvara redan är installerad.
Men om programvaran och funktionen redan är installerad, hoppar den över steget och går vidare.
Förbered din domänkontrollant automatiskt också
Som ni vet måste vi också installera .NET Framework, C++ Redistributables på domänkontrollanten, tillsammans med några andra Windows-funktioner.

För att automatisera det kan du köra följande skript innan du kör skriptet Exchange Server Automating Prerequisites.
# Active Directory Prerequisites Full Installer
# By Techi Jack
Write-Host "Starting Microsoft Exchange AD Prerequisite Installer..." -ForegroundColor Cyan
# Function to check if a redistributable is installed
function Is-VCRedistInstalled {
param ([string]$DisplayName)
$keys = @(
"HKLM:SOFTWAREMicrosoftWindowsCurrentVersionUninstall*",
"HKLM:SOFTWAREWOW6432NodeMicrosoftWindowsCurrentVersionUninstall*"
)
foreach ($key in $keys) {
if (Get-ItemProperty $key -ErrorAction SilentlyContinue | Where-Object { $_.DisplayName -like "*$DisplayName*" }) {
return $true
}
}
return $false
}
# Function to check .NET Framework 4.8 or later
function Is-DotNetFramework48Installed {
$releaseKey = Get-ItemProperty -Path "HKLM:SOFTWAREMicrosoftNET Framework SetupNDPv4Full" -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Release
return ($releaseKey -ge 528040)
}
# Install .NET Framework 4.8 if not installed
if (-not (Is-DotNetFramework48Installed)) {
Write-Host "Installing .NET Framework 4.8..." -ForegroundColor Cyan
$dotNetUrl = "https://download.microsoft.com/download/2/4/8/24892799-1635-47E3-AAD7-9842E59990C3/ndp48-web.exe"
$dotNetPath = "$env:TEMPndp48-web.exe"
Invoke-WebRequest -Uri $dotNetUrl -OutFile $dotNetPath
Start-Process -FilePath $dotNetPath -ArgumentList "/quiet /norestart" -Wait
} else {
Write-Host ".NET Framework 4.8 or newer already installed, skipping..." -ForegroundColor Green
}
# C++ 2012 (x64)
if (-not (Is-VCRedistInstalled -DisplayName "Visual C++ 2012 x64")) {
Write-Host "Installing Visual C++ 2012 x64..." -ForegroundColor Cyan
$vc2012Url = "https://download.microsoft.com/download/1/6/b/16b06f60-3b20-4ff2-b699-5e9b7962f9ae/VSU_4/vcredist_x64.exe"
$vc2012Path = "$env:TEMPvcredist2012_x64.exe"
Invoke-WebRequest -Uri $vc2012Url -OutFile $vc2012Path
Start-Process -FilePath $vc2012Path -ArgumentList "/install /quiet /norestart" -Wait
} else {
Write-Host "Visual C++ 2012 x64 already installed, skipping..." -ForegroundColor Green
}
# C++ 2013 (x64)
if (-not (Is-VCRedistInstalled -DisplayName "Visual C++ 2013 x64")) {
Write-Host "Installing Visual C++ 2013 x64..." -ForegroundColor Cyan
$vc2013Url = "https://download.visualstudio.microsoft.com/download/pr/10912041/cee5d6bca2ddbcd039da727bf4acb48a/vcredist_x64.exe"
$vc2013Path = "$env:TEMPvcredist2013x64.exe"
Invoke-WebRequest -Uri $vc2013Url -OutFile $vc2013Path
Start-Process -FilePath $vc2013Path -ArgumentList "/install /quiet /norestart" -Wait
} else {
Write-Host "Visual C++ 2013 x64 already installed, skipping..." -ForegroundColor Green
}
# Define required features
$features = @(
"RSAT-ADDS"
)
Write-Host "Checking and installing Windows prerequisites..." -ForegroundColor Cyan
foreach ($feature in $features) {
$status = Get-WindowsFeature -Name $feature
if ($status.Installed) {
Write-Host "$feature is already installed. Skipping..." -ForegroundColor Yellow
} else {
Write-Host "Installing $feature..." -ForegroundColor Green
Install-WindowsFeature -Name $feature -IncludeAllSubFeature -Verbose
}
}
Write-Host "All AD prerequisites handled successfully." -ForegroundColor Magenta
Hur man använder Exchange Prerequisites Automating Script
Du kan kopiera skriptet från kodavsnittet nedan och spara det med valfritt namn med tillägget .ps1.
I vårt fall sparade vi det i skriptmappen på C-enheten.
# Exchange Server 2019 Prerequisites Full Installer
# By Techi Jack
Write-Host "Starting Microsoft Exchange Prerequisite Installer..." -ForegroundColor Cyan
# Function to check if a redistributable is installed
function Is-VCRedistInstalled {
param ([string]$DisplayName)
$keys = @(
"HKLM:SOFTWAREMicrosoftWindowsCurrentVersionUninstall*",
"HKLM:SOFTWAREWOW6432NodeMicrosoftWindowsCurrentVersionUninstall*"
)
foreach ($key in $keys) {
if (Get-ItemProperty $key -ErrorAction SilentlyContinue | Where-Object { $_.DisplayName -like "*$DisplayName*" }) {
return $true
}
}
return $false
}
# Function to check .NET Framework 4.8 or later
function Is-DotNetFramework48Installed {
$releaseKey = Get-ItemProperty -Path "HKLM:SOFTWAREMicrosoftNET Framework SetupNDPv4Full" -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Release
return ($releaseKey -ge 528040)
}
# Install .NET Framework 4.8 if not installed
if (-not (Is-DotNetFramework48Installed)) {
Write-Host "Installing .NET Framework 4.8..." -ForegroundColor Cyan
$dotNetUrl = "https://download.microsoft.com/download/2/4/8/24892799-1635-47E3-AAD7-9842E59990C3/ndp48-web.exe"
$dotNetPath = "$env:TEMPndp48-web.exe"
Invoke-WebRequest -Uri $dotNetUrl -OutFile $dotNetPath
Start-Process -FilePath $dotNetPath -ArgumentList "/quiet /norestart" -Wait
} else {
Write-Host ".NET Framework 4.8 or newer already installed, skipping..." -ForegroundColor Green
}
# C++ 2012 (x64)
if (-not (Is-VCRedistInstalled -DisplayName "Visual C++ 2012 x64")) {
Write-Host "Installing Visual C++ 2012 x64..." -ForegroundColor Cyan
$vc2012Url = "https://download.microsoft.com/download/1/6/b/16b06f60-3b20-4ff2-b699-5e9b7962f9ae/VSU_4/vcredist_x64.exe"
$vc2012Path = "$env:TEMPvcredist2012_x64.exe"
Invoke-WebRequest -Uri $vc2012Url -OutFile $vc2012Path
Start-Process -FilePath $vc2012Path -ArgumentList "/install /quiet /norestart" -Wait
} else {
Write-Host "Visual C++ 2012 x64 already installed, skipping..." -ForegroundColor Green
}
# C++ 2013 (x64)
if (-not (Is-VCRedistInstalled -DisplayName "Visual C++ 2013 x64")) {
Write-Host "Installing Visual C++ 2013 x64..." -ForegroundColor Cyan
$vc2013Url = "https://download.visualstudio.microsoft.com/download/pr/10912041/cee5d6bca2ddbcd039da727bf4acb48a/vcredist_x64.exe"
$vc2013Path = "$env:TEMPvcredist2013x64.exe"
Invoke-WebRequest -Uri $vc2013Url -OutFile $vc2013Path
Start-Process -FilePath $vc2013Path -ArgumentList "/install /quiet /norestart" -Wait
} else {
Write-Host "Visual C++ 2013 x64 already installed, skipping..." -ForegroundColor Green
}
# Define required features
$features = @(
"Server-Media-Foundation", "NET-Framework-45-Features", "RPC-over-HTTP-proxy", "RSAT-Clustering",
"RSAT-Clustering-CmdInterface", "RSAT-Clustering-Mgmt", "RSAT-Clustering-PowerShell", "WAS-Process-Model",
"Web-Asp-Net45", "Web-Basic-Auth", "Web-Client-Auth", "Web-Digest-Auth", "Web-Dir-Browsing", "Web-Dyn-Compression",
"Web-Http-Errors", "Web-Http-Logging", "Web-Http-Redirect", "Web-Http-Tracing", "Web-ISAPI-Ext", "Web-ISAPI-Filter",
"Web-Lgcy-Mgmt-Console", "Web-Metabase", "Web-Mgmt-Console", "Web-Mgmt-Service", "Web-Net-Ext45", "Web-Request-Monitor",
"Web-Server", "Web-Stat-Compression", "Web-Static-Content", "Web-Windows-Auth", "Web-WMI", "Windows-Identity-Foundation",
"RSAT-ADDS", "NET-WCF-HTTP-Activation45", "NET-WCF-Pipe-Activation45"
)
Write-Host "Checking and installing Windows prerequisites..." -ForegroundColor Cyan
foreach ($feature in $features) {
$status = Get-WindowsFeature -Name $feature
if ($status.Installed) {
Write-Host "$feature is already installed. Skipping..." -ForegroundColor Yellow
} else {
Write-Host "Installing $feature..." -ForegroundColor Green
Install-WindowsFeature -Name $feature -IncludeAllSubFeature -Verbose
}
}
# URL Rewrite
$rewriteDll = "$env:SystemRootSystem32inetsrvrewrite.dll"
if (-not (Test-Path $rewriteDll)) {
Write-Host "Installing IIS URL Rewrite Module 2.1..." -ForegroundColor Yellow
$urlRewriteUrl = "https://download.microsoft.com/download/1/2/8/128E2E22-C1B9-44A4-BE2A-5859ED1D4592/rewrite_amd64_en-US.msi"
$urlRewritePath = "$env:TEMPrewrite_2.1_x64.msi"
Invoke-WebRequest -Uri $urlRewriteUrl -OutFile $urlRewritePath
Start-Process -FilePath "msiexec.exe" -ArgumentList "/i `"$urlRewritePath`" /quiet /norestart" -Wait
Write-Host "URL Rewrite Module installed." -ForegroundColor Cyan
} else {
Write-Host "URL Rewrite already installed, skipping..." -ForegroundColor Green
}
function Is-UCMAInstalled {
$ucmaPath = "C:Program FilesMicrosoft UCMA 4.0"
return (Test-Path $ucmaPath)
}
$UcmaDownloadUrl = "https://download.microsoft.com/download/2/c/4/2c47a5c1-a1f3-4843-b9fe-84c0032c61ec/UcmaRuntimeSetup.exe"
$UcmaInstaller = "$env:TEMPUcmaRuntimeSetup.exe"
if (-not (Is-UCMAInstalled)) {
Write-Host "UCMA 4.0 not detected." -ForegroundColor Cyan
if (-not (Test-Path $UcmaInstaller)) {
Write-Host "Downloading UCMA installer..." -ForegroundColor Cyan
Invoke-WebRequest -Uri $UcmaDownloadUrl -OutFile $UcmaInstaller -UseBasicParsing
} else {
Write-Host "UCMA installer already exists. Skipping download." -ForegroundColor Yellow
}
Write-Host "Installing UCMA 4.0..." -ForegroundColor Cyan
Start-Process -FilePath $UcmaInstaller -ArgumentList "/quiet" -Wait
Write-Host "UCMA 4.0 installation completed." -ForegroundColor Green
} else {
Write-Host "UCMA 4.0 is already installed. Skipping installation and download." -ForegroundColor Green
}
Write-Host "All prerequisites handled successfully." -ForegroundColor Magenta
- Se till att Windows Server 2019 eller 2022 (senast korrigerad)
- Administratörsrättigheter (Kör som administratör)
- Internetåtkomst (för att ladda ner beroenden
Öppna PowerShell som administratör
Navigera till skriptmappen och kör skriptet
Om du sparade skriptet med namnet ExchangePrerequisites.ps1, kör följande kommando
Exempel:
c:scripts> .ExchangePrerequisites.ps1När skriptet startar kan du följa anvisningarna på skärmen för att kontrollera processen.
Det kommer automatiskt att ladda ner och installera programvaran och Windows-funktionerna.


Hur det hjälper att automatisera Exchange Server-förutsättningar
- Det sparar timmar av manuell konfiguration
- Undviker missade förutsättningar eller Exchange Setup-fel
- Perfekt för labbinstallationer, produktion eller konsultarbete
- Ganska säkert eftersom det är en fräsch server, så du förlorar ingenting
Snabbfelsökningstips
Om skriptet inte körs, dåställa in exekveringspolicynförst genom att köra följande cmdlet
Set-ExecutionPolicy RemoteSigned -Scope ProcessOm URL-omskrivning misslyckas, se till att IIS är installerat först
Därför, omUCMAinte installeras, kontrollera internetanslutningen, eller om webbadressen till programvaran ändras, installera den manuellt.
Obs: Det här skriptet kommer dock att installera IIS-funktionen först, så att URL Rewrite inte kommer att fråga om något fel
Rekommenderad läsning:April 2025 Exchange Server Hotfix-uppdateringar
Slutliga tankar
Om du ställer in Exchange Server 2019 och vill ha ensnabb, felfri installation, kommer det här skriptet att göra ditt jobb mycket enklare. Bokmärk den här sidan eller prenumerera på min kanal för mer Exchange-, Proxmox- och Mailcow-innehåll.
Jag hoppas att du också kommer att gilla några Microsoft Exchange-tutorials
Hur man förnyar Exchange Federation-certifikat
Exchange Server Health Checker PowerShell-skript
Därför, om du stöter på några problem med din Exchange Server, lokala eller Hybrid Exchange
Kontakta oss gärna på[e-postskyddad]
Se dessutom varje steg i aktion, inklusive realtidsinstallation och vad varje komponent gör.












![[NYTT] Så här fixar du att PGSharp inte fungerar](https://elsefix.com/statics/image/placeholder.png)

