Hi we are having this error. For a long time we tried to uninstall it and reinstall. It solved the problem but now an error 1603 comes.
If any one can help us with it we will be so thankful.
it looks like you have problem with installing prerequisities, here are scripts which I have used few times for installing SP2016 on WS2012 or WS2016.
Installing Features - this script you'll need to run few times till the progress bar be 100%:
#region Create Server 2012R2 Features Array
function getServer2012R2Features {
$windows2012R2Features = @(
"Application-Server",
"AS-NET-Framework",
"AS-Web-Support",
"FileAndStorage-Services",
"Storage-Services",
"Web-Server",
"Web-WebServer",
"Web-Common-Http",
"Web-Default-Doc",
"Web-Dir-Browsing",
"Web-Http-Errors",
"Web-Static-Content",
"Web-Http-Redirect",
"Web-Health",
"Web-Http-Logging",
"Web-Log-Libraries",
"Web-Request-Monitor",
"Web-Performance",
"Web-Stat-Compression",
"Web-Dyn-Compression",
"Web-Security",
"Web-Filtering",
"Web-Basic-Auth",
"Web-Client-Auth",
"Web-Digest-Auth",
"Web-Cert-Auth",
"Web-IP-Security",
"Web-Url-Auth",
"Web-Windows-Auth",
"Web-App-Dev",
"Web-Net-Ext",
"Web-Net-Ext45",
"Web-Asp-Net45",
"Web-ISAPI-Ext",
"Web-ISAPI-Filter",
"Web-Mgmt-Tools",
"Web-Mgmt-Console",
"Web-Mgmt-Compat",
"Web-Metabase",
"Web-Lgcy-Mgmt-Console",
"Web-Lgcy-Scripting",
"Web-WMI",
"Web-Scripting-Tools",
"NET-Framework-Features",
"NET-Framework-Core",
"NET-HTTP-Activation",
"NET-Non-HTTP-Activ",
"NET-Framework-45-Features",
"NET-Framework-45-Core",
"NET-Framework-45-ASPNET",
"NET-WCF-Services45",
"NET-WCF-HTTP-Activation45",
"NET-WCF-TCP-PortSharing45",
"FS-SMB1",
"User-Interfaces-Infra",
"Server-Gui-Mgmt-Infra",
"Server-Gui-Shell",
"Windows-Identity-Foundation",
"PowerShellRoot",
"PowerShell",
"PowerShell-V2",
"PowerShell-ISE",
"WAS",
"WAS-Process-Model",
"WAS-NET-Environment",
"WAS-Config-APIs",
"WoW64-Support"
)
return $windows2012R2Features
}
#endregion
#region Create Server 2016 Features Array
function getServer2016Features ($sku) {
$windows2016Features = @(
"FileAndStorage-Services"
"Storage-Services",
"Web-Server",
"Web-WebServer",
"Web-Common-Http",
"Web-Default-Doc",
"Web-Dir-Browsing",
"Web-Http-Errors",
"Web-Static-Content",
"Web-Health",
"Web-Http-Logging",
"Web-Log-Libraries",
"Web-Request-Monitor",
"Web-Http-Tracing",
"Web-Performance",
"Web-Stat-Compression",
"Web-Dyn-Compression",
"Web-Security",
"Web-Filtering",
"Web-Basic-Auth",
"Web-Client-Auth",
"Web-Digest-Auth",
"Web-Cert-Auth",
"Web-IP-Security",
"Web-Url-Auth",
"Web-Windows-Auth",
"Web-App-Dev",
"Web-Net-Ext",
"Web-Net-Ext45",
"Web-Asp-Net",
"Web-Asp-Net45",
"Web-ISAPI-Ext",
"Web-ISAPI-Filter",
"Web-Mgmt-Tools",
"Web-Mgmt-Console",
"Web-Mgmt-Compat",
"Web-Metabase",
"Web-Lgcy-Scripting",
"Web-WMI",
"NET-Framework-Features",
"NET-Framework-Core",
"NET-HTTP-Activation",
"NET-Non-HTTP-Activ",
"NET-Framework-45-Features",
"NET-Framework-45-Core",
"NET-Framework-45-ASPNET",
"NET-WCF-Services45",
"NET-WCF-HTTP-Activation45",
"NET-WCF-Pipe-Activation45",
"NET-WCF-TCP-PortSharing45",
"Server-Media-Foundation",
"FS-SMB1",
"Windows-Identity-Foundation",
"PowerShellRoot",
"PowerShell",
"PowerShell-V2",
"PowerShell-ISE",
"WAS",
"WAS-Process-Model",
"WAS-NET-Environment",
"WAS-Config-APIs",
"WoW64-Support",
"XPS-Viewer"
)
# if OS is Enterprise
if ($sku -eq 10) {
$windows2016Features += ("InkAndHandwritingServices",
"User-Interfaces-Infra",
"Server-Gui-Mgmt-Infra",
"Desktop-Experience",
"Server-Gui-Shell",
"Windows-Server-Antimalware-Features",
"Windows-Server-Antimalware"
)
}
return $windows2016Features
}
#endregion
#region Get Server OS Information
function setEnvironment {
# Get OS Version Information
$serverOS = ([environment]::OSVersion.Version)
# Enterprise or Standard
$OS = (Get-WmiObject -ComputerName $env:COMPUTERNAME -Class Win32_OperatingSystem)
$sku = $OS.OperatingSystemSKU
# Server 2016
if ($serverOS.Major -eq "10") {
$windowsFeatures = @()
$windowsFeatures = getServer2016Features -sku $sku
$OS = $OS.Caption
Write-Host("Adding features for $OS...")
}
# Server 2012R2
if ($serverOS.Major -eq "6") {
$windowsFeatures = @()
$windowsFeatures = getServer2012R2Features
$OS = (Get-WmiObject -ComputerName $env:COMPUTERNAME -Class Win32_OperatingSystem).Caption
Write-Host("Adding features for $OS...")
}
# Add Windows Features
$restart = Add-WindowsFeature (ForEach-Object{$windowsFeatures})
if ($restart.RestartNeeded -ne "No") {
#if reboot required...
restartComputer
}
}
#endregion
#region Reboot Server
function restartComputer {
for ($i = 10; $i -gt 0; $i--) {
Write-Host("$env:COMPUTERNAME will reboot in $i seconds")
Start-Sleep -Seconds 1
}
Restart-Computer -Force
}
#endregion
#region Call Functions
setEnvironment
#endregion
This download all prerequisities, you can also download them manually and save in the proper folder:
Import-Module BitsTransfer
$destPath = "C:\Install\Prere" # Change this to desired download destination path
$destPath = $destPath.TrimEnd('\')
#region validate download path
function validatePath($destFolder){
## Check that the path entered is valid
If (!(Test-Path $destFolder -Verbose)) {
New-Item -Path $destFolder -ItemType Directory
}
}
#endregion
#region start downloading files
function downloadFiles($urlList, $location) {
# Downloads files based off of $urlList array and saves them to the location based off $location
# This sets the $destFolder variable based off $location
if ($location -eq "SPPR") {$destFolder = $destPath + "\SharePoint\downloads\prerequisiteinstallerfiles"}
# Validate if path exists
validatePath -destFolder $destFolder
# Out-File path for later use...
$destFolder | Out-File "$destPath\sp2016preReqPath.txt" -Force
ForEach ($url in $urlList) {
## Get the file name based on the portion of the url after the last slash
$destFileName = $url.Split('/')[-1]
$destination = "$destFolder\$destFileName"
Try {
## Check if destination file already exists
If (!(Test-Path $destination)) {
## Begin download
Write-Host("Downloading " + $url)
Start-BitsTransfer -Source $url -Destination $destination -DisplayName "Downloading `'$destFileName`' to $destFolder" -Priority High -Description "From $url..." -ErrorVariable err
If ($err) {Throw ""}
}
Else {
# If file does exist is it WCF 5.6?
Write-Host " - File $destFileName already exists, skipping..."
}
}
Catch {
Write-Warning " - An error occurred downloading `'$destFileName`'" | Out-Null
$counter = 0
if ($counter -lt 3) {
$counter ++
Write-Warning("Retrying Download in 3 seconds...")
Start-Sleep -Seconds 3
downloadFiles -urlList $urlList -location $location
}
Else {
$counter = 0
break
}
}
}
return $destFolder
}
#endregion
#region create array of URLs for download
function getSPPRurls() {
## Download SharePoint 2016 Prerequisite Installer files
$SPPRList = ("https://download.microsoft.com/download/4/B/1/4B1E9B0E-A4F3-4715-B417-31C82302A70A/ENU/x64/sqlncli.msi", # Microsoft SQL Server 2012 SP1 Native Client
"https://download.microsoft.com/download/B/9/D/B9D6E014-C949-4A1E-BA6B-2E0DEBA23E54/SyncSetup_en.x64.zip", # Microsoft Sync Framework Runtime v1.0 SP1 (x64)
"https://download.microsoft.com/download/A/6/7/A678AB47-496B-4907-B3D4-0A2D280A13C0/WindowsServerAppFabricSetup_x64.exe", # Windows Server AppFabric 1.1
"https://download.microsoft.com/download/0/1/D/01D06854-CA0C-46F1-ADBA-EBF86010DCC6/rtm/MicrosoftIdentityExtensions-64.msi", # Microsoft Identity Extensions (Windows Identity Foundation v1.1)
"https://download.microsoft.com/download/3/C/F/3CF781F5-7D29-4035-9265-C34FF2369FA2/setup_msipc_x64.exe", # Microsoft Information Protection and Control Client
"https://download.microsoft.com/download/F/1/0/F1093AF6-E797-4CA8-A9F6-FC50024B385C/AppFabric-KB3092423-x64-ENU.exe", # Cumulative Update 7 (KB3092423) for Microsoft AppFabric 1.1 for Windows Server
"https://download.microsoft.com/download/1/C/A/1CAA41C7-88B9-42D6-9E11-3C655656DAB1/WcfDataServices.exe", # Microsoft WCF Data Services 5.6
"https://download.microsoft.com/download/5/7/2/57249A3A-19D6-4901-ACCE-80924ABEB267/ENU/x64/msodbcsql.msi", # Microsoft ODBC Driver 11 for SQL Server
"https://download.microsoft.com/download/C/3/A/C3A5200B-D33C-47E9-9D70-2F7C65DAAD94/NDP46-KB3045557-x86-x64-AllOS-ENU.exe", # Microsoft .NET Framework 4.6
"https://download.microsoft.com/download/3/C/F/3CF781F5-7D29-4035-9265-C34FF2369FA2/setup_msipc_x64.exe", # Microsoft Information Protection and Control Client
"https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe", # Visual C++ Redistributable Package for Visual Studio 2012
"https://download.microsoft.com/download/9/3/F/93FCF1E7-E6A4-478B-96E7-D4B285925B00/vc_redist.x64.exe" # Visual C++ Redistributable for Visual Studio 2015
)
$destURL = downloadFiles -urlList $SPPRList -location "SPPR"
$bustedPOSH = !($destURL -is [string])
if ($bustedPOSH) {
Write-Host(" - Implementing PowerShell Bug Workaround...")
$destURL = $destURL.FullName
}
unzipSyncFiles -desturl $destURL
}
#endregion
#region unzip files
function unzipSyncFiles($destURL) {
$destURL = $destURL.Trim()
Add-Type -assembly "system.io.compression.filesystem"
$zipBackUpPath = $destURL + "\SyncSetup_en.x64.zip"
$zipDestination = $destURL + "\SyncSetup_en.x64"
$path = $zipDestination + "\Microsoft Sync Framework\Synchronization.msi"
$destination = $destURL + "\Synchronization.msi"
if (Test-Path $destination) {
Write-Host(" - Synchronization.msi is already extracted...")
}
if (!(Test-Path $destination)) {
Write-Host(" - Extracting SyncSetup_en.x64.zip to: $zipDestination")
if (Test-Path $zipDestination) {
Write-Host("Removing Unzipped Folder from: $zipDestination")
Remove-Item $zipDestination -Recurse -Force
}
[io.compression.zipfile]::ExtractToDirectory($zipBackUpPath, $zipDestination)
Copy-Item -Path $path -Destination $destination
Write-Host(" - Synchronization.msi unzipped and moved to prerequisiteinstallerfiles folder")
}
}
#endregion
#region Call Functions
validatePath -destFolder $destPath
getSPPRurls
#endregion
Last script install prerequisities, check variables:
# set variables
$sp2016Location = "E:\" # Change to folder location of SharePoint prerequisiteinstaller.exe file
$destPath = "C:\tempDownloads"
$sp2016preReqPath = Get-Content "$destPath\sp2016preReqPath.txt"
Import-Module ServerManager
#region Create variable paths and copy files
$sp2016preReqPath = $sp2016preReqPath.TrimEnd('\')
$sp2016Location = $sp2016Location.TrimEnd('\')
$filterLoc = $sp2016Location + "\prerequisiteinstallerfiles\filterpack"
$filterDest = $sp2016preReqPath + "\prerequisiteinstallerfiles"
$preLoc = $sp2016Location + "\prerequisiteinstaller.exe"
# Copy prerequisiteinstaller, Visual C++ dll, and filterpack
Copy-Item "$sp2016Location\vcruntime140.dll" $sp2016preReqPath -Force
Copy-Item $preLoc $sp2016preReqPath -Force
Copy-Item $filterLoc $filterDest -Recurse -Force
#endregion
#region Install Prerequisites
function installSP2016Files($path) {
$arguments = @(
"/unattended",
"/SQLNCli:`"$path\sqlncli.msi`"",
"/Sync:`"$path\Synchronization.msi`"",
"/AppFabric:`"$path\WindowsServerAppFabricSetup_x64.exe`"",
"/IDFX11:`"$path\MicrosoftIdentityExtensions-64.msi`"",
"/MSIPCClient:`"$path\setup_msipc_x64.exe`"",
"/KB3092423:`"$path\AppFabric-KB3092423-x64-ENU.exe`"",
"/WCFDataServices56:`"$path\WcfDataServices.exe`"",
"/ODBC:`"$path\msodbcsql.msi`"",
"/DotNetFx:`"$path\NDP46-KB3045557-x86-x64-AllOS-ENU.exe`"",
"/MSVCRT11:`"$path\vcredist_x64.exe`"",
"/MSVCRT14:`"$path\vc_redist.x64.exe`""
)
$setupFile = "$path\prerequisiteinstaller.exe"
$cmd = "$setupFile $arguments"
Start-Process $setupFile -ArgumentList $arguments -Verbose -Wait
for ($i = 10; $i -gt 0; $i--) {
Write-Host("$env:COMPUTERNAME will reboot in $i seconds")
Start-Sleep -Seconds 1
}
Restart-Computer -Force
}
#endregion
#region Check if files exist
function checkPath($path) {
# Check if destination path exists
If (!(Get-ChildItem -Path $path -ErrorAction -0).Exists) {
Write-Host("$path does not exist. Please validate the location and try agian.")
exit
}
}
#endregion
#region call functions
checkPath -path $sp2016preReqPath
checkPath -path $preLoc
installSP2016Files -path $sp2016preReqPath
#endregion
Hope it helps!