We’ve had several customers ask about an updated PowerShellscript that would download the Dynamics 2016 pre-requisites and put them in to a folder for installations without internet access.  Since the previous two versions there's been a change to the files required in 2016, so with a few tweaks and a little testing, we have a script to paste in to PowerShell and create our own CRM 2016 Redist folder with all the pre-requisite files.

Usually you find PowerShell scripts downloadable as PS1 files, for the sake of safety I’ve provided it as text as well as a txt download so you can review the script it before running it in PowerShell.  With that in mind, this script can be simply copied and pasted into PowerShell so you can quickly build your redist folder.

Instructions for use:

  1. Open PowerShell on the computer you have internet access on
  2. Copy the script below top to bottom (from the “#begin script” to the “#end script”) – NOTE you may need to edit your language code in the script if you are not installing the EN-US language
  3. Paste it right into PowerShell – if it doesn’t execute hit enter to run the “Create-CRM2016Redist” function
  4. This will pop up a folder picker, pick a folder and press OK
  5. After you press Ok, the script will create a new Redist folder in the destination you’ve selected it will then proceed to create the directory structure (11 Folders), then download 24 files, this should total about 216MB of disk space when it’s all done.
  6. Finally, once it has completed, copy the redist folder to the install folder containing: Server, Client, EmailRouter, and BIDSExtensions folders
  7. When you’re done copying your install folder should look like the graphic below:

Download the PowerShell Script as a .txt file.

#begin Script 
#Function to Show an Open Folder Dialog and return the directory selected by the user. 
function Read-FolderBrowserDialog([string]$Message, [string]$InitialDirectory) 
{ 
    $app = New-Object -ComObject Shell.Application 
    $folder = $app.BrowseForFolder(0, $Message, 0, $InitialDirectory) 
    if ($folder) { return $folder.Self.Path } else { return '' } 
}
#download pre-req function, also creates the folders 
function dlPreReq($root, $folderName, $fileName, $url)
{
  $fldr = Join-Path -Path $root -Child $folderName
  $dest = Join-Path -Path $fldr -Child $fileName
  #create folder if it doesnt exist 
  if((Test-Path -Path $fldr) -ne $True)
  {
    New-Item -Path $fldr -ItemType directory | out-null
  }
  Write-Host ("Downloading {0} to path: {1} " -f $fileName, $fldr)
  $wc = New-Object system.net.webclient
  $wc.downloadFile($url,$dest)
}
#download each pre-req 
function Create-CRM2016Redist()
{
  $linkRoot = "http://go.microsoft.com/fwlink/?LinkId="
  $langCode = "ENU" 
  $LHex = 0x409 #must match above langCode
  $folderRoot = (Read-FolderBrowserDialog "Pick the location to create the Dynamics CRM 2013 redist folder") #folder root
  if(($folderRoot.length) -gt 0)
  {
    $fr = Join-Path -Path $folderRoot -Child "Redist"
    dlPreReq $fr dotNETFX "NDP452-KB2901907-x86-x64-AllOS-ENU.exe" "$($linkRoot)328855&clcid=$($LHex)"
    dlPreReq $fr WindowsIdentityFoundation Windows6.0-KB974405-x86.msu "$($linkRoot)190775&clcid=$($LHex)"
    dlPreReq $fr WindowsIdentityFoundation Windows6.0-KB974405-x64.msu "$($linkRoot)190771&clcid=$($LHex)"
    dlPreReq $fr WindowsIdentityFoundation Windows6.1-KB974405-x86.msu "$($linkRoot)190781&clcid=$($LHex)"
    dlPreReq $fr WindowsIdentityFoundation Windows6.1-KB974405-x64.msu "$($linkRoot)190780&clcid=$($LHex)"
    dlPreReq $fr SQLNativeClient sqlncli_x64.msi "$($linkRoot)178252&clcid=$($LHex)"
    dlPreReq $fr SQLSharedManagementObjects SharedManagementObjects_x64.msi "$($linkRoot)293644&clcid=$($LHex)"
    dlPreReq $fr SQLSystemCLRTypes SQLSysClrTypes_x64.msi "$($linkRoot)293645&clcid=$($LHex)" 
    dlPreReq $fr ReportViewer "ReportViewer.msi" "$($linkRoot)390736&clcid=$($LHex)"
    dlPreReq $fr SQLExpr SQLEXPR_x86_$langCode.exe "$($linkRoot)403076&clcid=$($LHex)" 
    dlPreReq $fr SQLExprRequiredSp SQLEXPR_x86_$langCode.exe "$($linkRoot)403077&clcid=$($LHex)"
    dlPreReq $fr SQLCE SSCERuntime_x86-$langCode.exe "$($linkRoot)253117&clcid=$($LHex)"
    dlPreReq $fr SQLCE SSCERuntime_x64-$langCode.exe "$($linkRoot)253118&clcid=$($LHex)"
    dlPreReq $fr MSI45 Windows6.0-KB942288-v2-x86.msu "$($linkRoot)139108&clcid=0x409"
    dlPreReq $fr MSI45 Windows6.0-KB942288-v2-x64.msu "$($linkRoot)139110&clcid=0x409"    
    dlPreReq $fr VCRedist vcredist_x86.exe "$($linkRoot)402042&clcid=$($LHex)"
    dlPreReq $fr VCRedist vcredist_x64.exe "$($linkRoot)402059&clcid=$($LHex)"
    dlPreReq $fr VCRedist10 vcredist_x86.exe "$($linkRoot)404261&clcid=$($LHex)"
    dlPreReq $fr VCRedist10 vcredist_x64.exe "$($linkRoot)404264&clcid=$($LHex)"
    dlPreReq $fr IDCRL wllogin_32.msi "$($linkRoot)194721&clcid=$($LHex)"
    dlPreReq $fr IDCRL wllogin_64.msi "$($linkRoot)194722&clcid=$($LHex)"
    dlPreReq $fr WindowsIdentityFoundationExtensions "MicrosoftIdentityExtensions-64.msi" "http://download.microsoft.com/download/0/1/D/01D06854-CA0C-46F1-ADBA-EBF86010DCC6/r2/MicrosoftIdentityExtensions-64.msi"
    dlPreReq $fr Msoidcrl msoidcli_32bit.msi "$($linkRoot)317650&clcid=$($LHex)"
    dlPreReq $fr Msoidcrl msoidcli_64bit.msi "$($linkRoot)317651&clcid=$($LHex)"    
  }
  else
  {
    write-host "No folder selected, operation was aborted. Run Create-CRM2016Redist to retry."
  }
}

#kick off the script 
Create-CRM2016Redist 

#End Script